Beispiel #1
0
    def display(self, arg):
        """sets the text of the WP button"""

        o = self.getOffset()
        if o:
            if o > 0:
                suffix = ' +O'
            else:
                suffix = ' -O'
        else:
            suffix = ''
        vdir = FreeCAD.DraftWorkingPlane.axis
        vdir = '(' + str(vdir.x)[:4] + ',' + str(vdir.y)[:4] + ',' + str(
            vdir.z)[:4] + ')'
        vdir = " " + translate("draft", "Dir") + ": " + vdir
        if type(arg).__name__ == 'str':
            self.wpButton.setText(arg + suffix)
            if o != 0:
                o = " " + translate("draft", "Offset") + ": " + str(o)
            else:
                o = ""
            self.wpButton.setToolTip(
                translate("draft", "Current working plane") + ": " +
                self.wpButton.text() + o + vdir)
        elif type(arg).__name__ == 'Vector':
            plv = '(' + str(arg.x)[:6] + ',' + str(arg.y)[:6] + ',' + str(
                arg.z)[:6] + ')'
            self.wpButton.setText(translate("draft", "Custom"))
            self.wpButton.setToolTip(
                translate("draft", "Current working plane") + ": " + plv +
                vdir)
        p = FreeCAD.DraftWorkingPlane
        self.states.append([p.u, p.v, p.axis, p.position])
        FreeCADGui.doCommandGui("FreeCADGui.Snapper.setGrid()")
 def Activated(self):
     self.name = translate("draft","Scale", utf8_decode=True)
     Modifier.Activated(self,self.name)
     self.ghost = None
     if self.ui:
         if not FreeCADGui.Selection.getSelection():
             self.ui.selectUi()
             msg(translate("draft", "Select an object to scale")+"\n")
             self.call = self.view.addEventCallback("SoEvent",selectObject)
         else:
             self.proceed()
Beispiel #3
0
 def Activated(self):
     self.name = translate("draft", "BaseTransform", utf8_decode=True)
     Modifier.Activated(self, self.name)
     if self.ui:
         if not FreeCADGui.Selection.getSelection():
             self.ui.selectUi()
             msg(translate("draft", "Select an object to edit") + "\n")
             self.call_sel = \
                     self.view.addEventCallback("SoEvent", selectObject)
             ## TODO it should allow multiple selections
             ## TODO Ui should be more explanatory
         else:
             self.proceed()
Beispiel #4
0
def makeValve(propList=[], pos=None, Z=None):
  '''add a Valve object
  makeValve(propList,pos,Z);
  propList is one optional list with at least 4 elements:
    DN (string): nominal diameter
    VType (string): type of valve
    OD (float): outside diameter
    ID (float): inside diameter
    H (float): length of pipe
    Kv (float): valve's flow factor (optional)
  Default is "DN50 ball valve ('ball')"
  pos (vector): position of insertion; default = 0,0,0
  Z (vector): orientation: default = 0,0,1
  '''
  if pos==None:
    pos=FreeCAD.Vector(0,0,0)
  if Z==None:
    Z=FreeCAD.Vector(0,0,1)
  a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython",translate("Part::FeaturePython","Valve"))
  if len(propList):
    pFeatures.Valve(a,*propList)
  else:
    pFeatures.Valve(a)
  a.ViewObject.Proxy=0
  a.Placement.Base=pos
  rot=FreeCAD.Rotation(FreeCAD.Vector(0,0,1),Z)
  a.Placement.Rotation=rot.multiply(a.Placement.Rotation)
  return a
