Topological data scripting/ru: Difference between revisions
(Created page with '== Введение == Здесь мы объясним вам как управлять Модулем Деталей напрямую из интеприт…') |
No edit summary |
||
Line 65: | Line 65: | ||
</code> |
</code> |
||
Вершина это точка созданная в x=1,y=0,z=0 |
Вершина это точка созданная в x=1,y=0,z=0 |
||
устанавливающая(задающая) объект вершины,вот так, вы можете найти её расположение: |
|||
<code python> |
<code python> |
||
>>> vertex.Point |
>>> vertex.Point |
||
Line 71: | Line 71: | ||
</code> |
</code> |
||
====Как создать Ребро?==== |
|||
Ребра не что иное как линия с двумя вершинами: |
|||
<code python> |
|||
>>> edge = Part.makeLine((0,0,0), (10,0,0)) |
|||
>>> edge.Vertexes |
|||
[<Vertex object at 01877430>, <Vertex object at 014888E0>] |
|||
</code> |
|||
Примечание: Вы не можете создать ребро передав две вершины. |
|||
Вы можете узнать длинну и центр ребра, вот так: |
|||
<code python> |
|||
>>> edge.Length |
|||
10.0 |
|||
>>> edge.CenterOfMass |
|||
Vector (5, 0, 0) |
|||
</code> |
|||
====Как создать ломанную кривую?==== |
|||
Ломанная может быть создана из списка ребер или даже из списка ломаных: |
|||
<code python> |
|||
>>> edge1 = Part.makeLine((0,0,0), (10,0,0)) |
|||
>>> edge2 = Part.makeLine((10,0,0), (10,10,0)) |
|||
>>> wire1 = Part.Wire([edge1,edge2]) |
|||
>>> edge3 = Part.makeLine((10,10,0), (0,10,0)) |
|||
>>> edge4 = Part.makeLine((0,10,0), (0,0,0)) |
|||
>>> wire2 = Part.Wire([edge3,edge4]) |
|||
>>> wire3 = Part.Wire([wire1,wire2]) |
|||
>>> wire3.Edges |
|||
[<Edge object at 016695F8>, <Edge object at 0197AED8>, <Edge object at 01828B20>, |
|||
<Edge object at 0190A788>] |
|||
>>> Part.show(wire3) |
|||
</code> |
|||
Part.show(wire3) будет отображать четыре лини как квадарат: |
|||
<code python> |
|||
>>> wire3.Length |
|||
40.0 |
|||
>>> wire3.CenterOfMass |
|||
Vector (5, 5, 0) |
|||
>>> wire3.isClosed() |
|||
True |
|||
>>> wire2.isClosed() |
|||
False |
|||
</code> |
|||
====Как создать Грань?==== |
|||
Действительны , только грани созданные из замкнутых ломаных. |
|||
В данном примере, wire3 замкнутая ломанная,а wire2 не замкнута (смотри выше) |
|||
<code python> |
|||
>>> face = Part.Face(wire3) |
|||
>>> face.Area |
|||
99.999999999999972 |
|||
>>> face.CenterOfMass |
|||
Vector (5, 5, 0) |
|||
>>> face.Length |
|||
40.0 |
|||
>>> face.isValid() |
|||
True |
|||
>>> sface = Part.Face(wire2) |
|||
>>> face.isValid() |
|||
False |
|||
</code> |
|||
Только грани обладают поверхностью, а не ломанные и ребра. |
|||
====Как создать окружность?==== |
|||
circle = Part.makeCircle(radius,[center,dir_normal,angle1,angle2]) -- Создает окружность с заданным радиусом |
|||
По умолчанию, center=Vector(0,0,0), dir_normal=Vector(0,0,1), angle1=0 and angle2=360. |
|||
Окружность может быть просто создана, как здесь: |
|||
<code python> |
|||
>>> circle = Part.makeCircle(10) |
|||
>>> circle.Curve |
|||
Circle (Radius : 10, Position : (0, 0, 0), Direction : (0, 0, 1)) |
|||
</code> |
|||
Если вы хотите создать её с определенным положением и в определенном направлении |
|||
<code python> |
|||
>>> ccircle = Part.makeCircle(10, Base.Vector(10,0,0), Base.Vector(1,0,0)) |
|||
>>> ccircle.Curve |
|||
Circle (Radius : 10, Position : (10, 0, 0), Direction : (1, 0, 0)) |
|||
</code> |
|||
Окружность будет создана на расстоянии 10 от базовой(оригинальной) координаты х x и будет обращена в сторону оси x. |
|||
Примечание: makeCircleпринимает только тип Base.Vector() в качестве позиции и нормали а не кортеж. |
|||
Вы также можете создать часть окружности, задав угол начальный и конечный угол, как тут: |
|||
<code python> |
|||
>>> from math import pi |
|||
>>> arc1 = Part.makeCircle(10, Base.Vector(0,0,0), Base.Vector(0,0,1), 0, 180) |
|||
>>> arc2 = Part.makeCircle(10, Base.Vector(0,0,0), Base.Vector(0,0,1), 180, 360) |
|||
</code> |
|||
Обе arc1 и arc2 вместе составляют окружность. |
|||
Углы задаются в градусах, если вы хотите задать раддианами, просто преобразуйте используя формулу: |
|||
degrees = radians * 180/PI |
|||
или используя pythonовский math модуль (прежде, конечно, выполнив import math): |
|||
degrees = math.degrees(radians) |
|||
{{docnav|Mesh Scripting/ru|Mesh to Part/ru}} |
{{docnav|Mesh Scripting/ru|Mesh to Part/ru}} |
||
Revision as of 20:44, 1 February 2011
Введение
Здесь мы объясним вам как управлять Модулем Деталей напрямую из интепритатора python FreeCAD, или из любого внешнего сценария. Для уверенности , просмотрите раздел Написание Сценариев и страницу Основ сценариев в FreeCAD если вам необходимо больше информации, о том как работает написание сценариев в FreeCAD.
Для первого использования функциональности модуля Деталей вы должны загрузить модуль Деталей в интепретатор:
import Part
Диаграмма Классов
Это UML обзор наиболее важных классов модуля Деталей:
Геометрия
Геометрические объекты являются строительными блоками для всех топологических объектов:
- GEOM Базовый класс геометрических объектов
- LINE Прямая линия в 3D, задается начальной и конечной точкой
- CIRCLE Окружность или дуга задается центром, начальной и конечной точкой
- ...... И вскоре еще немного ;-)
Топология
Доступны нижеследующие топологические типы данных:
- COMPOUND Группа из топологических объектов любого типа.
- COMPSOLID Составное твердое тело, как набор твердых тел соединенными гранями. Он расширяет понятие Ломаной кривой(WIRE) и оболочки(SHELL) для твердых тел.
- SOLID Часть пространства ограниченная оболочкой. Она трехмерная.
- SHELL Набор граней соединенных между собой через ребра. Оболочки могут быть открытыми или закрытыми.
- FACE В 2D это часть плоскости; в 3D это часть поверхности. Это геометрия ограничена (обрезана) по контуам. Она двухмерная.
- WIRE Набор ребер соединенных через вершины. Он может быть как открытым, так и закрытым в зависимости от того связаны ли крайние ребра или нет.
- EDGE Топологический элемент соответствующий ограниченной кривой. Ребро как правило ограничивается вершинами. Оно одномерное.
- VERTEX Топологический элемент соответствующий точке. Обладает нулевой размерность.
- SHAPE общий термин охватывающий все выше сказанное.
Создание базовых типов
Краткое описание
Вы легко можете создать базовый топологический объект с помощью методов "make...()" содержащихся в модуле Деталей:
b = Part.makeBox(100,100,100) Part.show(b)
Куча других доступных make...() методов:
- makeBox(l,w,h,[p,d]) -- Создает коробку расположенную в точке p и в указанном направлении d с размерами (l,w,h). По умолчанию p установлен как Vector(0,0,0) и d установлен как Vector(0,0,1)
- makeCircle(radius,[p,d,angle1,angle2]) -- Создает окружность с заданным радиусом. По умолчанию p=Vector(0,0,0), d=Vector(0,0,1), angle1=0 и angle2=360
- makeCompound(list) -- Создает составное тело из списка форм
- makeCone(radius1,radius2,height,[p,d,angle]) -- Создает конус с заданным радиусами и высотой. По умолчанию p=Vector(0,0,0), d=Vector(0,0,1) и angle=360
- makeCylinder(radius,height,[p,d,angle]) -- Создает цилиндр с заданным радиусом и высотой. По умолчанию p=Vector(0,0,0), d=Vector(0,0,1) и angle=360
- makeLine((x1,y1,z1),(x2,y2,z2)) -- Создает линию проходящую через две точки
- makePlane(length,width,[p,d]) -- Создает плоскость с заданной длинной и шириной. По умолчанию p=Vector(0,0,0) и d=Vector(0,0,1)
- makePolygon(list) -- Создает многоугольник из списка точек
- makeSphere(radius,[p,d,angle1,angle2,angle3]) -- Создает сферу с заданным радиусом. По умолчанию p=Vector(0,0,0), d=Vector(0,0,1), angle1=0, angle2=90 и angle3=360
- makeTorus(radius1,radius2,[p,d,angle1,angle2,angle3]) -- Создает тор по заданными радиусамi.По умолчанию p=Vector(0,0,0), d=Vector(0,0,1), angle1=0, angle2=360 и angle3=360
Подробные объяснения
Сначала импортируем следующее:
>>> import Part >>> from FreeCAD import Base
Как создать Вершину?
>>> vertex = Part.Vertex((1,0,0))
Вершина это точка созданная в x=1,y=0,z=0 устанавливающая(задающая) объект вершины,вот так, вы можете найти её расположение:
>>> vertex.Point
Vector (1, 0, 0)
Как создать Ребро?
Ребра не что иное как линия с двумя вершинами:
>>> edge = Part.makeLine((0,0,0), (10,0,0))
>>> edge.Vertexes
[<Vertex object at 01877430>, <Vertex object at 014888E0>]
Примечание: Вы не можете создать ребро передав две вершины. Вы можете узнать длинну и центр ребра, вот так:
>>> edge.Length
10.0
>>> edge.CenterOfMass
Vector (5, 0, 0)
Как создать ломанную кривую?
Ломанная может быть создана из списка ребер или даже из списка ломаных:
>>> edge1 = Part.makeLine((0,0,0), (10,0,0))
>>> edge2 = Part.makeLine((10,0,0), (10,10,0))
>>> wire1 = Part.Wire([edge1,edge2])
>>> edge3 = Part.makeLine((10,10,0), (0,10,0))
>>> edge4 = Part.makeLine((0,10,0), (0,0,0))
>>> wire2 = Part.Wire([edge3,edge4])
>>> wire3 = Part.Wire([wire1,wire2])
>>> wire3.Edges
[<Edge object at 016695F8>, <Edge object at 0197AED8>, <Edge object at 01828B20>,
<Edge object at 0190A788>]
>>> Part.show(wire3)
Part.show(wire3) будет отображать четыре лини как квадарат:
>>> wire3.Length
40.0
>>> wire3.CenterOfMass
Vector (5, 5, 0)
>>> wire3.isClosed()
True
>>> wire2.isClosed()
False
Как создать Грань?
Действительны , только грани созданные из замкнутых ломаных. В данном примере, wire3 замкнутая ломанная,а wire2 не замкнута (смотри выше)
>>> face = Part.Face(wire3)
>>> face.Area
99.999999999999972
>>> face.CenterOfMass
Vector (5, 5, 0)
>>> face.Length
40.0
>>> face.isValid()
True
>>> sface = Part.Face(wire2)
>>> face.isValid()
False
Только грани обладают поверхностью, а не ломанные и ребра.
Как создать окружность?
circle = Part.makeCircle(radius,[center,dir_normal,angle1,angle2]) -- Создает окружность с заданным радиусом
По умолчанию, center=Vector(0,0,0), dir_normal=Vector(0,0,1), angle1=0 and angle2=360. Окружность может быть просто создана, как здесь:
>>> circle = Part.makeCircle(10)
>>> circle.Curve
Circle (Radius : 10, Position : (0, 0, 0), Direction : (0, 0, 1))
Если вы хотите создать её с определенным положением и в определенном направлении
>>> ccircle = Part.makeCircle(10, Base.Vector(10,0,0), Base.Vector(1,0,0))
>>> ccircle.Curve
Circle (Radius : 10, Position : (10, 0, 0), Direction : (1, 0, 0))
Окружность будет создана на расстоянии 10 от базовой(оригинальной) координаты х x и будет обращена в сторону оси x. Примечание: makeCircleпринимает только тип Base.Vector() в качестве позиции и нормали а не кортеж. Вы также можете создать часть окружности, задав угол начальный и конечный угол, как тут:
>>> from math import pi
>>> arc1 = Part.makeCircle(10, Base.Vector(0,0,0), Base.Vector(0,0,1), 0, 180)
>>> arc2 = Part.makeCircle(10, Base.Vector(0,0,0), Base.Vector(0,0,1), 180, 360)
Обе arc1 и arc2 вместе составляют окружность. Углы задаются в градусах, если вы хотите задать раддианами, просто преобразуйте используя формулу: degrees = radians * 180/PI или используя pythonовский math модуль (прежде, конечно, выполнив import math): degrees = math.degrees(radians)