RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1610983
Accepted
Филипп Шувалов
Филипп Шувалов
Asked:2025-04-29 18:15:51 +0000 UTC2025-04-29 18:15:51 +0000 UTC 2025-04-29 18:15:51 +0000 UTC

CadQuery python:构建对象的复杂倒角

  • 772

尝试在 CadQuery Python 中对螺栓进行建模:

import cadquery as cq
from math import sqrt, tan, radians

# Параметры модели
head_diameter = 10.0  # Диаметр по вершинам (описанная окружность)
head_height = 5.0     # Высота головки
shaft_diameter = 5.0  # Диаметр стержня
shaft_length = 20.0   # Длина стержня

# Расчетные параметры
R = head_diameter / 2                 # Радиус описанной окружности
r = R * sqrt(3)/2                     # Радиус вписанной окружности
chamfer_size = (R - r) / tan(45)      # Размер фаски для угла 45°

#1. Создаем шестигранную головку
bolt_head = (
    cq.Workplane("XY")
    .polygon(6, 2*R)                  # Создаем шестигранник
    .extrude(head_height)              # Выдавливаем на высоту головки
    .translate((0, 0, -1 * (head_height/2)))
)

bolt_head = bolt_head.edges("Z").chamfer(1)

# 2. Создаем стержень
bolt_shaft = (
    cq.Workplane("XY")
    .circle(shaft_diameter/2)
    .extrude(-shaft_length)
)

# 3. Объединяем компоненты
bolt = bolt_head.union(bolt_shaft)

结果是这样的胡言乱语: 在此处输入图片描述

现在的问题是。如何以 45 度角切割螺栓头的顶角。目标是得到像这样的螺栓头: 在此处输入图片描述

python
  • 2 2 个回答
  • 49 Views

2 个回答

  • Voted
  1. Best Answer
    strawdog
    2025-04-30T04:06:21Z2025-04-30T04:06:21Z

    我不是 cadquery 方面的专家,所以我必须深入研究一下 api。我得出的结论是,解决你的问题最简单的方法是多次减去固体物体。下面是一个例子(当然没有精确的尺寸):

    import cadquery as cq
    
    cap = cq.Solid.makeCone(10,8,2) # создаете начальный конус
    for i in (0, 60, 120, 180, 240, -60): 
        # создаете призму
        box = cq.Solid.makeBox(12,12,2, (8, -6, 0))
        # вращаете ее на i градусов
        box = box.rotate((0, 0, 0), (0, 0, 1), i)
        # вычитаете призму из конуса
        cap = cap.cut(box)
    cap
    

    在此处输入图片描述

    • 4
  2. Филипп Шувалов
    2025-04-30T18:09:53Z2025-04-30T18:09:53Z

    采取了稍微不同的路线。但具有尺寸和控制。感谢 strawdog 提出的可以实现的想法!!!

        import cadquery as cq
        from cadquery import Solid
        from math import sqrt, tan, radians, atan, pi
        
        
        # ========== ПАРАМЕТРЫ МОДЕЛИ ==========
        HEAD_DIAMETER = 33.53    # Диаметр головки по вершинам
        HEAD_HEIGHT = 12.5       # Высота шестигранной части
        SHAFT_DIAMETER = 10.0   # Диаметр стержня
        SHAFT_LENGTH = 70.0     # Длина стержня
        CHAMFER_ANGLE = 45.0    # Угол скоса вершин
                
        # Расчетные константы
        R = HEAD_DIAMETER / 2
        r = R * sqrt(3)/2  # Радиус вписанной окружности    
        
        
        # ========== ПАРАМЕТРЫ СЕКУЩЕГО КОНУСА ==========
        BASE_RADIUS = (HEAD_DIAMETER / 2)*1.2 # Внешний радиус основания
        TOP_RADIUS = 5.0 # Внешний радиус вершины
        HEIGHT = ((BASE_RADIUS - TOP_RADIUS) / tan((CHAMFER_ANGLE*pi)/180)) # Общая высота конуса
        WALL_THICKNESS = BASE_RADIUS - (HEAD_DIAMETER/2)      # Толщина стенок
        H_TARGET = HEIGHT*(((BASE_RADIUS-WALL_THICKNESS)-r)/
                           ((BASE_RADIUS-WALL_THICKNESS)-(TOP_RADIUS-WALL_THICKNESS))) # подача по оси Z для достижения вписанной окружности        
        # =======================================
        
        # Базовый шестигранник
        head = cq.Workplane("XY").polygon(6, HEAD_DIAMETER).extrude(-HEAD_HEIGHT)
        
        # Внешний конус
        outer = cq.Solid.makeCone(BASE_RADIUS, TOP_RADIUS, HEIGHT, (0, 0, 0))
        
        # Внутренний конус
        inner = cq.Solid.makeCone(
            BASE_RADIUS - WALL_THICKNESS, 
            TOP_RADIUS - WALL_THICKNESS, 
            HEIGHT
        )
        
        # Вырезаем внутреннюю часть конуса
        hollow_cone = outer.cut(inner)
        
        head = head.translate((0, 0, H_TARGET)).cut(hollow_cone)
    

    通过割锥建模的结果

    • 2

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5