Пример #1
0
 def Activated (self):
   import frameCmd, pipeCmd
   if len(frameCmd.beams())>1:
     p1,p2=frameCmd.beams()[:2]
     try:
       P=frameCmd.intersectionCLines(p1,p2)
       com1=p1.Shape.Solids[0].CenterOfMass
       com2=p2.Shape.Solids[0].CenterOfMass
       v1=P-com1
       v2=com2-P
       curves=[e for e in FreeCADGui.Selection.getSelection() if hasattr(e,'PType') and hasattr(e,'BendAngle')]
       if curves:
         FreeCAD.ActiveDocument.openTransaction('Place one curve')
         pipeCmd.placeoTherElbow(curves[0],v1,v2,P)
         FreeCAD.ActiveDocument.recompute() # recompute for the elbow
         port1,port2=pipeCmd.portsPos(curves[0])
         if (com1-port1).Length<(com1-port2).Length:
           frameCmd.extendTheBeam(p1,port1)
           frameCmd.extendTheBeam(p2,port2)
         else:
           frameCmd.extendTheBeam(p1,port2)
           frameCmd.extendTheBeam(p2,port1)
         FreeCAD.ActiveDocument.recompute() # recompute for the pipes
         FreeCAD.ActiveDocument.commitTransaction()
       else:
         FreeCAD.Console.PrintError('Select at least one elbow')
     except:
       FreeCAD.Console.PrintError('Intersection point not found\n')
   else:
     FreeCAD.Console.PrintError('Select two intersecting pipes\n')
Пример #2
0
 def Activated(self):
     import frameCmd, pipeCmd
     if len(frameCmd.beams()) > 1:
         p1, p2 = frameCmd.beams()[:2]
         try:
             P = frameCmd.intersectionCLines(p1, p2)
             com1 = p1.Shape.Solids[0].CenterOfMass
             com2 = p2.Shape.Solids[0].CenterOfMass
             v1 = P - com1
             v2 = com2 - P
             curves = [
                 e for e in FreeCADGui.Selection.getSelection()
                 if hasattr(e, 'PType') and hasattr(e, 'BendAngle')
             ]
             if curves:
                 FreeCAD.ActiveDocument.openTransaction('Place one curve')
                 pipeCmd.placeoTherElbow(curves[0], v1, v2, P)
                 FreeCAD.ActiveDocument.recompute(
                 )  # recompute for the elbow
                 port1, port2 = pipeCmd.portsPos(curves[0])
                 if (com1 - port1).Length < (com1 - port2).Length:
                     frameCmd.extendTheBeam(p1, port1)
                     frameCmd.extendTheBeam(p2, port2)
                 else:
                     frameCmd.extendTheBeam(p1, port2)
                     frameCmd.extendTheBeam(p2, port1)
                 FreeCAD.ActiveDocument.recompute(
                 )  # recompute for the pipes
                 FreeCAD.ActiveDocument.commitTransaction()
             else:
                 FreeCAD.Console.PrintError('Select at least one elbow')
         except:
             FreeCAD.Console.PrintError('Intersection point not found\n')
     else:
         FreeCAD.Console.PrintError('Select two intersecting pipes\n')
Пример #3
0
 def accept(self):            # extend
   if self.target!=None and len(frameCmd.beams())>0:
     FreeCAD.activeDocument().openTransaction('Extend beam')
     for beam in frameCmd.beams():
       frameCmd.extendTheBeam(beam,self.target)
     FreeCAD.activeDocument().recompute()
     FreeCAD.activeDocument().commitTransaction()
Пример #4
0
 def accept(self):  # extend
     if self.target != None and len(frameCmd.beams()) > 0:
         FreeCAD.activeDocument().openTransaction('Extend beam')
         for beam in frameCmd.beams():
             frameCmd.extendTheBeam(beam, self.target)
         FreeCAD.activeDocument().recompute()
         FreeCAD.activeDocument().commitTransaction()
Пример #5
0
def makeElbowBetweenThings(thing1=None, thing2=None, propList=None):
    '''
  makeElbowBetweenThings(thing1, thing2, propList=None):
  Place one elbow at the intersection of thing1 and thing2.
  Things can be any combination of intersecting beams, pipes or edges.
  If nothing is passed as argument, the function attempts to take the
  first two edges selected in the view.
  propList is one optional list with 5 elements:
    DN (string): nominal diameter
    OD (float): outside diameter
    thk (float): shell thickness
    BA (float): bend angle - that will be recalculated! -
    BR (float): bend radius
  Default is "DN50 (SCH-STD)"
  Remember: property PRating must be defined afterwards
  '''
    if not (thing1 and thing2):
        thing1, thing2 = frameCmd.edges()[:2]
    P = frameCmd.intersectionCLines(thing1, thing2)
    directions = list()
    try:
        for thing in [thing1, thing2]:
            if frameCmd.beams([thing]):
                directions.append(
                    rounded(
                        (frameCmd.beamAx(thing).multiply(thing.Height / 2) +
                         thing.Placement.Base) - P))
            elif hasattr(thing, 'ShapeType') and thing.ShapeType == 'Edge':
                directions.append(rounded(thing.CenterOfMass - P))
    except:
        return None
    ang = 180 - degrees(directions[0].getAngle(directions[1]))
    if ang == 0 or ang == 180: return None
    if not propList:
        propList = ["DN50", 60.3, 3.91, ang, 45.24]
    else:
        propList[3] = ang
    elb = makeElbow(propList, P,
                    directions[0].negative().cross(directions[1].negative()))
    # mate the elbow ends with the pipes or edges
    b = frameCmd.bisect(directions[0], directions[1])
    elbBisect = rounded(frameCmd.beamAx(elb, FreeCAD.Vector(
        1, 1, 0)))  #if not rounded, fail in plane xz
    rot = FreeCAD.Rotation(elbBisect, b)
    elb.Placement.Rotation = rot.multiply(elb.Placement.Rotation)
    # trim the adjacent tubes
    #FreeCAD.activeDocument().recompute() # may delete this row?
    portA = elb.Placement.multVec(elb.Ports[0])
    portB = elb.Placement.multVec(elb.Ports[1])
    for tube in [t for t in [thing1, thing2] if frameCmd.beams([t])]:
        vectA = tube.Shape.Solids[0].CenterOfMass - portA
        vectB = tube.Shape.Solids[0].CenterOfMass - portB
        if frameCmd.isParallel(vectA, frameCmd.beamAx(tube)):
            frameCmd.extendTheBeam(tube, portA)
        else:
            frameCmd.extendTheBeam(tube, portB)
    return elb
Пример #6
0
 def getProfile(self):
   if self.current:
     if frameCmd.beams():
       self.current.Profile=frameCmd.beams()[0].Base
     elif self.sectList.selectedItems():
       prof= FreeCAD.ActiveDocument.getObjectsByLabel(self.sectList.selectedItems()[0].text())[0]
       if prof.Shape.ShapeType=='Wire' and self.cb2.isChecked():
         prof.Placement.move(FreeCAD.Vector(0,0,0)-prof.Shape.CenterOfMass)
       prof.Placement.Rotation=FreeCAD.Base.Rotation()
       self.current.Profile=prof
Пример #7
0
 def trim(self):
   if len(frameCmd.beams())==1:
     pipe=frameCmd.beams()[0]
     comPipeEdges=[e.CenterOfMass for e in pipe.Shape.Edges]
     eds=[e for e in frameCmd.edges() if not e.CenterOfMass in comPipeEdges]
     FreeCAD.activeDocument().openTransaction('Trim pipes')
     for edge in eds:
       frameCmd.extendTheBeam(frameCmd.beams()[0],edge)
     FreeCAD.activeDocument().commitTransaction()
     FreeCAD.activeDocument().recompute()
   else:
     FreeCAD.Console.PrintError("Wrong selection\n")
Пример #8
0
 def getProfile(self):
     if self.current:
         if frameCmd.beams():
             self.current.Profile = frameCmd.beams()[0].Base
         elif self.sectList.selectedItems():
             prof = FreeCAD.ActiveDocument.getObjectsByLabel(
                 self.sectList.selectedItems()[0].text())[0]
             if prof.Shape.ShapeType == 'Wire' and self.cb2.isChecked():
                 prof.Placement.move(
                     FreeCAD.Vector(0, 0, 0) - prof.Shape.CenterOfMass)
             prof.Placement.Rotation = FreeCAD.Base.Rotation()
             self.current.Profile = prof
Пример #9
0
 def selectAction(self):
   if self.labTail:
     self.labTail.removeLabel()
     self.labTail=None
   self.L=frameCmd.getDistance()
   if self.L:
     self.form.edit1.setText("%.3f"%self.L)
   elif frameCmd.beams():
     beam=frameCmd.beams()[0]
     self.L=float(beam.Height)
     self.form.edit1.setText("%.3f"%self.L)
   else:
     self.form.edit1.setText('') 
   self.form.slider.setValue(0)
   self.writeTail()
Пример #10
0
 def selectAction(self):
     if self.labTail:
         self.labTail.removeLabel()
         self.labTail = None
     self.L = frameCmd.getDistance()
     if self.L:
         self.form.edit1.setText("%.3f" % self.L)
     elif frameCmd.beams():
         beam = frameCmd.beams()[0]
         self.L = float(beam.Height)
         self.form.edit1.setText("%.3f" % self.L)
     else:
         self.form.edit1.setText('')
     self.form.slider.setValue(0)
     self.writeTail()
Пример #11
0
def laydownTheTube(pipe=None, refFace=None, support=None):
    '''
  laydownTheTube(pipe=None, refFace=None, support=None)
  Makes one pipe touch one face if the center-line is parallel to it.
  If support is not None, support is moved towards pipe.
  '''
    if not (pipe and refFace):  # without argument take from selection set
        refFace = [
            f for f in frameCmd.faces() if type(f.Surface) == Part.Plane
        ][0]
        pipe = [p for p in frameCmd.beams() if hasattr(p, 'OD')][0]
    try:
        if type(refFace.Surface) == Part.Plane and frameCmd.isOrtho(
                refFace, frameCmd.beamAx(pipe)) and hasattr(pipe, 'OD'):
            dist = rounded(
                refFace.normalAt(0, 0).multiply(
                    refFace.normalAt(0, 0).dot(pipe.Placement.Base -
                                               refFace.CenterOfMass) -
                    float(pipe.OD) / 2))
            if support:
                support.Placement.move(dist)
            else:
                pipe.Placement.move(dist.multiply(-1))
        else:
            FreeCAD.Console.PrintError(
                'Face is not flat or not parallel to axis of pipe\n')
    except:
        FreeCAD.Console.PrintError('Wrong selection\n')
Пример #12
0
def breakTheTubes(point, pipes=[], gap=0):
    '''
  breakTheTube(point,pipes=[],gap=0)
  Breaks the "pipes" at "point" leaving a "gap".
  '''
    pipes2nd = list()
    if not pipes:
        pipes = [p for p in frameCmd.beams() if isPipe(p)]
    if pipes:
        for pipe in pipes:
            if point < float(
                    pipe.Height) and gap < (float(pipe.Height) - point):
                propList = [
                    pipe.PSize,
                    float(pipe.OD),
                    float(pipe.thk),
                    float(pipe.Height) - point - gap
                ]
                pipe.Height = point
                Z = frameCmd.beamAx(pipe)
                pos = pipe.Placement.Base + Z * (float(pipe.Height) + gap)
                pipe2nd = makePipe(propList, pos, Z)
                pipes2nd.append(pipe2nd)
        #FreeCAD.activeDocument().recompute()
    return pipes2nd
Пример #13
0
 def trim(self):
     FreeCAD.ActiveDocument.openTransaction('Trim FB')
     for target in self.targets:
         for b in frameCmd.beams():
             if hasattr(b, 'tailOffset') and hasattr(b, 'headOffset'):
                 edge = b.Support[0][0].Shape.getElement(b.Support[0][1][0])
                 ax = edge.tangentAt(
                     0).normalize()  #frameCmd.beamAx(b).normalize()
                 tail = edge.valueAt(0)  #b.Placement.Base
                 head = edge.valueAt(
                     edge.LastParameter)  #tail+ax*float(b.Height)
                 if target.ShapeType == "Vertex":
                     P = target.Point
                 elif target.ShapeType == "Face" and not frameCmd.isOrtho(
                         target, ax):
                     P = frameCmd.intersectionPlane(tail, ax, target)
                 elif hasattr(target, "CenterOfMass"):
                     P = target.CenterOfMass
                 else:
                     P = None
                 if P:
                     #print P
                     #print ax.Length
                     deltaTail = (P - tail).dot(ax)
                     deltaHead = (P - head).dot(ax)
                     #print "D-tail = %.1f; D-head = %.1f" %(deltaTail,deltaHead)
                     if abs(deltaTail) < abs(deltaHead):
                         b.tailOffset = -deltaTail
                     else:
                         b.headOffset = deltaHead
     refresh()
     FreeCAD.ActiveDocument.commitTransaction()
Пример #14
0
 def stretchTail(self):
   beams=frameCmd.beams()
   if beams:
     L=float(beams[0].Height)/2
     ext=L*(self.form.sliTail.value()/100.0)
     self.form.editTail.setText("%.3f" %ext)
     self.changeTailOffset()
Пример #15
0
 def Activated(self):
     import pipeCmd, frameCmd
     FreeCAD.activeDocument().openTransaction('Flatten')
     if len(frameCmd.beams()) >= 2:
         pipeCmd.flattenTheTube()
     FreeCAD.activeDocument().recompute()
     FreeCAD.activeDocument().commitTransaction()
Пример #16
0
 def stretchHead(self):
   beams=frameCmd.beams()
   if beams:
     L=float(beams[0].Height)/2
     ext=L*(self.form.sliHead.value()/100.0)
     self.form.editHead.setText("%.3f" %ext)
     self.changeHeadOffset()
Пример #17
0
 def trim(self):
   FreeCAD.ActiveDocument.openTransaction('Trim FB')
   for target in self.targets:
     for b in frameCmd.beams():
       if hasattr(b,'tailOffset') and hasattr(b,'headOffset'):
         edge=b.Support[0][0].Shape.getElement(b.Support[0][1][0])
         ax=edge.tangentAt(0).normalize() #frameCmd.beamAx(b).normalize()
         tail=edge.valueAt(0) #b.Placement.Base
         head=edge.valueAt(edge.LastParameter) #tail+ax*float(b.Height)
         if target.ShapeType=="Vertex":
           P=target.Point
         elif target.ShapeType=="Face" and not frameCmd.isOrtho(target,ax):
           P=frameCmd.intersectionPlane(tail,ax,target)
         elif hasattr(target,"CenterOfMass"):
           P=target.CenterOfMass
         else: 
           P=None
         if P:
           #print P
           #print ax.Length
           deltaTail=(P-tail).dot(ax)
           deltaHead=(P-head).dot(ax)
           #print "D-tail = %.1f; D-head = %.1f" %(deltaTail,deltaHead)
           if abs(deltaTail)<abs(deltaHead):
             b.tailOffset=-deltaTail
           else:
             b.headOffset=deltaHead
   refresh()
   FreeCAD.ActiveDocument.commitTransaction()
Пример #18
0
def flattenTheTube(obj=None, v1=None, v2=None, X=None):
    '''
  flattenTheTube(obj=None,v1=None,v2=None, X=None)
  Put obj in the same plane defined by vectors v1 and v2 and move it to X.
    obj: the object to be rotated
    v1, v2: the vectors of the plane
    X: the Placement.Base
  If no parameter is defined: v1, v2 are the axis of the first two beams 
  in the selections set, X is their intersection and obj is the first other
  object in the selection set. 
  '''
    if None in [obj, v1, v2]:
        try:
            sel = FreeCADGui.Selection.getSelection()
            t1, t2 = frameCmd.beams()[:2]
            v1 = frameCmd.beamAx(t1)
            v2 = frameCmd.beamAx(t2)
            sel.remove(t1)
            sel.remove(t2)
            obj = sel[0]
            X = frameCmd.intersectionCLines(t1, t2)
        except:
            FreeCAD.Console.PrintError('Not enough arguments\n')
            return
    obj.Placement.Rotation = FreeCAD.Rotation(
        frameCmd.beamAx(obj), v1.cross(v2)).multiply(obj.Placement.Rotation)
    obj.Placement.Base = X
Пример #19
0
 def stretchHead(self):
     beams = frameCmd.beams()
     if beams:
         L = float(beams[0].Height) / 2
         ext = L * (self.form.sliHead.value() / 100.0)
         self.form.editHead.setText("%.3f" % ext)
         self.changeHeadOffset()
Пример #20
0
 def refresh(self):
     obj = findFB(frameCmd.beams()[0].Name)
     if not obj:
         obj = findFB(baseName=FreeCADGui.Selection.getSelection()[0])
     if obj: obj.Proxy.redraw(obj)
     FreeCAD.ActiveDocument.recompute()
     FreeCAD.ActiveDocument.recompute()
Пример #21
0
 def stretchTail(self):
     beams = frameCmd.beams()
     if beams:
         L = float(beams[0].Height) / 2
         ext = L * (self.form.sliTail.value() / 100.0)
         self.form.editTail.setText("%.3f" % ext)
         self.changeTailOffset()
Пример #22
0
 def changeAngle(self):
     for beam in frameCmd.beams():
         if hasattr(beam, 'spin'):
             FB = findFB(beam.Name)
             beam.spin = float(self.form.editAngle.text())
             FB.touch()
     FreeCAD.ActiveDocument.recompute()
     FreeCAD.ActiveDocument.recompute()
Пример #23
0
 def changeTailOffset(self):
     for beam in frameCmd.beams():
         if hasattr(beam, 'tailOffset'):
             beam.tailOffset = float(self.form.editTail.text())
             FB = findFB(beam.Name)
             FB.touch()
     FreeCAD.ActiveDocument.recompute()
     FreeCAD.ActiveDocument.recompute()
Пример #24
0
 def changeAngle(self):
   for beam in frameCmd.beams():
     if hasattr(beam,'spin'): 
       FB=findFB(beam.Name)
       beam.spin=float(self.form.editAngle.text())
       FB.touch()
   FreeCAD.ActiveDocument.recompute()
   FreeCAD.ActiveDocument.recompute()
Пример #25
0
 def changeTailOffset(self):
   for beam in frameCmd.beams():
     if hasattr(beam,'tailOffset'): 
       beam.tailOffset=float(self.form.editTail.text())
       FB=findFB(beam.Name)
       FB.touch()
   FreeCAD.ActiveDocument.recompute()
   FreeCAD.ActiveDocument.recompute()
Пример #26
0
 def Activated(self):
   import FreeCAD, frameCmd
   if len(frameCmd.beams())>1:
     FreeCAD.activeDocument().openTransaction('rotJoin')
     frameCmd.rotjoinTheBeam()
     FreeCAD.activeDocument().recompute()
     FreeCAD.activeDocument().commitTransaction()
   else:
     FreeCAD.Console.PrintError('Please select two edges of beams before\n')
Пример #27
0
 def purge(self,fp):
   group=FreeCAD.activeDocument().getObjectsByLabel(fp.Group)[0]
   beams2purge=frameCmd.beams(group.OutList)
   if beams2purge:
     for b in beams2purge:
       profiles=b.OutList
       FreeCAD.ActiveDocument.removeObject(b.Name)
       for p in profiles:
         FreeCAD.ActiveDocument.removeObject(p.Name)
Пример #28
0
 def purge(self, fp):
     group = FreeCAD.activeDocument().getObjectsByLabel(fp.Group)[0]
     beams2purge = frameCmd.beams(group.OutList)
     if beams2purge:
         for b in beams2purge:
             profiles = b.OutList
             FreeCAD.ActiveDocument.removeObject(b.Name)
             for p in profiles:
                 FreeCAD.ActiveDocument.removeObject(p.Name)
Пример #29
0
 def accept(self):
     faces = frameCmd.faces()
     beams = frameCmd.beams()
     if len(faces) == len(beams) > 0 and self.faceRef:
         FreeCAD.activeDocument().openTransaction('AlignFlange')
         for i in range(len(beams)):
             frameCmd.rotTheBeam(beams[i], self.faceRef, faces[i])
         FreeCAD.activeDocument().recompute()
         FreeCAD.activeDocument().commitTransaction()
Пример #30
0
 def Activated (self):
   import pipeCmd, frameCmd
   from Part import Plane
   refFace=[f for f in frameCmd.faces() if type(f.Surface)==Plane][0]
   FreeCAD.activeDocument().openTransaction('Lay-down the pipe')
   for b in frameCmd.beams():
     if pipeCmd.isPipe(b):
       pipeCmd.laydownTheTube(b,refFace)
   FreeCAD.activeDocument().recompute()
   FreeCAD.activeDocument().commitTransaction()
Пример #31
0
 def Activated(self):
     import pipeCmd, frameCmd
     from Part import Plane
     refFace = [f for f in frameCmd.faces() if type(f.Surface) == Plane][0]
     FreeCAD.activeDocument().openTransaction('Lay-down the pipe')
     for b in frameCmd.beams():
         if pipeCmd.isPipe(b):
             pipeCmd.laydownTheTube(b, refFace)
     FreeCAD.activeDocument().recompute()
     FreeCAD.activeDocument().commitTransaction()
Пример #32
0
 def Activated(self):
     import FreeCAD, frameCmd
     if len(frameCmd.beams()) > 1:
         FreeCAD.activeDocument().openTransaction('rotJoin')
         frameCmd.rotjoinTheBeam()
         FreeCAD.activeDocument().recompute()
         FreeCAD.activeDocument().commitTransaction()
     else:
         FreeCAD.Console.PrintError(
             'Please select two edges of beams before\n')
Пример #33
0
 def getL(self):
   l=[p.Height for p in frameCmd.beams() if pipeCmd.isPipe(p)]
   if l:
     refL=min(l)
     self.lab0.setText(str(refL))
     self.refL=float(refL)
     self.edit1.setText("%.2f" %(self.refL*self.slider.value()/100.0))
   else:
     self.lab0.setText('<reference>')
     self.refL=0.0
     self.edit1.setText(str(self.slider.value())+'%')
