""" CAD2D_Object_Coin.py 30 Jan 2020 -- test Prototype """ import FreeCAD, FreeCADGui , Draft from FreeCAD import Vector from pivy import coin class CAD2D_COIN: def __init__(self, obj): obj.addProperty("App::PropertyStringList", "Command2d", "Data","Data of 2D Geometry Command ").Command2d=[ 'L;0,0;1000,1000','# for Test' , 'L;0,0;0,1000', 'L;0,0;1000,0' , ] obj.addProperty("App::PropertyStringList", "Variables", "Data","Variables of 2D Geometry Command ").Variables=[ 'W:800'] obj.Proxy = self def onChanged(self, fp, prop): pass def execute(self, fp): pass class ViewProviderCAD2D_COIN: def __init__(self, obj): obj.Proxy = self def attach(self, vobj): self.shaded = coin.SoGroup() # ------------- """ sep = coin.SoSeparator() mat = coin.SoBaseColor() mat.rgb = (0.9,0.1,0.1) sep.addChild(mat) iMemberSep = coin.SoSeparator() coor = coin.SoCoordinate3() pts = [[0,0,0] , [1000,1000,0]] coor.point.setValues(0,len(pts),pts) iMember = coin.SoLineSet() iMember.numVertices.setValue(2) iMemberSep.addChild(coor) iMemberSep.addChild(iMember) sep.addChild(iMemberSep) self.shaded.addChild(sep) """ # ------------- vobj.addDisplayMode(self.shaded,"Shaded"); self.onChanged(vobj,"Command2d") def updateData(self, fp, prop): sep.removeAllChildren() Command_2D = fp.Command2d for var in fp.Variables: var = var.split(':') for i in range(len(Command_2D)): if (len(Command_2D[i].strip())!=0): Command_2D[i] = Command_2D[i].replace( var[0] , var[1] ) for cmd in Command_2D: if len( cmd.strip() ) ==0: continue if cmd.strip()[0]=='#': continue token = cmd.split(';') if token[0].strip().upper()=='L': Msg('Line activate\n') x1 = float( eval( token[1].split(',')[0] )) y1 = float( eval(token[1].split(',')[1] )) x2 = float( eval(token[2].split(',')[0] )) y2 = float( eval(token[2].split(',')[1] )) # --------------- mat = coin.SoBaseColor() mat.rgb = (0.1,0.1,0.9) sep.addChild(mat) iMemberSep = coin.SoSeparator() coor = coin.SoCoordinate3() pts = [[x1,y1,0] , [x2,y2,0]] coor.point.setValues(0,len(pts),pts) iMember = coin.SoLineSet() iMember.numVertices.setValue(2) iMemberSep.addChild(coor) iMemberSep.addChild(iMember) sep.addChild(iMemberSep) # --------------- self.shaded.addChild(sep) def getDisplayModes(self,obj): '''Return a list of display modes.''' modes=[] modes.append("Shaded") return modes def getDefaultDisplayMode(self): '''Return the name of the default display mode. It must be defined in getDisplayModes.''' return "Shaded" def setDisplayMode(self,mode): '''Map the display mode defined in attach with those defined in getDisplayModes.\ Since they have the same names nothing needs to be done. This method is optional''' return mode def onChanged(self, vp, prop): pass def __getstate__(self): return None def __setstate__(self,state): return None def getIcon(self): import Draft_rc return ":/icons/Draft_Draft.svg" def makeCAD2D(name='CAD2D_COIN'): a=FreeCAD.ActiveDocument.addObject("App::FeaturePython",name) CAD2D_COIN(a) ViewProviderCAD2D_COIN(a.ViewObject) return a if __name__=='__main__': makeCAD2D() FreeCAD.ActiveDocument.recompute()