Beispiel #5
0
def makeCap(propList=[], pos=None, Z=None):
  '''add a Cap object
  makeCap(propList,pos,Z);
  propList is one optional list with 4 elements:
    DN (string): nominal diameter
    OD (float): outside diameter
    thk (float): shell thickness
  Default is "DN50 (SCH-STD)"
  pos (vector): position of insertion; default = 0,0,0
  Z (vector): orientation: default = 0,0,1
  Remember: property PRating must be defined afterwards
  '''
  if pos==None:
    pos=FreeCAD.Vector(0,0,0)
  if Z==None:
    Z=FreeCAD.Vector(0,0,1)
  a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython",translate("Part::FeaturePython","Cap"))
  if len(propList)==3:
    pFeatures.Cap(a,*propList)
  else:
    pFeatures.Cap(a)
  a.ViewObject.Proxy=0
  a.Placement.Base=pos
  rot=FreeCAD.Rotation(FreeCAD.Vector(0,0,1),Z)
  a.Placement.Rotation=rot.multiply(a.Placement.Rotation)
  return a
Beispiel #6
0
def makeUbolt(propList=[], pos=None, Z=None):
  '''Adds a Ubolt object:
  makeUbolt(propList,pos,Z);
    propList is one optional list with 5 elements:
      PSize (string): nominal diameter
      ClampType (string): the clamp type or standard
      C (float): the diameter of the U-bolt
      H (float): the total height of the U-bolt
      d (float): the rod diameter
    pos (vector): position of insertion; default = 0,0,0
    Z (vector): orientation: default = 0,0,1
  Remember: property PRating must be defined afterwards
  '''
  if pos==None:
    pos=FreeCAD.Vector(0,0,0)
  if Z==None:
    Z=FreeCAD.Vector(0,0,1)
  a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython",translate("Part::FeaturePython","U-Bolt"))
  if len(propList)==5:
    pFeatures.Ubolt(a,*propList)
  else:
    pFeatures.Ubolt(a)
  a.ViewObject.Proxy=0
  a.Placement.Base=pos
  rot=FreeCAD.Rotation(FreeCAD.Vector(0,0,1),Z)
  a.Placement.Rotation=rot.multiply(a.Placement.Rotation)
  return a
Beispiel #7
0
def simpleSurfBend(path=None,profile=None):
  'select the centerline and the O.D. and let it sweep'
  curva=FreeCAD.activeDocument().addObject("Part::Feature",translate("Part::Feature","Simple curve"))
  if path==None or profile==None:
    curva.Shape=Part.makeSweepSurface(*fCmd.edges()[:2])
  elif path.ShapeType==profile.ShapeType=='Edge':
    curva.Shape=Part.makeSweepSurface(path,profile)
 def scale(self,x,y,z,rel,mode):
     delta = Vector(x,y,z)
     if rel:
         delta = FreeCAD.DraftWorkingPlane.getGlobalCoords(delta)
     if mode == 0:
         copy = False
         legacy = False
     elif mode == 1:
         copy = False
         legacy = True
     elif mode == 2:
         copy = True
         legacy = True
     "moving the real shapes"
     sel = '['
     for o in self.sel:
         if len(sel) > 1:
             sel += ','
         sel += 'FreeCAD.ActiveDocument.'+o.Name
     sel += ']'
     FreeCADGui.addModule("Draft")
     self.commit(translate("draft","Copy"),
                 ['Draft.scale('+sel+',delta='+DraftVecUtils.toString(delta)+',center='+DraftVecUtils.toString(self.node[0])+',copy='+str(copy)+',legacy='+str(legacy)+')',
                  'FreeCAD.ActiveDocument.recompute()'])
     self.finish()
 def numericInput(self,numx,numy,numz):
     "this function gets called by the toolbar when a valid base point has been entered"
     self.point = Vector(numx,numy,numz)
     self.node.append(self.point)
     if not self.pickmode:
         self.ui.offUi()
         if self.call:
             self.view.removeEventCallback("SoEvent",self.call)
         self.task = DraftGui.ScaleTaskPanel()
         self.task.sourceCmd = self
         DraftGui.todo.delay(FreeCADGui.Control.showDialog,self.task)
         if self.ghost:
             self.ghost.on()
     elif len(self.node) == 2:
         msg(translate("draft", "Pick new distance from base point:")+"\n")
     elif len(self.node) == 3:
         if hasattr(FreeCADGui,"Snapper"):
             FreeCADGui.Snapper.off()
         if self.call:
             self.view.removeEventCallback("SoEvent",self.call)
         d1 = (self.node[1].sub(self.node[0])).Length
         d2 = (self.node[2].sub(self.node[0])).Length
         #print d2,"/",d1,"=",d2/d1
         if hasattr(self,"task"):
             if self.task:
                 self.task.lock.setChecked(True)
                 self.task.setValue(d2/d1)
    def __init__(self):
            # create the se Toolbar
            self.mw = getMainWindow()
            self.seWidget = QtGui.QDockWidget()
            self.baseWidget = DraftDockWidget()
            self.seWidget.setObjectName("seToolbar")
            self.seWidget.setTitleBarWidget(self.baseWidget)
            self.seWidget.setWindowTitle(translate("se", "Surface Editor Command Bar"))
            self.mw.addDockWidget(QtCore.Qt.TopDockWidgetArea,self.seWidget)
            self.baseWidget.setVisible(False)
            self.seWidget.setVisible(False)
            #self.seWidget.toggleViewAction().setVisible(False)
            #self.sourceCmd = None
            #self.taskmode = Draft.getParam("UiMode")
            self.layout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight,self.baseWidget)
            self.layout.setDirection(QtGui.QBoxLayout.LeftToRight)
            self.layout.setObjectName("layout")

            self.l1 = self.label("l1","current command: ")
            self.lcommand = self.label("lcommand", "None")
            self.w1 = self.lineedit("w1",width=100)
            self.l2 = self.label("l1","value:")
            self.w2 = self.lineedit("w2",width=100)
            self.q1 = self.combo("q1",[("String","App::PropertyString"),("Float","App::PropertyFloat"),("Vector","App::PropertyVector")])
            self.b1 = self.button("b1","OK")

            self.layout.addStretch(100)