Пример #34
0
 def onPushButton1(self):
   from math import pi, degrees
   import frameCmd
   try:
     obj=self.Selection.getSelection()[0]
     self.labName.setText(obj.Label)
     self.labBaseVal.setText(str("P = %.1f,%.1f,%.1f"%tuple(obj.Placement.Base)))
     self.labRotAng.setText(str("%.2f " %(degrees(obj.Placement.Rotation.Angle))))
     ax=obj.Placement.Rotation.Axis
     self.labRotAx.setText(str("v = (%(x).2f,%(y).2f,%(z).2f)" %{'x':ax.x,'y':ax.y,'z':ax.z}))
     shapes=[y for x in self.Selection.getSelectionEx() for y in x.SubObjects if hasattr(y,'ShapeType')]
     if len(shapes)==1:
       sub=shapes[0]
       if sub.ShapeType=='Edge':
         if sub.curvatureAt(0)==0:
           self.labSubObj.setText(sub.ShapeType+':\tL = %.1f mm' %sub.Length)
         else:
           x,y,z=sub.centerOfCurvatureAt(0)
           d=2/sub.curvatureAt(0)
           self.labSubObj.setText(sub.ShapeType+':\tD = %.1f mm\n\tC = %.1f,%.1f,%.1f' %(d,x,y,z))
       elif sub.ShapeType=='Face':
         self.labSubObj.setText(sub.ShapeType+':\tA = %.1f mm2' %sub.Area)
       elif sub.ShapeType=='Vertex':
         self.labSubObj.setText(sub.ShapeType+': pos = (%(x).1f,%(y).1f,%(z).1f)' %{'x':sub.X,'y':sub.Y,'z':sub.Z})
     elif len(shapes)>1:
       self.labSubObj.setText(shapes[0].ShapeType+' to '+shapes[1].ShapeType+': distance = %.1f mm' %(shapes[0].distToShape(shapes[1])[0]))
     else:
       self.labSubObj.setText(' ')
     if len(frameCmd.beams())==1:
       b=frameCmd.beams()[0]
       self.labBeam.setText(b.Label+":\tL=%.2f"%(b.Height))
       self.labProfile.setText("Profile: "+b.Profile)
     elif len(frameCmd.beams())>1:
       b1,b2=frameCmd.beams()[:2]
       self.labBeam.setText(b1.Label+"^"+b2.Label+": %.2f"%(degrees(frameCmd.beamAx(b1).getAngle(frameCmd.beamAx(b2)))))
       self.labProfile.setText("")
     else:
       self.labBeam.setText("")
       self.labProfile.setText("")
   except:
     pass
Пример #35
0
def extendTheTubes2intersection(pipe1=None,pipe2=None,both=True):
  '''
  Does what it says; also with beams.
  If arguments are None, it picks the first 2 selected beams().
  '''
  if not (pipe1 and pipe2):
    try:
      pipe1,pipe2=frameCmd.beams()[:2]
    except:
      FreeCAD.Console.PrintError('Insufficient arguments for extendTheTubes2intersection\n')
  P=frameCmd.intersectionCLines(pipe1,pipe2)
  if P!=None:
    frameCmd.extendTheBeam(pipe1,P)
    if both:
      frameCmd.extendTheBeam(pipe2,P)
Пример #36
0
 def Activated (self):
   import pipeCmd, frameCmd
   from Part import Plane
   selex=FreeCADGui.Selection.getSelectionEx()
   for sx in selex:
     sxFaces=[f for f in frameCmd.faces([sx]) if type(f.Surface)==Plane]
     if len(sxFaces)>0:
       refFace=sxFaces[0]
       support=sx.Object
   FreeCAD.activeDocument().openTransaction('Raise-up the support')
   for b in frameCmd.beams():
     if pipeCmd.isPipe(b):
       pipeCmd.laydownTheTube(b,refFace,support)
       break
   FreeCAD.activeDocument().recompute()
   FreeCAD.activeDocument().commitTransaction()
Пример #37
0
 def Activated (self):
   import pipeCmd, frameCmd
   from Part import Plane
   selex=FreeCADGui.Selection.getSelectionEx()
   for sx in selex:
     sxFaces=[f for f in frameCmd.faces([sx]) if type(f.Surface)==Plane]
     if len(sxFaces)>0:
       refFace=sxFaces[0]
       support=sx.Object
   FreeCAD.activeDocument().openTransaction('Raise-up the support')
   for b in frameCmd.beams():
     if pipeCmd.isPipe(b):
       pipeCmd.laydownTheTube(b,refFace,support)
       break
   FreeCAD.activeDocument().recompute()
   FreeCAD.activeDocument().commitTransaction()
Пример #38
0
 def insert(self):
   tubes=[t for t in frameCmd.beams() if hasattr(t,'PSize')]
   if len(tubes)>0 and tubes[0].PSize in [prop['PSize'] for prop in self.pipeDictList]:
     for prop in self.pipeDictList:
       if prop['PSize']==tubes[0].PSize:
         d=prop
         break
   else:
     d=self.pipeDictList[self.sizeList.currentRow()]
   propList=[d['PSize'],d['FlangeType'],float(pq(d['D'])),float(pq(d['d'])),float(pq(d['df'])),float(pq(d['f'])),float(pq(d['t'])),int(d['n'])]
   FreeCAD.activeDocument().openTransaction('Insert flange')
   if len(frameCmd.edges())==0:
     vs=[v for sx in FreeCADGui.Selection.getSelectionEx() for so in sx.SubObjects for v in so.Vertexes]
     if len(vs)==0:
       self.lastFlange=pipeCmd.makeFlange(propList)
       self.lastFlange.PRating=self.PRating
       if self.combo.currentText()!='<none>':
         pipeCmd.moveToPyLi(self.lastFlange,self.combo.currentText())
     else:
       for v in vs:
         self.lastFlange=pipeCmd.makeFlange(propList,v.Point)
         self.lastFlange.PRating=self.PRating
         if self.combo.currentText()!='<none>':
           pipeCmd.moveToPyLi(self.lastFlange,self.combo.currentText())
   elif tubes:
     selex=FreeCADGui.Selection.getSelectionEx()
     for sx in selex:
       if hasattr(sx.Object,'PType') and sx.Object.PType=='Pipe' and frameCmd.edges([sx]):
         for edge in frameCmd.edges([sx]):
           if edge.curvatureAt(0)!=0:
             self.lastFlange=pipeCmd.makeFlange(propList,edge.centerOfCurvatureAt(0),sx.Object.Shape.Solids[0].CenterOfMass-edge.centerOfCurvatureAt(0))
             self.lastFlange.PRating=self.PRating
             if self.combo.currentText()!='<none>':
               pipeCmd.moveToPyLi(self.lastFlange,self.combo.currentText())
     FreeCAD.activeDocument().commitTransaction()
     FreeCAD.activeDocument().recompute()
     return
   else:
     for edge in frameCmd.edges():
       if edge.curvatureAt(0)!=0:
         self.lastFlange=pipeCmd.makeFlange(propList,edge.centerOfCurvatureAt(0),edge.tangentAt(0).cross(edge.normalAt(0)))
         self.lastFlange.PRating=self.PRating
         if self.combo.currentText()!='<none>':
           pipeCmd.moveToPyLi(self.lastFlange,self.combo.currentText())
   FreeCAD.activeDocument().commitTransaction()
   FreeCAD.activeDocument().recompute()
Пример #39
0
 def breakPipe(self):
   p2nd=None
   FreeCAD.activeDocument().openTransaction('Break pipes')
   if self.edit1.text()[-1]=='%':
     pipes=[p for p in frameCmd.beams() if pipeCmd.isPipe(p)]
     for p in pipes:
       p2nd=pipeCmd.breakTheTubes(float(p.Height)*float(self.edit1.text().rstrip('%').strip())/100,pipes=[p],gap=float(self.edit2.text()))
       if p2nd and self.combo.currentText()!='<none>':
         for p in p2nd:
           pipeCmd.moveToPyLi(p,self.combo.currentText())
   else:
     p2nd=pipeCmd.breakTheTubes(float(self.edit1.text()),gap=float(self.edit2.text()))
     if p2nd and self.combo.currentText()!='<none>':
       for p in p2nd:
         pipeCmd.moveToPyLi(p,self.combo.currentText())
   FreeCAD.activeDocument().commitTransaction()
   FreeCAD.activeDocument().recompute()
Пример #40
0
 def accept(self):
   if self.labTail:
     self.labTail.removeLabel()
     self.labTail=None
   self.L=frameCmd.getDistance()
   if self.form.edit1.text():
     length=float(self.form.edit1.text())
     FreeCAD.activeDocument().openTransaction('Stretch beam')
     for beam in frameCmd.beams():
       delta=float(beam.Height)-length
       frameCmd.stretchTheBeam(beam,length)
       if self.form.tail.isChecked():
         disp=frameCmd.beamAx(beam).multiply(delta)
         beam.Placement.move(disp)
       elif self.form.both.isChecked():
         disp=frameCmd.beamAx(beam).multiply(delta/2.0)
         beam.Placement.move(disp)
     FreeCAD.activeDocument().recompute()
     FreeCAD.activeDocument().commitTransaction()
Пример #41
0
 def accept(self):  # stretch
     if self.labTail:
         self.labTail.removeLabel()
         self.labTail = None
     self.L = frameCmd.getDistance()
     if self.form.edit1.text():
         length = float(self.form.edit1.text())
         FreeCAD.activeDocument().openTransaction('Stretch beam')
         for beam in frameCmd.beams():
             delta = float(beam.Height) - length
             frameCmd.stretchTheBeam(beam, length)
             if self.form.tail.isChecked():
                 disp = frameCmd.beamAx(beam).multiply(delta)
                 beam.Placement.move(disp)
             elif self.form.both.isChecked():
                 disp = frameCmd.beamAx(beam).multiply(delta / 2.0)
                 beam.Placement.move(disp)
         FreeCAD.activeDocument().recompute()
         FreeCAD.activeDocument().commitTransaction()
