mirmik / zencad

CAD system for righteous zen programmers
https://mirmik.github.io/zencad/
MIT License
134 stars 13 forks source link

Solid extrude (question) #69

Closed faryna1993 closed 3 years ago

faryna1993 commented 3 years ago

Добрый день! у меня есть вопрос. Могу ли я какими-то образом выполнить команду "extrude" для "solid ", чтобы получить такой же результат как на фото: image это два конуса, которые находятся на расстоянии друг от друга и объединены между собой.

Пробовал выполнять бинарные операции в цикле, но это не такой результат, который мне нужен. не могу избавиться от острых углов. image

Вопрос: Можно ли каким-то образом добиться результата, как на фото 1 ?, нечто вроде команды "extrude ". Или иным вариантом.

Можете мне отправить скрипт с таким примером ?. Спасибо!

faryna1993 commented 3 years ago

Дополнения. Хочу для себя сделать симулятор для G-Сode с фрезами. image

mirmik commented 3 years ago

Добрый день вот прямо такую неделимую поверхность в brep представлении сделать затруднительно, но, учитывая, что она легко дробиться на примитивы, получаем:

#!/usr/bin/env python3
#coding: utf-8

from zencad import *

def wide_cone(r1, r2, h, w):
    halfcone = cone(r1, r2, h) - halfspace().rotateX(deg(90))
    triangle_face = near_face(halfcone, point3(0,0,h/2)) 
    prism = extrude(triangle_face, (0,w,0))
    return prism + halfcone + halfcone.rotZ(deg(180)).movY(w)

disp(wide_cone(10,0,10,20))
show()

Безымянный

oleg-medovikov commented 3 years ago

А вот мой варик:

image

from zencad import *

radius = 30
long = 100
height = 50

o1 = circle(r=radius, angle=math.pi, wire=True).moveY(0.5*long )
o2 = circle(r=radius, angle=-math.pi, wire=True).moveY(-0.5*long )

line1 = sew([ o1, segment(o1.endpoints()[0], o2.endpoints()[-1]),o2 , segment(o2.endpoints()[0], o1.endpoints()[-1]) ] )
fill(line1)
line2 = rectangle(0.1, long , center=True, wire=True).up(height )

list_ = []
list_.append(line1)
list_.append(line2)

m = loft(list_,smooth=False, shell=False, maxdegree=4) 

disp(m)

show()
faryna1993 commented 3 years ago

@mirmik and @oleg-medovikov

Спасибо за помощь!, и мега быстрый ответ!