コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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
コード例 #4
0
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
コード例 #5
0
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)
コード例 #6
0
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")
コード例 #7
0
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)
コード例 #8
0
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
コード例 #9
0
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)
コード例 #10
0
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)
コード例 #11
0
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
コード例 #12
0
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
コード例 #13
0
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
コード例 #14
0
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
コード例 #15
0
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