Пример #42
0
def reverseTheTube(objEx):
  '''
  reverseTheTube(objEx)
  Reverse the orientation of objEx spinning it 180 degrees around the x-axis
  of its shape.
  If an edge is selected, it's used as pivot.
  '''
  disp=None
  selectedEdges=[e for e in objEx.SubObjects if e.ShapeType=='Edge']
  if selectedEdges:
    for edge in frameCmd.edges([objEx]):
      if edge.curvatureAt(0):
        disp=edge.centerOfCurvatureAt(0)-objEx.Object.Placement.Base
        break
      elif frameCmd.beams([objEx.Object]):
        ax=frameCmd.beamAx(objEx.Object)
        disp=ax*((edge.CenterOfMass-objEx.Object.Placement.Base).dot(ax))
  rotateTheTubeAx(objEx.Object,FreeCAD.Vector(1,0,0),180)
  if disp:
    objEx.Object.Placement.move(disp*2)
Пример #43
0
 def changeProfile(self):
   # find selected FB
   try:
     FB=findFB(baseName=FreeCADGui.Selection.getSelection()[0].Name)
     if not FB:
       FB=findFB(beamName=frameCmd.beams()[0].Name)
   except:
     FreeCAD.Console.PrintError('Nothing selected\n')
     return
   if FB and self.form.listSizes.selectedItems():
     if self.SType=='<by sketch>':
       profile=FreeCAD.ActiveDocument.getObjectsByLabel(self.form.listSizes.currentItem().text())[0]
     else:
       prop=self.sectDictList[self.form.listSizes.currentRow()]
       profile=newProfile(prop)
     name=FB.Profile.Name
     FB.Profile=profile
     FB.Proxy.redraw(FB)
     FreeCAD.ActiveDocument.removeObject(name)
     FreeCAD.ActiveDocument.recompute()
     FreeCAD.ActiveDocument.recompute()
   else:
     FreeCAD.Console.PrintError('No frameBranch or profile selected\n')
Пример #44
0
 def changeProfile(self):
     # find selected FB
     try:
         FB = findFB(baseName=FreeCADGui.Selection.getSelection()[0].Name)
         if not FB:
             FB = findFB(beamName=frameCmd.beams()[0].Name)
     except:
         FreeCAD.Console.PrintError('Nothing selected\n')
         return
     if FB and self.form.listSizes.selectedItems():
         if self.SType == '<by sketch>':
             profile = FreeCAD.ActiveDocument.getObjectsByLabel(
                 self.form.listSizes.currentItem().text())[0]
         else:
             prop = self.sectDictList[self.form.listSizes.currentRow()]
             profile = newProfile(prop)
         name = FB.Profile.Name
         FB.Profile = profile
         FB.Proxy.redraw(FB)
         FreeCAD.ActiveDocument.removeObject(name)
         FreeCAD.ActiveDocument.recompute()
         FreeCAD.ActiveDocument.recompute()
     else:
         FreeCAD.Console.PrintError('No frameBranch or profile selected\n')
Пример #45
0
 def refresh(self):
   obj=findFB(frameCmd.beams()[0].Name)
   if not obj: obj=findFB(baseName=FreeCADGui.Selection.getSelection()[0])
   if obj: obj.Proxy.redraw(obj)
   FreeCAD.ActiveDocument.recompute()
   FreeCAD.ActiveDocument.recompute()
Пример #46
0
 def writeTail(self):
   if frameCmd.beams():
     beam=frameCmd.beams()[0]
     from polarUtilsCmd import label3D
     self.labTail=label3D(pl=beam.Placement, text='____TAIL')
Пример #47
0
 def selectAction(self):
     if len(frameCmd.beams()) > 0:
         self.beam = frameCmd.beams()[0]
         self.form.label.setText(self.beam.Label + ':' + self.beam.Profile)
         FreeCADGui.Selection.removeSelection(self.beam)
Пример #48
0
 def selectAction(self):
   if len(frameCmd.beams())>0:
     self.beam=frameCmd.beams()[0]
     self.form.label.setText(self.beam.Label+':'+self.beam.Profile)
     FreeCADGui.Selection.removeSelection(self.beam)
Пример #49
0
 def writeTail(self):
     if frameCmd.beams():
         beam = frameCmd.beams()[0]
         from polarUtilsCmd import label3D
         self.labTail = label3D(pl=beam.Placement,
                                text='____TAIL')  #, sizeFont=sc)
Пример #50
0
 def removeBeams(self):
   for beam in frameCmd.beams():
     FB=findFB(beamName=beam.Name)
     if FB:
       i=FB.Beams.index(beam.Name)
       FB.Proxy.remove(i)