def createTube(part,solid,material,px,py,pz,rot,displayMode) : from GDMLObjects import GDMLTube, ViewProvider GDMLShared.trace("CreateTube : ") GDMLShared.trace(solid.attrib) rmin = GDMLShared.getVal(solid,'rmin') rmax = GDMLShared.getVal(solid,'rmax') z = GDMLShared.getVal(solid,'z') startphi = GDMLShared.getVal(solid,'startphi') deltaphi = GDMLShared.getVal(solid,'deltaphi') aunit = getText(solid,'aunit','rad') lunit = getText(solid,'lunit',"mm") GDMLShared.trace(rmin) GDMLShared.trace(rmax) GDMLShared.trace(z) #mytube=volObj.newObject("Part::FeaturePython","GDMLTube:"+getName(solid)) mytube=part.newObject("Part::FeaturePython","GDMLTube:"+getName(solid)) GDMLTube(mytube,rmin,rmax,z,startphi,deltaphi,aunit,lunit,material) GDMLShared.trace("Position : "+str(px)+','+str(py)+','+str(pz)) base = FreeCAD.Vector(0,0,0) #base = FreeCAD.Vector(px,py,pz) mytube.Placement = GDMLShared.processPlacement(base,rot) GDMLShared.trace(mytube.Placement.Rotation) # set ViewProvider before setDisplay ViewProvider(mytube.ViewObject) setDisplayMode(mytube,displayMode) return mytube
def parseBoolean(part,solid,objType,material,px,py,pz,rot,displayMode) : from GDMLObjects import ViewProvider GDMLShared.trace(solid.tag) GDMLShared.trace(solid.attrib) if solid.tag in ["subtraction","union","intersection"] : GDMLShared.trace("Boolean : "+solid.tag) name1st = GDMLShared.getRef(solid,'first') base = solids.find("*[@name='%s']" % name1st ) GDMLShared.trace("first : "+name1st) #parseObject(root,base) name2nd = GDMLShared.getRef(solid,'second') tool = solids.find("*[@name='%s']" % name2nd ) GDMLShared.trace("second : "+name2nd) #parseObject(root,tool) #mybool = volObj.newObject(objType,solid.tag+':'+getName(solid)) mybool = part.newObject(objType,solid.tag+':'+getName(solid)) #mybool.Base = createSolid(volObj,base,material,0,0,0,None,displayMode) mybool.Base = createSolid(part,base,material,0,0,0,None,displayMode) #mybool.Base = createSolid(base,px,py,pz,rot) # second solid is placed at position and rotation relative to first mybool.Tool = createSolid(part,tool,material,0,0,0,None,displayMode) mybool.Tool.Placement= GDMLShared.getPlacementFromRefs(solid) # Okay deal with position of boolean GDMLShared.trace("Position : "+str(px)+','+str(py)+','+str(pz)) base = FreeCAD.Vector(0,0,0) #base = FreeCAD.Vector(px,py,pz) mybool.Placement = GDMLShared.processPlacement(base,rot) #ViewProvider(mybool.ViewObject) #print("Bool Shape : "+str(mybool.Shape.isValid())) #print("Bool Base : "+str(mybool.Base.Shape.isValid())) #print("Bool Tool : "+str(mybool.Tool.Shape.isValid())) print(dir(mybool.Shape)) return mybool
def createPolycone(part,solid,material,px,py,pz,rot,displayMode) : from GDMLObjects import GDMLPolycone, GDMLzplane, \ ViewProvider, ViewProviderExtension GDMLShared.trace("Create Polycone : ") GDMLShared.trace(solid.attrib) startphi = GDMLShared.getVal(solid,'startphi') deltaphi = GDMLShared.getVal(solid,'deltaphi') aunit = getText(solid,'aunit','rad') lunit = getText(solid,'lunit',"mm") #mypolycone=volObj.newObject("Part::FeaturePython","GDMLPolycone:"+getName(solid)) mypolycone=part.newObject("Part::FeaturePython","GDMLPolycone:"+getName(solid)) mypolycone.addExtension("App::OriginGroupExtensionPython", None) GDMLPolycone(mypolycone,startphi,deltaphi,aunit,lunit,material) ViewProviderExtension(mypolycone.ViewObject) #mypolycone.ViewObject.DisplayMode = "Shaded" GDMLShared.trace(solid.findall('zplane')) for zplane in solid.findall('zplane') : GDMLShared.trace(zplane) rmin = GDMLShared.getVal(zplane,'rmin') rmax = GDMLShared.getVal(zplane,'rmax') z = GDMLShared.getVal(zplane,'z') myzplane=FreeCAD.ActiveDocument.addObject('App::FeaturePython','zplane') mypolycone.addObject(myzplane) #myzplane=mypolycone.newObject('App::FeaturePython','zplane') GDMLzplane(myzplane,rmin,rmax,z) ViewProvider(myzplane) GDMLShared.trace("Position : "+str(px)+','+str(py)+','+str(pz)) base = FreeCAD.Vector(0,0,0) mypolycone.Placement = GDMLShared.processPlacement(base,rot) GDMLShared.trace(mypolycone.Placement.Rotation) # set ViewProvider before setDisplay setDisplayMode(mypolycone,displayMode) return mypolycone
def createTrap(part,solid,material,px,py,pz,rot,displayMode) : from GDMLObjects import GDMLTrap, ViewProvider GDMLShared.trace("CreateTrap : ") GDMLShared.trace(solid.attrib) z = GDMLShared.getVal(solid,'z') x1 = GDMLShared.getVal(solid,'x1') x2 = GDMLShared.getVal(solid,'x2') x3 = GDMLShared.getVal(solid,'x3') x4 = GDMLShared.getVal(solid,'x4') y1 = GDMLShared.getVal(solid,'y1') y2 = GDMLShared.getVal(solid,'y2') theta = GDMLShared.getVal(solid,'theta') phi = GDMLShared.getVal(solid,'phi') alpha = GDMLShared.getVal(solid,'alpah1') aunit = getText(solid,'aunit','rad') lunit = getText(solid,'lunit',"mm") #print z #mytrap=volObj.newObject("Part::FeaturePython","GDMLTrap:"+getName(solid)) mytrap=part.newObject("Part::FeaturePython","GDMLTrap:"+getName(solid)) GDMLTrap(mytrap,z,theta,phi,x1,x2,x3,x4,y1,y2,alpha,aunit,lunit,material) GDMLShared.trace("Position : "+str(px)+','+str(py)+','+str(pz)) base = FreeCAD.Vector(0,0,0) mytrap.Placement = GDMLShared.processPlacement(base,rot) GDMLShared.trace(mytrap.Placement.Rotation) # set ViewProvider before setDisplay ViewProvider(mytrap.ViewObject) setDisplayMode(mytrap,displayMode) return mytrap
def createCone(part, solid, material, px, py, pz, rot, displayMode): from GDMLObjects import GDMLCone, ViewProvider GDMLShared.trace("CreateCone : ") GDMLShared.trace(solid.attrib) rmin1 = GDMLShared.getVal(solid, 'rmin1') rmax1 = GDMLShared.getVal(solid, 'rmax1') rmin2 = GDMLShared.getVal(solid, 'rmin2') rmax2 = GDMLShared.getVal(solid, 'rmax2') z = GDMLShared.getVal(solid, 'z') startphi = GDMLShared.getVal(solid, 'startphi') deltaphi = GDMLShared.getVal(solid, 'deltaphi') aunit = getText(solid, 'aunit', 'rad') lunit = getText(solid, 'lunit', "mm") mycone = part.newObject("Part::FeaturePython", "GDMLCone:" + getName(solid)) GDMLCone(mycone,rmin1,rmax1,rmin2,rmax2,z, \ startphi,deltaphi,aunit,lunit,material) GDMLShared.trace("CreateCone : ") GDMLShared.trace("Position : " + str(px) + ',' + str(py) + ',' + str(pz)) base = FreeCAD.Vector(px, py, pz) mycone.Placement = GDMLShared.processPlacement(base, rot) GDMLShared.trace(mycone.Placement.Rotation) # set ViewProvider before setDisplay ViewProvider(mycone.ViewObject) setDisplayMode(mycone, displayMode) return (mycone)
def parseVolume(parent, name, px, py, pz, rot, displayMode): global volDict # Has the volume already been parsed i.e in Assembly etc obj = volDict.get(name) if obj != None: newobj = Draft.clone(obj) #print(dir(newobj)) #print(newobj.TypeId) #print(newobj.Name) #print(newobj.Label) parent.addObject(newobj) base = FreeCAD.Vector(px, py, pz) newobj.Placement = GDMLShared.processPlacement(base, rot) return else: GDMLShared.trace("ParseVolume : " + name) #part = parent.newObject("App::Part",name) vol = structure.find("volume[@name='%s']" % name) if vol != None: # If not volume test for assembly solidref = GDMLShared.getRef(vol, "solidref") if solidref != None: solid = solids.find("*[@name='%s']" % solidref) GDMLShared.trace(solid.tag) # Material is the materialref value # need to add default #material = GDMLShared.getRef(vol,"materialref") material = GDMLShared.getRef(vol, "materialref") #createSolid(part,solid,material,px,py,pz,rot,displayMode) obj = createSolid(parent, solid, material, px, py, pz, rot, displayMode) # Volume may or maynot contain physvol's displayMode = 1 for pv in vol.findall("physvol"): # create solids at pos & rot in physvols #parsePhysVol(part,pv,displayMode) #obj = parent.newObject("App::Part",name) parsePhysVol(parent, pv, displayMode) # Add parsed Volume to dict volDict[name] = obj return obj else: asm = structure.find("assembly[@name='%s']" % name) print("Assembly : " + name) if asm != None: for pv in asm.findall("physvol"): # create solids at pos & rot in physvols #parsePhysVol(part,pv,displayMode) #obj = parent.newObject("App::Part",name) parsePhysVol(parent, pv, displayMode) else: print("Not Volume or Assembly")
def createXtru(part, solid, material, px, py, pz, rot, displayMode): from GDMLObjects import GDMLXtru, GDML2dVertex, GDMLSection, \ ViewProvider, ViewProviderExtension GDMLShared.trace("CreateXtru : ") #print(solid) #print(getName(solid)) myXtru = part.newObject("Part::FeaturePython", "GDMLXtru-" + getName(solid)) #myXtru.addExtension("App::OriginGroupExtensionPython", None) lunit = getText(solid, 'lunit', "mm") GDMLXtru(myXtru, lunit, material) ViewProviderExtension(myXtru.ViewObject) for vert2d in solid.findall('twoDimVertex'): x = GDMLShared.getVal(vert2d, 'x') y = GDMLShared.getVal(vert2d, 'y') my2dVert = FreeCAD.ActiveDocument.addObject('App::FeaturePython', 'GDML2DVertex') #myzplane=mypolycone.newObject('App::FeaturePython','zplane') GDML2dVertex(my2dVert, x, y) myXtru.addObject(my2dVert) ViewProvider(my2dVert) for section in solid.findall('section'): zOrder = GDMLShared.getVal(section, 'zOrder', 2) # Get Int zPosition = GDMLShared.getVal(section, 'zPosition', 2) # Get Int xOffset = GDMLShared.getVal(section, 'xOffset') yOffset = GDMLShared.getVal(section, 'yOffset') scalingFactor = GDMLShared.getVal(section, 'scalingFactor') mysection = FreeCAD.ActiveDocument.addObject('App::FeaturePython', 'GDMLSection') GDMLSection(mysection, zOrder, zPosition, xOffset, yOffset, scalingFactor) myXtru.addObject(mysection) ViewProvider(mysection) GDMLShared.trace("Position : " + str(px) + ',' + str(py) + ',' + str(pz)) base = FreeCAD.Vector(0, 0, 0) #base = FreeCAD.Vector(px,py,pz) myXtru.Placement = GDMLShared.processPlacement(base, rot) GDMLShared.trace(myXtru.Placement.Rotation) # Shape is still Null at this point #print("Xtru Shape : ") #print("Is Null : "+str(myXtru.Shape.isNull())) return (myXtru)
def createEltube(part,solid,material,px,py,pz,rot,displayMode) : from GDMLObjects import GDMLElTube, ViewProvider GDMLShared.trace("CreateElTube : ") GDMLShared.trace(solid.attrib) dx = GDMLShared.getVal(solid,'dx') dy = GDMLShared.getVal(solid,'dy') dz = GDMLShared.getVal(solid,'dz') lunit = getText(solid,'lunit',"mm") #myeltube=volObj.newObject("Part::FeaturePython","GDMLElTube:"+getName(solid)) myeltube=part.newObject("Part::FeaturePython","GDMLElTube:"+getName(solid)) GDMLElTube(myeltube,dx, dy, dz,lunit,material) GDMLShared.trace("CreateElTube : ") GDMLShared.trace("Position : "+str(px)+','+str(py)+','+str(pz)) base = FreeCAD.Vector(0,0,0) myeltube.Placement = GDMLShared.processPlacement(base,rot) GDMLShared.trace(myeltube.Placement.Rotation) # set ViewProvider before setDisplay ViewProvider(myeltube.ViewObject) setDisplayMode(myeltube,displayMode) return myeltube
def parseVolume(parent, name, px, py, pz, rot, phylvl, displayMode): global volDict # Has the volume already been parsed i.e in Assembly etc obj = volDict.get(name) if obj != None: newobj = Draft.clone(obj) #print(dir(newobj)) #print(newobj.TypeId) #print(newobj.Name) #print(newobj.Label) parent.addObject(newobj) base = FreeCAD.Vector(px, py, pz) newobj.Placement = GDMLShared.processPlacement(base, rot) return else: GDMLShared.trace("ParseVolume : " + name) part = parent.newObject("App::Part", name) expandVolume(part, name, px, py, pz, rot, phylvl, displayMode)
def createElcone(part, solid, material, px, py, pz, rot, displayMode): from GDMLObjects import GDMLElCone, ViewProvider GDMLShared.trace("CreateElCone : ") dx = GDMLShared.getVal(solid, 'dx') dy = GDMLShared.getVal(solid, 'dy') zmax = GDMLShared.getVal(solid, 'zmax') zcut = GDMLShared.getVal(solid, 'zcut') lunit = getText(solid, 'lunit', "mm") myelcone = part.newObject("Part::FeaturePython", "GDMLElCone:" + getName(solid)) GDMLElCone(myelcone, dx, dy, zmax, zcut, lunit, material) GDMLShared.trace("CreateElCone : ") GDMLShared.trace("Position : " + str(px) + ',' + str(py) + ',' + str(pz)) base = FreeCAD.Vector(px, py, pz - zmax / 2) myelcone.Placement = GDMLShared.processPlacement(base, rot) GDMLShared.trace(myelcone.Placement.Rotation) # set ViewProvider before setDisplay ViewProvider(myelcone.ViewObject) setDisplayMode(myelcone, displayMode) return (myelcone)
def createBox(part, solid, material, px, py, pz, rot, displayMode): from GDMLObjects import GDMLBox, ViewProvider GDMLShared.trace("CreateBox : ") GDMLShared.trace(solid.attrib) mycube = part.newObject("Part::FeaturePython", "GDMLBox:" + getName(solid)) x = GDMLShared.getVal(solid, 'x') y = GDMLShared.getVal(solid, 'y') z = GDMLShared.getVal(solid, 'z') lunit = getText(solid, 'lunit', "mm") GDMLBox(mycube, x, y, z, lunit, material) GDMLShared.trace("Logical Position : " + str(px) + ',' + str(py) + ',' + str(pz)) base = FreeCAD.Vector(0, 0, 0) mycube.Placement = GDMLShared.processPlacement(base, rot) GDMLShared.trace(mycube.Placement.Rotation) # set ViewProvider before setDisplay ViewProvider(mycube.ViewObject) setDisplayMode(mycube, displayMode) #myCube.Shape = translate(mycube.Shape,base) return mycube
def createTessellated(part, solid, material, px, py, pz, rot, displayMode): from GDMLObjects import GDMLTessellated, GDMLTriangular, \ GDMLQuadrangular, ViewProvider, ViewProviderExtension GDMLShared.trace("CreateTessellated : ") GDMLShared.trace(solid.attrib) myTess = part.newObject("Part::FeaturePython", "GDMLTessellated:" + getName(solid)) #myTess.addExtension("App::OriginGroupExtensionPython", None) GDMLTessellated(myTess, material) ViewProviderExtension(myTess.ViewObject) ViewProvider(myTess.ViewObject) for elem in solid.getchildren(): print(elem) v1 = elem.attrib['vertex1'] v2 = elem.attrib['vertex2'] v3 = elem.attrib['vertex3'] vType = elem.attrib['type'] if elem.tag == 'triangular': myTri = FreeCAD.ActiveDocument.addObject('App::FeaturePython', 'GDMLTriangle') GDMLTriangular(myTri, v1, v2, v3, vType) myTess.addObject(myTri) ViewProvider(myTri) if elem.tag == 'quadrangular': v4 = elem.attrib['vertex4'] myQuad = FreeCAD.ActiveDocument.addObject('App::FeaturePython', 'GDMLQuadrangular') GDMLQuadrangular(myQuad, v1, v2, v3, v4, vType) myTess.addObject(myQuad) ViewProvider(myQuad) GDMLShared.trace("Position : " + str(px) + ',' + str(py) + ',' + str(pz)) #base = FreeCAD.Vector(px,py,pz) base = FreeCAD.Vector(0, 0, 0) myTess.Placement = GDMLShared.processPlacement(base, rot) GDMLShared.trace(myTess.Placement.Rotation) # set ViewProvider before setDisplay ViewProvider(myTess.ViewObject) setDisplayMode(myTess, displayMode) return myTess
def createTrd(part, solid, material, px, py, pz, rot, displayMode): from GDMLObjects import GDMLTrd, ViewProvider GDMLShared.trace("CreateTrd : ") GDMLShared.trace(solid.attrib) z = GDMLShared.getVal(solid, 'z') x1 = GDMLShared.getVal(solid, 'x1') x2 = GDMLShared.getVal(solid, 'x2') y1 = GDMLShared.getVal(solid, 'y1') y2 = GDMLShared.getVal(solid, 'y2') lunit = getText(solid, 'lunit', "mm") #print z mytrd = part.newObject("Part::FeaturePython", "GDMLTrd:" + getName(solid)) GDMLTrd(mytrd, z, x1, x2, y1, y2, lunit, material) GDMLShared.trace("Position : " + str(px) + ',' + str(py) + ',' + str(pz)) base = FreeCAD.Vector(px, py, pz) mytrd.Placement = GDMLShared.processPlacement(base, rot) GDMLShared.trace(mytrd.Placement.Rotation) # set ViewProvider before setDisplay ViewProvider(mytrd.ViewObject) setDisplayMode(mytrd, displayMode) return mytrd
def createCutTube(part, solid, material, px, py, pz, rot, displayMode): from GDMLObjects import GDMLcutTube, ViewProvider GDMLShared.trace("CreateCutTube : ") GDMLShared.trace(solid.attrib) rmin = GDMLShared.getVal(solid, 'rmin') rmax = GDMLShared.getVal(solid, 'rmax') z = GDMLShared.getVal(solid, 'z') startphi = GDMLShared.getVal(solid, 'startphi') deltaphi = GDMLShared.getVal(solid, 'deltaphi') aunit = getText(solid, 'aunit', 'rad') print("aunit : " + aunit) lowX = GDMLShared.getVal(solid, 'lowX') lowY = GDMLShared.getVal(solid, 'lowY') lowZ = GDMLShared.getVal(solid, 'lowZ') highX = GDMLShared.getVal(solid, 'highX') highY = GDMLShared.getVal(solid, 'highY') highZ = GDMLShared.getVal(solid, 'highZ') lunit = getText(solid, 'lunit', "mm") GDMLShared.trace(rmin) GDMLShared.trace(rmax) GDMLShared.trace(z) GDMLShared.trace(lowX) GDMLShared.trace(lowY) GDMLShared.trace(lowZ) GDMLShared.trace(highX) GDMLShared.trace(highY) GDMLShared.trace(highZ) mycuttube = part.newObject("Part::FeaturePython", "GDMLcutTube:" + getName(solid)) GDMLcutTube(mycuttube,rmin,rmax,z,startphi,deltaphi,aunit, \ lowX, lowY, lowZ, highX, highY, highZ, lunit, material) GDMLShared.trace("Position : " + str(px) + ',' + str(py) + ',' + str(pz)) #base = FreeCAD.Vector(0,0,0) base = FreeCAD.Vector(px, py, pz) mycuttube.Placement = GDMLShared.processPlacement(base, rot) GDMLShared.trace(mycuttube.Placement.Rotation) # set ViewProvider before setDisplay ViewProvider(mycuttube.ViewObject) setDisplayMode(mycuttube, displayMode) return mycuttube
def createEllipsoid(part,solid,material,px,py,pz,rot,displayMode) : from GDMLObjects import GDMLEllipsoid, ViewProvider GDMLShared.trace("CreateElTube : ") GDMLShared.trace(solid.attrib) ax = GDMLShared.getVal(solid,'ax') by = GDMLShared.getVal(solid,'by') cz = GDMLShared.getVal(solid,'cz') zcut1 = GDMLShared.getVal(solid,'zcut1') zcut2 = GDMLShared.getVal(solid,'zcut2') lunit = getText(solid,'lunit',"mm") #myelli=volObj.newObject("Part::FeaturePython","GDMLEllipsoid:"+getName(solid)) myelli=part.newObject("Part::FeaturePython","GDMLEllipsoid:"+getName(solid)) # cuts 0 for now GDMLEllipsoid(myelli,ax, by, cz,zcut1,zcut2,lunit,material) GDMLShared.trace("CreateEllipsoid : ") GDMLShared.trace("Position : "+str(px)+','+str(py)+','+str(pz)) base = FreeCAD.Vector(px,py,pz) myelli.Placement = GDMLShared.processPlacement(base,rot) GDMLShared.trace(myelli.Placement.Rotation) # set ViewProvider before setDisplay ViewProvider(myelli.ViewObject) setDisplayMode(myelli,displayMode) return myelli