Topological data scripting/ru: Difference between revisions

From FreeCAD Documentation
(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 обзор наиболее важных классов модуля Деталей:

Python классы содержащиеся в модуле Деталей
Python классы содержащиеся в модуле Деталей

Геометрия

Геометрические объекты являются строительными блоками для всех топологических объектов:

  • 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)

Mesh Scripting/ru
Mesh to Part/ru
Available translations of this page: