But Part.Circle is not clear round.
How to define number's segment of a circle.
SolarPath.py:
Code: Select all
"""
SolarPath.py
"""
import FreeCAD , Draft , Part
from FreeCAD import Vector , Placement
from Units import Unit,Quantity
class SolarPath():
def __init__(self, obj):
obj.addProperty("App::PropertyPlacement","Placement","Base","")
obj.addProperty("App::PropertyLength","R","SolarPath","Radius of Solr Path")
obj.addProperty("App::PropertyLength","t","SolarPath","Thickness of Ring")
obj.R = Quantity('20000 mm')
obj.t = Quantity('1000 mm')
obj.Proxy = self
def onChanged(self, fp, prop):
if prop == "R" or prop == "t":
self.execute(fp)
def execute(self, fp):
Ext = Quantity('500 mm')
R = fp.R
R2 = R - fp.t
geoms = []
AxisX =Part.Line( Vector (R+Ext,0,0) ,Vector(-R-Ext,0,0) )
geoms.append(AxisX.toShape())
AxisY =Part.Line( Vector (0,R+Ext,0) ,Vector(0,-R-Ext,0) )
geoms.append(AxisY.toShape())
Circle1 = Part.Circle()
Circle1.Radius = R
geoms.append(Circle1.toShape())
Circle2 = Part.Circle()
Circle2.Radius = R2
geoms.append(Circle2.toShape())
for iAngle in range(0,360,15):
if iAngle%90 > 0 :
pl = Placement(Vector(0,0,0),Vector(0,0,1),iAngle )
tick = Part.Line( Vector (0,R2,0) ,Vector(0,R+Ext,0) )
tick.rotate(pl)
geoms.append(tick.toShape())
for iAngle in range(0,360,5):
if iAngle%15 > 0 :
pl = Placement(Vector(0,0,0),Vector(0,0,1),iAngle )
minor_tick = Part.Line( Vector (0,R2,0) ,Vector(0,R,0) )
minor_tick.rotate(pl)
geoms.append(minor_tick.toShape())
Repr = Part.Compound(geoms)
Repr.Placement = fp.Placement
fp.Shape = Repr
def makeSolarPath():
doc = FreeCAD.activeDocument()
if doc == None:
doc = FreeCAD.newDocument()
obj=doc.addObject("Part::FeaturePython","SolarPath") #add object to document
obj.Label = "SolarPath"
SolarPath(obj)
obj.ViewObject.Proxy=0
viewObject = Gui.ActiveDocument.getObject(obj.Name)
viewObject.LineColor = (0.61,0.61,0.61)
#ViewProviderBox(a.ViewObject)
makeSolarPath()
FreeCAD.ActiveDocument.recompute()