def setDisplayMode(obj,mode): GDMLShared.trace("setDisplayMode : "+str(mode)) if mode == 2 : obj.ViewObject.DisplayMode = 'Hide' if mode == 3 : obj.ViewObject.DisplayMode = 'Wireframe'
def expandVolume(parent, name, px, py, pz, rot, phylvl, displayMode): import FreeCAD as App # also used in ScanCommand 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) #print('solid : '+solid.tag) #print('material :'+material) 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"): # Need to clean up use of phylvl flag # create solids at pos & rot in physvols #if phylvl < 1 : if phylvl < 0: if phylvl >= 0: phylvl += 1 # If negative always parse otherwise increase level parsePhysVol(parent, pv, phylvl, displayMode) else: # Just Add to structure from PySide import QtGui, QtCore volref = GDMLShared.getRef(pv, "volumeref") GDMLShared.trace("Volume ref : " + volref) #part = parent.newObject("App::Part","\033[1;40;31m"+volref) part = parent.newObject("App::Part", "NOT-Expanded_" + volref) #obj = part.newObject("App::Annotation","Not Expanded") #obj.LabelText="Annotation" #view = obj.ViewObject #print(dir(view)) #part = parent.newObject("App::DocumentObjectGroup",volref) #vpart2 = part2.ViewObject #print(dir(vpart2)) # 100% red, 0% Green, 0% Blue #vpart.TextColor = (100., 0., 0., 0.) # Add parsed Volume to dict volDict[name] = obj App.ActiveDocument.recompute() 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, phylvl, displayMode) else: print("Not Volume or Assembly")
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 = part.newObject(objType, solid.tag + ':' + getName(solid)) mybool.Base = createSolid(part, base, material, 0, 0, 0, None, displayMode) # 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) mybool.Placement = GDMLShared.getPlacementFromRefs(solid) #ViewProvider(mybool.ViewObject) return mybool
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=volObj.newObject("Part::FeaturePython","GDMLCone:"+getName(solid)) 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(0,0,0) mycone.Placement = GDMLShared.processPlacement(base,rot) GDMLShared.trace(mycone.Placement.Rotation) # set ViewProvider before setDisplay ViewProvider(mycone.ViewObject) setDisplayMode(mycone,displayMode) return(mycone)
def getVolSolid(name): GDMLShared.trace("Get Volume Solid") vol = structure.find("/volume[@name='%s']" % name ) sr = vol.find("solidref") GDMLShared.trace(sr.attrib) name = GDMLShared.getRef(sr) solid = solids.find("*[@name='%s']" % name ) return solid
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 processGDML(doc,filename): import GDMLShared import GDMLObjects params = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/GDML") GDMLShared.printverbose = params.GetBool('printVerbose',False) print("Print Verbose : "+ str(GDMLShared.printverbose)) FreeCAD.Console.PrintMessage('Import GDML file : '+filename+'\n') FreeCAD.Console.PrintMessage('ImportGDML Version 0.2\n') global pathName pathName = os.path.dirname(os.path.normpath(filename)) FilesEntity = False global setup, materials, solids, structure, volDict # Add files object so user can change to organise files # from GDMLObjects import GDMLFiles, ViewProvider # myfiles = doc.addObject("App::FeaturePython","Export_Files") #myfiles = doc.addObject("App::DocumentObjectGroupPython","Export_Files") #GDMLFiles(myfiles,FilesEntity,sectionDict) from lxml import etree #root = etree.fromstring(currentString) parser = etree.XMLParser(resolve_entities=True) root = etree.parse(filename, parser=parser) setup = root.find('setup') print("Call set Define") GDMLShared.setDefine(root.find('define')) materials = root.find('materials') solids = root.find('solids') structure = root.find('structure') # volDict dictionary of volume names and associated FreeCAD part volDict = {} GDMLShared.processConstants(doc) GDMLShared.trace(setup.attrib) processIsotopes(doc) processElements(doc) processMaterials(doc) world = GDMLShared.getRef(setup,"world") #print(world) part =doc.addObject("App::Part",world) parseVolume(part,world,0,0,0,None,3) doc.recompute() FreeCADGui.SendMsgToActiveView("ViewFit") FreeCAD.Console.PrintMessage('End processing GDML file\n')
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 parsePhysVol(parent,physVol,displayMode): GDMLShared.trace("ParsePhyVol") posref = GDMLShared.getRef(physVol,"positionref") if posref is not None : GDMLShared.trace("positionref : "+posref) pos = GDMLShared.define.find("position[@name='%s']" % posref ) if pos is not None : GDMLShared.trace(pos.attrib) else : pos = physVol.find("position") if pos is not None : px = GDMLShared.getVal(pos,'x') py = GDMLShared.getVal(pos,'y') pz = GDMLShared.getVal(pos,'z') else : px = py = pz = 0 rotref = GDMLShared.getRef(physVol,"rotationref") if rotref is not None : rot = GDMLShared.define.find("rotation[@name='%s']" % rotref ) else : rot = physVol.find("rotation") volref = GDMLShared.getRef(physVol,"volumeref") GDMLShared.trace("Volume ref : "+volref) part = parent.newObject("App::Part",volref) parseVolume(part,volref,px,py,pz,rot,displayMode)
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 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 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
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 createSphere(part,solid,material,px,py,pz,rot,displayMode) : from GDMLObjects import GDMLSphere, ViewProvider GDMLShared.trace("CreateSphere : ") GDMLShared.trace(solid.attrib) rmin = GDMLShared.getVal(solid,'rmin') rmax = GDMLShared.getVal(solid,'rmax') startphi = GDMLShared.getVal(solid,'startphi') deltaphi = GDMLShared.getVal(solid,'deltaphi') aunit = getText(solid,'aunit','rad') lunit = getText(solid,'lunit',"mm") #mysphere=volObj.newObject("Part::FeaturePython","GDMLSphere:"+getName(solid)) mysphere=part.newObject("Part::FeaturePython","GDMLSphere:"+getName(solid)) GDMLSphere(mysphere,rmin,rmax,startphi,deltaphi,0,3.00,aunit, \ lunit,material) GDMLShared.trace("Position : "+str(px)+','+str(py)+','+str(pz)) base = FreeCAD.Vector(0,0,0) mysphere.Placement = GDMLShared.processPlacement(base,rot) GDMLShared.trace(mysphere.Placement.Rotation) # set ViewProvider before setDisplay setDisplayMode(mysphere,displayMode) ViewProvider(mysphere.ViewObject) return mysphere
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 createSolid(part,solid,material,px,py,pz,rot,displayMode) : GDMLShared.trace(solid.tag) while switch(solid.tag) : if case('box'): return(createBox(part,solid,material,px,py,pz,rot,displayMode)) break if case('cone'): return(createCone(part,solid,material,px,py,pz,rot,displayMode)) break if case('elcone'): return(createElcone(part,solid,material,px,py,pz,rot,displayMode)) break if case('ellipsoid'): return(createEllipsoid(part,solid,material,px,py,pz,rot,displayMode)) break if case('eltube'): return(createEltube(part,solid,material,px,py,pz,rot,displayMode)) break if case('polycone'): return(createPolycone(part,solid,material,px,py,pz,rot,displayMode)) break if case('polyhedra'): return(createPolyhedra(part,solid,material,px,py,pz,rot,displayMode)) break if case('sphere'): return(createSphere(part,solid,material,px,py,pz,rot,displayMode)) break if case('trap'): return(createTrap(part,solid,material,px,py,pz,rot,displayMode)) break if case('trap_dimensions'): return(createTrap(part,solid,material,px,py,pz,rot,displayMode)) break if case('trd'): return(createTrd(part,solid,material,px,py,pz,rot,displayMode)) break if case('tube'): return(createTube(part,solid,material,px,py,pz,rot,displayMode)) break if case('tessellated'): return(createTessellated(part,solid,material,px,py,pz,rot,displayMode)) break if case('xtru'): return(createXtru(part,solid,material,px,py,pz,rot,displayMode)) break if case('intersection'): return(parseBoolean(part,solid,'Part::Common', \ material,px,py,pz,rot,displayMode)) break if case('union'): return(parseBoolean(part,solid,'Part::Fuse', \ material,px,py,pz,rot,displayMode)) break if case('subtraction'): return(parseBoolean(part,solid,'Part::Cut', \ material,px,py,pz,rot,displayMode)) break GDMLShared.trace("Solid : "+solid.tag+" Not yet supported") break
def createPolyhedra(part,solid,material,px,py,pz,rot,displayMode) : from GDMLObjects import GDMLPolyhedra, GDMLzplane, \ ViewProvider, ViewProviderExtension GDMLShared.trace("Create Polyhedra : ") GDMLShared.trace(solid.attrib) startphi = GDMLShared.getVal(solid,'startphi') deltaphi = GDMLShared.getVal(solid,'deltaphi') numsides = GDMLShared.getVal(solid,'numsides',2) aunit = getText(solid,'aunit','rad') lunit = getText(solid,'lunit',"mm") #mypolyhedra=volObj.newObject("Part::FeaturePython","GDMLPolyhedra:"+ \ mypolyhedra=part.newObject("Part::FeaturePython","GDMLPolyhedra:"+ \ getName(solid)) mypolyhedra.addExtension("App::OriginGroupExtensionPython", None) GDMLPolyhedra(mypolyhedra,startphi,deltaphi,numsides,aunit,lunit,material) ViewProviderExtension(mypolyhedra.ViewObject) #mypolyhedra.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') mypolyhedra.addObject(myzplane) #myzplane=mypolyhedra.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) mypolyhedra.Placement = GDMLShared.processPlacement(base,rot) GDMLShared.trace(mypolyhedra.Placement.Rotation) # set ViewProvider before setDisplay setDisplayMode(mypolyhedra,displayMode) return mypolyhedra
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(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