Beispiel #11
0
def makeReduct(propList=[], pos=None, Z=None, conc=True):
  '''Adds a Reduct object
  makeReduct(propList=[], pos=None, Z=None, conc=True)
    propList is one optional list with 6 elements:
      PSize (string): nominal diameter
      OD (float): major diameter
      OD2 (float): minor diameter
      thk (float): major thickness
      thk2 (float): minor thickness
      H (float): length of reduction
    pos (vector): position of insertion; default = 0,0,0
    Z (vector): orientation: default = 0,0,1
    conc (bool): True for concentric or Flase for eccentric reduction
  Remember: property PRating must be defined afterwards
  '''
  if pos==None:
    pos=FreeCAD.Vector(0,0,0)
  if Z==None:
    Z=FreeCAD.Vector(0,0,1)
  a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython",translate("Part::FeaturePython","Reduction"))
  propList.append(conc)
  pFeatures.Reduct(a,*propList)
  a.ViewObject.Proxy=0
  a.Placement.Base=pos
  rot=FreeCAD.Rotation(FreeCAD.Vector(0,0,1),Z)
  a.Placement.Rotation=rot.multiply(a.Placement.Rotation)
  return a
Beispiel #12
0
    def draw_update(self, point):
        """
        Update the geometry as it has been defined
        """

        if len(self.node) == 1:

            self.alignment_tracker.on()

            #if self.planetrack:
            #    self.planetrack.set(self.node[0])

            #print(translate('Transportation', 'Pick next  point:\n'))

            return

        print(type(self.obj.Shape))
        #res = self.update_shape(self.node)
        #print(type(res))
        #self.obj.Shape = self.update_shape(self.node)

        print(
            translate('Transportation',
                      'Pick next point, finish (Shift+f), or close (o):') +
            '\n')
    def __init__(self):
        # create the se Toolbar
        self.mw = FreeCADGui.getMainWindow()
        self.seWidget = QtGui.QDockWidget()
        self.baseWidget = DraftDockWidget()
        self.seWidget.setObjectName("seToolbar")
        self.seWidget.setTitleBarWidget(self.baseWidget)
        self.seWidget.setWindowTitle(
            translate("se", "Surface Editor Command Bar"))
        self.mw.addDockWidget(QtCore.Qt.TopDockWidgetArea, self.seWidget)
        self.baseWidget.setVisible(False)
        self.seWidget.setVisible(False)
        #self.seWidget.toggleViewAction().setVisible(False)
        #self.sourceCmd = None
        #self.taskmode = Draft.getParam("UiMode")
        self.layout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight,
                                       self.baseWidget)
        self.layout.setDirection(QtGui.QBoxLayout.LeftToRight)
        self.layout.setObjectName("layout")

        self.l1 = self.label("l1", "current command: ")
        self.lcommand = self.label("lcommand", "None")
        self.w1 = self.lineedit("w1", width=100)
        self.l2 = self.label("l1", "value:")
        self.w2 = self.lineedit("w2", width=100)
        self.q1 = self.combo("q1", [("String", "App::PropertyString"),
                                    ("Float", "App::PropertyFloat"),
                                    ("Vector", "App::PropertyVector")])
        self.b1 = self.button("b1", "OK")

        self.layout.addStretch(100)
Beispiel #14
0
    def draw_arc(self, rad, chamfer, delete):
        """Processes the selection and draws the actual object"""
        wires = FreeCADGui.Selection.getSelection()
        _two = translate("draft", "two elements needed")
        if not wires:
            FCC.PrintError("CommandFillet: " + _two + "\n")
            return
        if len(wires) != 2:
            FCC.PrintError("CommandFillet: " + _two + "\n")
            return

        for o in wires:
            FCC.PrintMessage("CommandFillet: " + Draft.getType(o) + "\n")

        _test = translate("draft", "Test object")
        _test_off = translate("draft", "Test object removed")
        _cant = translate("draft", "fillet cannot be created")

        FCC.PrintMessage(4 * "=" + _test + "\n")
        arc = makeFillet(wires, rad)
        if not arc:
            FCC.PrintError("CommandFillet: " + _cant + "\n")
            return
        self.doc.removeObject(arc.Name)
        FCC.PrintMessage(4 * "=" + _test_off + "\n")

        doc = 'FreeCAD.ActiveDocument.'
        _wires = '[' + doc + wires[0].Name + ', ' + doc + wires[1].Name + ']'

        FreeCADGui.addModule("DraftFillet")
        name = translate("draft", "Create fillet")

        args = _wires + ', radius=' + str(rad)
        if chamfer:
            args += ', chamfer=' + str(chamfer)
        if delete:
            args += ', delete=' + str(delete)
        func = ['arc = DraftFillet.makeFillet(' + args + ')']
        func.append('Draft.autogroup(arc)')

        # Here we could remove the old objects, but the makeFillet()
        # command already includes an option to remove them.
        # Therefore, the following is not necessary
        # rems = [doc + 'removeObject("' + o.Name + '")' for o in wires]
        # func.extend(rems)
        func.append('FreeCAD.ActiveDocument.recompute()')
        self.commit(name, func)
Beispiel #15
0
  def Initialize(self):
    import pForms
    import CUtils
    import CFrame
    import CPipe
    from PySide.QtCore import QT_TRANSLATE_NOOP
    from DraftGui import translate
    from dodoPM import toolList
    FreeCADGui.addLanguagePath(pForms.getLanguagePath())
    FreeCADGui.updateLocale()

    self.utilsList=["selectSolids","queryModel","moveWorkPlane","offsetWorkPlane","rotateWorkPlane","hackedL","moveHandle","dpCalc"]
    self.appendToolbar(translate("dodo","Utils"),self.utilsList)
    Log ('Loading Utils: done\n')

    self.frameList=["frameIt","FrameBranchManager","insertSection","spinSect","reverseBeam","shiftBeam","pivotBeam","levelBeam","alignEdge","rotJoin","alignFlange","stretchBeam","extend","adjustFrameAngle","insertPath"]
    self.appendToolbar(translate("dodo","frametools"),self.frameList)
    Log ('Loading Frame tools: done\n')

    self.pypeList=["insertPipe","insertElbow","insertReduct","insertCap","insertValve","insertFlange","insertUbolt","insertPypeLine","insertBranch","insertTank","insertRoute","breakPipe","mateEdges","flat","extend2intersection","extend1intersection","laydown","raiseup","attach2tube","point2point","insertAnyz"]#,"joinPype"]

    self.qm=toolList # ["pipeQM","elbowQM","reductQM"]
    self.appendToolbar(translate("dodo","pypetools"),self.pypeList)
    Log ('Loading Pipe tools: done\n')
    self.appendMenu(translate("dodo","Frame tools"),self.frameList)
    self.appendMenu(translate("dodo","Pype tools"),self.pypeList)
    self.appendMenu(translate("dodo","Utils"),self.utilsList)
    self.appendMenu(translate("dodo","QkMenus"),self.qm)
Beispiel #16
0
    def Activated(self):
        """
        Command activation method
        """

        if self.is_activated:
            return

        self.is_activated = True

        DraftTools.DraftTool.Activated(self,
                                       name=translate('Transportation',
                                                      'Alignment'))

        self.call = self.view.addEventCallback("SoEvent", self.action)

        #make all other visible geometry unselectable
        view_objects = [
            _v.ViewObject for _v in App.ActiveDocument.findObjects()
            if hasattr(_v, 'ViewObject')
        ]

        self.selectable_objects = [
            _v for _v in view_objects if hasattr(_v, 'Selectable')
        ]

        for vobj in self.selectable_objects:
            vobj.Selectable = False

        #create temporary group and geometry
        self.temp_group = \
            App.ActiveDocument.addObject('App::DocumentObjectGroup', 'Temp')

        points = self.alignment.Points[:]

        for point in points:
            point.z = 0.1

        self.alignment_draft = utils.make_wire(points, str(uuid.uuid4()))

        self.temp_group.addObject(self.alignment_draft)

        if not self.alignment_tracker:
            self.alignment_tracker = AlignmentTracker()

        self.alignment.ViewObject.LineColor = (0.5, 0.5, 0.5)
        self.alignment.ViewObject.DrawStyle = u'Dashed'
        self.alignment.ViewObject.Selectable = False

        self.edges = self.alignment.Proxy.get_edges()

        #panel = DraftAlignmentTask(self.clean_up)

        #Gui.Control.showDialog(panel)
        #panel.setup()

        App.ActiveDocument.recompute()
    def Activated(self):
        '''
        Command activation method
        '''

        DraftTools.Line.Activated(self, name=translate('Transportation', 'Alignment'))

        if self.doc:
            self.alignment_tracker = AlignmentTracker()
    def undo_last(self):
        '''
        Undo the last segment
        '''

        if len(self.node) > 1:

            self.node.pop()
            self.alignment_tracker.update(self.node, degree = self.degree)
            self.obj.Shape = self.updateShape(self.node)
            print(translate('Transporation', 'Undo last point'))
Beispiel #19
0
 def ContextMenu(self, recipient):
     """Define an optional custom context menu."""
     from DraftGui import translate
     if recipient == "View":
         if FreeCAD.activeDraftCommand is None:
             if FreeCADGui.Selection.getSelection():
                 self.appendContextMenu(
                     "Draft",
                     self.drawing_commands + self.modification_commands)
                 self.appendContextMenu("Utilities", self.context_commands)
             else:
                 self.appendContextMenu("Draft", self.drawing_commands)
         else:
             if FreeCAD.activeDraftCommand.featureName in (
                     translate("draft", "Line"), translate("draft", "Wire"),
                     translate("draft",
                               "Polyline"), translate("draft", "BSpline"),
                     translate("draft", "BezCurve"),
                     translate("draft", "CubicBezCurve")):
                 # BUG: the line subcommands are in fact listed
                 # in the context menu, but they are de-activated
                 # so they don't work.
                 self.appendContextMenu("", self.line_commands)
     else:
         if FreeCADGui.Selection.getSelection():
             self.appendContextMenu("Utilities", self.context_commands)
    def Activated(self):
        from bimEdit import hideAttribute
        self.name = translate("draft","bimMove", utf8_decode=True)
        Modifier.Activated(self,self.name)
        self.ghost = {}
        for typ in self.sel_dict:
            if typ not in self.ghost:
                self.ghost.update({typ:[]})
            for o in self.sel_dict[typ]:
                self.ghost[typ].append(o.ghost[typ])

        ## Proceeding
        if self.call:
            self.view.removeEventCallback("SoEvent",self.call)
        self.ui.pointUi(self.name)
        self.ui.modUi()
        if self.copymode:
            self.ui.isCopy.setChecked(True)
        self.ui.xValue.setFocus()
        self.ui.xValue.selectAll()

        self.call = self.view.addEventCallback("SoEvent",self.action)
        msg(translate("draft", "Pick start point:")+"\n")
 def proceed(self):
     if self.call: self.view.removeEventCallback("SoEvent",self.call)
     self.sel = FreeCADGui.Selection.getSelection()
     self.sel = Draft.getGroupContents(self.sel)
     self.refs = []
     self.ui.pointUi(self.name)
     self.ui.modUi()
     self.ui.xValue.setFocus()
     self.ui.xValue.selectAll()
     self.ghost = ghostTracker(self.sel)
     self.pickmode = False
     self.task = None
     self.call = self.view.addEventCallback("SoEvent",self.action)
     msg(translate("draft", "Pick base point:")+"\n")
Beispiel #22
0
    def ContextMenu(self, recipient):
        "right-clicks on screen"
        try:
            import BOPTools  # as bop
            import Design456_Extrude  # import all	 needed files
            import Design456_Extract
            import Design456_ExtrudeFace
            import Design456_SplitObject
            import Design456_loftOnDirection
            import Design456_Part as designPart
            import Design456_Part_Tools as pTools
            import Design456_Part_Utils as pUtils
            import Design456_2Ddrawing as TwoDDraw

            self.appendContextMenu("Design456_Part",
                                   designPart.Design456_Part.list)
            self.appendContextMenu("Design456_Tools",
                                   pTools.Design456_Part_Tools.list)
            self.appendContextMenu("Design456_2DTools",
                                   pUtils.Design456_Part_Utils.list)

            self.appendContextMenu("Design456_2Ddrawing",
                                   TwoDDraw.Design456_2Ddrawing.list)
            # from DRAFT
            """Define an optional custom context menu."""
            # from Design456_PART
            self.appendContextMenu("Design456_Part",
                                   designPart.Design456_Part.list)
            from DraftGui import translate
            if recipient == "View":
                if App.activeDraftCommand is None:
                    if Gui.Selection.getSelection():
                        self.appendContextMenu(
                            "Draft",
                            self.drawing_commands + self.modification_commands)
                        self.appendContextMenu("Utilities",
                                               self.context_commands)
                    else:
                        self.appendContextMenu("Draft", self.drawing_commands)
                else:
                    if App.activeDraftCommand.featureName in (
                            translate("draft",
                                      "Line"), translate("draft", "Wire"),
                            translate("draft", "Polyline"),
                            translate("draft", "BSpline"),
                            translate("draft", "BezCurve"),
                            translate("draft", "CubicBezCurve")):
                        self.appendContextMenu("", self.line_commands)
            else:
                if Gui.Selection.getSelection():
                    self.appendContextMenu("Utilities", self.context_commands)
            # END DRAFT
        except Exception as exc:
            App.Console.PrintError(exc)
            App.Console.PrintError("Error: Draft ContexMenu "
                                   "failed, "
                                   "Draft will not work as expected.\n")
    def Activated(self):
        from bimEdit import hideAttribute
        self.name = translate("draft","bimRotate", utf8_decode=True)
        Modifier.Activated(self,self.name)
        self.ghost = {}
        for typ in self.sel_dict:
            if typ not in self.ghost:
                self.ghost.update({typ:[]})
            for o in self.sel_dict[typ]:
                self.ghost[typ].append(o.ghost[typ])
        self.arctrack = None

        ## Proceeding
        if self.call:
            self.view.removeEventCallback("SoEvent",self.call)
        self.step = 0
        self.center = None
        self.ui.arcUi()
        self.ui.modUi()
        self.ui.setTitle("Rotate")
        self.arctrack = arcTracker()
        self.call = self.view.addEventCallback("SoEvent",self.action)

        msg(translate("draft", "Pick rotation center:")+"\n")
 def numericInput(self,numx,numy,numz):
     "this function gets called by the toolbar when valid x, y, and z \
             have been entered there"
     self.center = Vector(numx,numy,numz)
     self.node = [self.center]
     self.arctrack.setCenter(self.center)
     if self.ghost:
         for typ in self.ghost:
             if typ == 'toEdit' or typ == 'dirDeps':
                 for g in [i for i in self.ghost[typ]]:
                     g.center(self.center)
     self.ui.radiusUi()
     self.ui.hasFill.hide()
     self.ui.labelRadius.setText("Base angle")
     self.step = 1
     msg(translate("draft", "Pick base angle:")+"\n")
 def numericRadius(self,rad):
     "this function gets called by the toolbar when valid radius have been entered there"
     if (self.step == 1):
         self.ui.labelRadius.setText("Rotation")
         self.firstangle = math.radians(rad)
         self.arctrack.setStartAngle(self.firstangle)
         self.arctrack.on()
         if self.ghost:
             for typ in self.ghost:
                 if typ == 'toEdit' or typ == 'dirDeps':
                     for g in [i for i in self.ghost[typ]]:
                         g.on()
         self.step = 2
         msg(translate("draft", "Pick rotation angle:")+"\n")
     else:
         self.rot(math.radians(rad),self.ui.isCopy.isChecked())
         self.finish(cont=True)
Beispiel #26
0
def makeShell(L=1000,W=1500,H=1500,thk1=6,thk2=8):
  '''
  makeShell(L,W,H,thk1,thk2)
  Adds the shell of a tank, given
    L(ength):        default=800
    W(idth):         default=400
    H(eight):        default=500
    thk (thickness): default=6
  '''
  a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython",translate("Part::FeaturePython","Tank"))
  pFeatures.Shell(a,L,W,H,thk1,thk2)
  a.ViewObject.Proxy=0
  a.Placement.Base=FreeCAD.Vector(0,0,0)
  a.ViewObject.ShapeColor=0.0,0.0,1.0
  a.ViewObject.Transparency=85
  FreeCAD.ActiveDocument.recompute()
  return a
