Прежде всего вы должны импортировать Mesh модуль:
import Mesh
После этого вы получаете доступ к Mesh модулю и классам Mesh которые сообщаются с с функциями FreeCAD C++ Mesh-Kernel.
Чтобы создать простейший полигонный(сеточный) объект, просто используйте стандартный конструктор:
mesh = Mesh.Mesh()
Вы также можете создать объект из файла
mesh = Mesh.Mesh('D:/temp/Something.stl')
Какие файловые форматы вы можете использовать для создания полигиональных объектов написано здесь.
Или создайте его из множества треугольников, задав их верщины:
planarMesh = [
# triangle 1
[-0.5000,-0.5000,0.0000],[0.5000,0.5000,0.0000],[-0.5000,0.5000,0.0000],
#triangle 2
[-0.5000,-0.5000,0.0000],[0.5000,-0.5000,0.0000],[0.5000,0.5000,0.0000],
]
planarMeshObject = Mesh.Mesh(planarMesh)
Mesh.show(planarMeshObject)
Mesh-Ядро заботится о создании топологического правильной структуры данных сортируя совпадающие точки и края вместе.
Позже вы увидете как можно протестировать и изучить полигиональные(сеточные) данные.
Для создания обычной геометрии вы можете использовать Python сценарий BuildRegularGeoms.py.
import BuildRegularGeoms
Этот сценарий предоставляет методы для определения простых тел вращения, таких как сферы, элипсоиды, цилиндры, тороиды и конусы. И он также обладает методом для создания простого куба. Чтобы создать тороид, например, следующим образом:
t = BuildRegularGeoms.Toroid(8.0, 2.0, 50) # list with several thousands triangles
m = Mesh.Mesh(t)
Первые два параметра определяют радиусы тороида а третий параметр фактор подвыборки , как много треугольников будет создано. Чем выше это значение тем сглаженней и наоброт чем ниже тем грубее тело. Mesh классы предоставляют набор логических функций которые могут быть использовыны в целях моделирования. Они обеспечивают объединение, пересечение и вычитание двух полигиональных объектов.
m1, m2 # are the input mesh objects
m3 = Mesh.Mesh(m1) # create a copy of m1
m3.unite(m2) # union of m1 and m2, the result is stored in m3
m4 = Mesh.Mesh(m1)
m4.intersect(m2) # intersection of m1 and m2
m5 = Mesh.Mesh(m1)
m5.difference(m2) # the difference of m1 and m2
m6 = Mesh.Mesh(m2)
m6.difference(m1) # the difference of m2 and m1, usually the result is different to m5
Наконец, полный пример, который вычисляет пересечение сферы и цилиндра, пересекающего сферу.
import Mesh, BuildRegularGeoms
sphere = Mesh.Mesh( BuildRegularGeoms.Sphere(5.0, 50) )
cylinder = Mesh.Mesh( BuildRegularGeoms.Cylinder(2.0, 10.0, True, 1.0, 50) )
diff = sphere
diff = diff.difference(cylinder)
d = FreeCAD.newDocument()
d.addObject("Mesh::Feature","Diff_Sphere_Cylinder").Mesh=diff
d.recompute()
Вы также можете записать полигиональную модель как python модуль:
m.write("D:/Develop/Projekte/FreeCAD/FreeCAD_0.7/Mod/Mesh/SavedMesh.py")
import SavedMesh
m2 = Mesh.Mesh(SavedMesh.faces)
Трудно, широко использовать источники полигиональной модели связанные с сценарием, все это тестирование написания сценариев для полигионального модудя В этих тестах модуля буквально все методы вызываются и все свойства/атрибуты вымышлены. Так что если вы достаточно смелы, взгляните на Unit Test module.
See also Mesh API