FreeCAD - Scripting 04 - Parça (Part) Komut Dosyası Oluşturmak
Sal 22 Şubat 2022Parça (Part) Komut Dosyası Oluşturmak
Takdim
Part (Parça)
modülünde kullanılan ana veri yapısı, OpenCASCADE'den BRep veri türüdür. Part
modülünün hemen hemen tüm içeriği ve nesne türleri, Python komut dosyasında mevcuttur. Bu, Çizgiler, Daireler ve Yaylar gibi geometrik temel şekilleri ve Noktalar, Kenarlar, Kafes/Ağ Yapıları, Yüzeyler, Katılar ve Bileşikler gibi tüm TopoShapes aralığını içerir. Bu nesnelerin her biri için çeşitli oluşturma yöntemleri mevcuttur ve bazıları için, özellikle TopoShapes için, boole birleşim/fark/kesişim gibi gelişmiş işlemler de mevcuttur. Daha fazla bilgi için FreeCAD Komut Dosyası Oluşturma Temelleri sayfasında açıklandığı gibi Part (Parça)
modülünün içeriğini keşfedin.
Oluşturulabilecek en temel nesne, basit bir Data Placement
özelliğini, rengini ve görünümünü tanımlayan temel özelliklere sahip bir Parça Özelliğidir (Part Feature).
2B geometrik nesnelerde kullanılan diğer bir basit nesne, Sketcher SketchObject ve çoğu Draft öğelerinin temeli olan Part Part2DObject'dir.
Ayrıca bakınız
Test komut dosyası
Bir komut dosyasıyla Parça Temel Şekillerinin oluşturulmasını test edin. 0.19 sürümünde tanıtıldı
import parttests.part_test_objects as pto
pto.create_test_file("example_file")
Bu betik (script), programın kurulum dizininde bulunur ve temel şekillerin nasıl oluşturulduğunu görmek için incelenebilir.
$INSTALL_DIR/Mod/Part/parttests/part_test_objects.py
Örnekler
Çizgi
Bir çizgi öğesi oluşturmak için Python konsoluna geçin ve şunu girin:
import FreeCAD as App
import Part
doc = App.newDocument()
line = Part.LineSegment()
line.StartPoint = (0.0, 0.0, 0.0)
line.EndPoint = (1.0, 1.0, 1.0)
obj = doc.addObject("Part::Feature", "Line")
obj.Shape= line.toShape()
doc.recompute()
Yukarıdaki Python örneğini adım adım inceleyelim:
import FreeCAD as App
import Part
doc = App.newDocument()
Bu, FreeCAD ve Part (Parça)
modüllerini yükler ve yeni bir belge oluşturur.
line = Part.LineSegment()
line.StartPoint = (0.0, 0.0, 0.0)
line.EndPoint = (1.0, 1.0, 1.0)
Çizgi (line
) aslında bir çizgi parçasıdır, dolayısıyla başlangıç ve bitiş noktası vardır.
obj = doc.addObject("Part::Feature", "Line")
obj.Shape= line.toShape()
Bu, belgeye bir Parça (Part)
nesne türü ekler ve çizgi parçasının şekil temsilini, eklenen nesnenin Shape
özelliğine atar. Burada bir TopoShape
oluşturmak için bir geometrik temel şekil (Part.LineSegment
) kullandığımızı anlamak önemlidir (toShape
yöntemiyle). Belgeye yalnız şekil eklenebilir. FreeCAD'de geometrik temel şekilleri "bina yapıları" olarak kullanılır.
doc.recompute()
Bu komut belgeyi günceller. Bu aynı zamanda yeni Part nesnesinin görsel temsilini de hazırlar.
Bir çizgi parçasının başlangıç ve bitiş noktası doğrudan yapıcıda belirtilerek de oluşturulabileceğini unutmayın, örneğin Part.LineSegment(nokta1, nokta2)
veya burada yaptığımız gibi varsayılan bir çizgi oluşturup özelliklerini daha sonra ayarlayabiliriz.
Bir Çizgi, ayrıca şu kod bloğunu yazarak (fonksiyon oluşturarak) ta oluşturuşabilir:
import FreeCAD as App
import Part
def my_create_line(pt1, pt2, obj_name):
obj = App.ActiveDocument.addObject("Part::Line", obj_name)
obj.X1 = pt1[0]
obj.Y1 = pt1[1]
obj.Z1 = pt1[2]
obj.X2 = pt2[0]
obj.Y2 = pt2[1]
obj.Z2 = pt2[2]
App.ActiveDocument.recompute()
return obj
line = my_create_line((0, 0, 0), (0, 10, 0), "LineName")
Çember / Daire
Bir çember / daire benzer şekilde oluşturulabilir:
import FreeCAD as App
import Part
doc = App.activeDocument()
circle = Part.Circle()
circle.Radius = 10.0
obj = doc.addObject("Part::Feature", "Circle")
obj.Shape = circle.toShape()
doc.recompute()
Veya şu kod bloğunu yazarak (fonksiyon oluşturarak) ta çember oluşturabilisiniz:
import FreeCAD as App
import Part
def my_create_circle(rad, obj_name):
obj = App.ActiveDocument.addObject("Part::Circle", obj_name)
obj.Radius = rad
App.ActiveDocument.recompute()
return obj
circle = my_create_circle(5.0, "CircleName")
Alternatif olarak, merkezini, eksenini ve yarıçapını tanımlayarak bir daire oluşturabiliriz:
import FreeCAD as App
import Part
doc = App.activeDocument()
center = App.Vector(1, 2, 3)
axis = App.Vector(1, 1, 1)
radius = 10
circle = Part.Circle(center, axis, radius)
obj = doc.addObject("Part::Feature", "Circle")
obj.Shape = circle.toShape()
doc.recompute()
Veya çember çevresi üzerinde üç nokta tanımlayarak (3 noktaya teğet çember):
import FreeCAD as App
import Part
doc = App.activeDocument()
p1 = App.Vector(10, 0, 0)
p2 = App.Vector(0, 10, 0)
p3 = App.Vector(0, 0, 10)
circle = Part.Circle(p1, p2, p3)
obj = doc.addObject("Part::Feature", "Circle")
obj.Shape = circle.toShape()
doc.recompute()
Tekrar not edin, bir şekil oluşturmak için daireyi (geometrik temel şekilleri) kullandık. Elbette daha sonra aşağıdakileri yaparak yapı geometrimize hala erişebiliriz:
shape = obj.Shape
edge = shape.Edges[0]
curve = edge.Curve
Burada nesnemizin (obj
) Şeklini (Shape
) ve ardından Kenarlar (edges
) listesini alıyoruz. Bu durumda şekli tek bir daireden oluşturduğumuz için sadece bir kenar olacaktır. Bu yüzden Kenarlar listesinde yalnızca ilk öğeyi alıyoruz ve ardından eğrisini (curve
) alıyoruz. Her kenarın, dayandığı geometrik temel nesne olan bir Eğrisi vardır.
Yay
Bir yay şu şekilde oluşturulabilir:
import FreeCAD as App
import Part
doc = App.activeDocument()
p1 = App.Vector(10, 0, 0)
p2 = App.Vector(0, 10, 0)
p3 = App.Vector(-10, 0, 0)
arc = Part.Arc(p1, p2, p3)
obj = doc.addObject("Part::Feature", "Arc")
obj.Shape = arc.toShape()
doc.recompute()
Bu kod, yarım daire çizer. Merkez (0, 0, 0) konumundadır. Yarıçap 10'dur. P1, +X eksenindeki başlangıç noktasıdır. P2, +Y ekseninde orta nokta ve P3, -X ekseninde bitiş noktasıdır.
Ayrıca bir çemberden bir yay da oluşturabiliriz:
import FreeCAD as App
import Part
doc = App.activeDocument()
p1 = App.Vector(10, 0, 0)
p2 = App.Vector(0, 10, 0)
p3 = App.Vector(-10, 0, 0)
circle = Part.Circle(p1, p2, p3)
arc = Part.ArcOfCircle(circle, 0.0, 0.7854)
obj = doc.addObject("Part::Feature", "Arc")
obj.Shape = arc.toShape()
doc.recompute()
Bu kodun çalışabilmesi için bir daireye ve radyan cinsinden bir başlangıç açısına ve bitiş açısına ihtiyacı var.
Kaynak: Part scripting