Beispiel #27
0
 def ContextMenu(self, recipient):
     """Define an optional custom context menu."""
     from DraftGui import translate
     if recipient == "View":
         if FreeCAD.activeDraftCommand is None:
             if FreeCADGui.Selection.getSelection():
                 self.appendContextMenu("Draft", self.drawing_commands + self.modification_commands)
                 self.appendContextMenu("Utilities", self.context_commands)
             else:
                 self.appendContextMenu("Draft", self.drawing_commands)
         else:
             if FreeCAD.activeDraftCommand.featureName == translate("draft","Line"):
                 # BUG: line subcommands are not usable while another command is active
                 self.appendContextMenu("", self.line_commands)
     else:
         if FreeCADGui.Selection.getSelection():
             self.appendContextMenu("Utilities", self.context_commands)
 def action(self,arg):
     "scene event handler"
     if arg["Type"] == "SoKeyboardEvent":
         if arg["Key"] == "ESCAPE":
             self.finish()
     elif arg["Type"] == "SoLocation2Event": #mouse movement detection
         #if self.ghost:
         #    self.ghost.off()
         self.point,ctrlPoint,info = getPoint(self,arg)
         if (len(self.node) > 0):
             last = self.node[len(self.node)-1]
             delta = self.point.sub(last)
             if self.ghost:
                 for typ in self.ghost:
                     if typ == 'toEdit' or typ == 'dirDeps':
                         for g in [i for i in self.ghost[typ]]:
                             g.move(delta)
                             g.on()
         if self.extendedCopy:
             if not hasMod(arg,MODALT): self.finish()
         redraw3DView()
     elif arg["Type"] == "SoMouseButtonEvent":
         if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"):
             if self.point:
                 self.ui.redraw()
                 if (self.node == []):
                     self.node.append(self.point)
                     self.ui.isRelative.show()
                     if self.ghost:
                         for typ in self.ghost:
                             if typ == 'toEdit' or typ == 'dirDeps':
                                 for g in [i for i in self.ghost[typ]]:
                                     g.on()
                     msg(translate("draft", "Pick end point:")+"\n")
                     if self.planetrack:
                         self.planetrack.set(self.point)
                 else:
                     last = self.node[0]
                     if self.ui.isCopy.isChecked() or hasMod(arg,MODALT):
                         self.move(self.point.sub(last),True)
                     else:
                         self.move(self.point.sub(last))
                     if hasMod(arg,MODALT):
                         self.extendedCopy = True
                     else:
                         self.finish(cont=True)
    def move(self,delta,copy=False):
        "moving the real shape's bases"
        FreeCADGui.addModule("Draft")
        sel_to_edit = [o for typ in self.sel_dict \
                for o in self.sel_dict[typ] if typ == 'toEdit']
        if copy:
            obj_to_edit = replica(sel_to_edit)
        else:
            obj_to_edit = [s.obj for s in sel_to_edit]

        sel = '['
        for o in obj_to_edit:
            if len(sel) > 1:
                sel += ','
            sel += 'FreeCAD.ActiveDocument.' + o.Name
        sel += ']'

        self.commit(translate("draft","Move"),
            ['Draft.move('+sel+','+DraftVecUtils.toString(delta)+ \
                ',copy=False)', 'FreeCAD.ActiveDocument.recompute()'])
 def numericInput(self,numx,numy,numz):
     "this function gets called by the toolbar when valid x, y, and z \
             have been entered there"
     self.point = Vector(numx,numy,numz)
     if not self.node:
         self.node.append(self.point)
         self.ui.isRelative.show()
         self.ui.isCopy.show()
         for typ in self.ghost:
             if typ == 'toEdit' or typ == 'dirDeps':
                 for g in [i for i in self.ghost[typ]]:
                     g.on()
         msg(translate("draft", "Pick end point:")+"\n")
     else:
         last = self.node[-1]
         if self.ui.isCopy.isChecked():
             self.move(self.point.sub(last),True)
         else:
             self.move(self.point.sub(last))
         self.finish()
    def rot (self,angle,copy=False):
        "rotating the real shapes'bases"
        FreeCADGui.addModule("Draft")
        sel_to_edit = [o for typ in self.sel_dict \
                for o in self.sel_dict[typ] if typ == 'toEdit']
        if copy:
            obj_to_edit = replica(sel_to_edit)
        else:
            obj_to_edit = [s.obj for s in sel_to_edit]

        sel = '['
        for o in obj_to_edit:
            if len(sel) > 1:
                sel += ','
            sel += 'FreeCAD.ActiveDocument.'+o.Name
        sel += ']'
            
        self.commit(translate("draft","Rotate"),
            ['Draft.rotate('+sel+','+str(math.degrees(angle))+','+ \
                    DraftVecUtils.toString(self.center)+',axis='+ \
                    DraftVecUtils.toString(plane.axis)+',copy=False)'])