Beispiel #1
0
    def load_default(self):
        self.Clear()

        try:
            cad.OpenXmlFile(wx.GetApp().cam_dir + "/default.tooltable", self)
        except:
            # no default file found, add 2 tools
            cad.AddUndoably(
                Tool(diameter=3.0, type=TOOL_TYPE_SLOTCUTTER, tool_number=1),
                self, None)
            cad.AddUndoably(
                Tool(diameter=6.0, type=TOOL_TYPE_SLOTCUTTER, tool_number=2),
                self, None)
            return
Beispiel #2
0
 def EditAndAddSketchOp(self, new_object, sketches):
     if new_object.Edit():
         cad.StartHistory('Add ' + new_object.GetTitle())
         cad.AddUndoably(new_object, self.program.operations, None)
         
         first = True
         for sketch in sketches:
             if first:
                 first = False
             else:
                 copy = new_object.MakeACopy()
                 copy.sketch = sketch
                 cad.AddUndoably(copy, self.program.operations, None)
         
         self.EndHistory()
Beispiel #3
0
 def SketchOperation(self, mode):
     objects_to_delete = []
     area = None
     
     for object in cad.GetSelectedObjects():
         t = object.GetType()
         if t == cad.OBJECT_TYPE_SKETCH:
             objects_to_delete.append(object)
             sketch = object
             sketch.__class__ = cad.Sketch
             a = sketch.GetArea()
             if area == None:
                 area = a
             else:
                 if mode == SKETCH_OP_UNION:
                     area.Union(a)
                 elif mode == SKETCH_OP_SUBTRACT:
                     area.Subtract(a)
                 elif mode == SKETCH_OP_INTERSECT:
                     area.Intersect(a)                         
                 
     if area != None:
         cad.StartHistory()
         sketch = cad.NewSketchFromArea(area)
         cad.AddUndoably(sketch)
         cad.DeleteObjectsUndoably(objects_to_delete)
         cad.EndHistory()
Beispiel #4
0
 def GetOwnerForDrawingObjects(self):
     if self.add_to_sketch:
         if self.container == None:
             self.container = cad.NewSketch()
             cad.AddUndoably(self.container)
         return self.container
     return cad.GetApp()
Beispiel #5
0
 def AddObjectFromButton(self, new_object):
     cad.StartHistory()
     cad.AddUndoably(new_object, None, None)
     cad.ClearSelection(True)
     cad.Select(new_object)
     self.SetInputMode(self.select_mode)
     cad.EndHistory()
     cad.Repaint()
Beispiel #6
0
 def SplitSketch(self, object):
     sketch = object
     sketch.__class__ = cad.Sketch
     new_sketches = sketch.Split()
     cad.StartHistory()
     cad.DeleteUndoably(object)
     for sketch in new_sketches:
         cad.AddUndoably(sketch, object.GetOwner(), None)
     cad.EndHistory()
Beispiel #7
0
def Mirror():
    if cad.GetNumSelected() == 0:
        wx.GetApp().PickObjects('Pick objects to mirror')

    if cad.GetNumSelected() == 0:
        return

    config = HeeksConfig()

    selected_items = cad.GetSelectedObjects()

    cad.ClearSelection(False)

    copy = config.ReadBool("MirrorCopy", False)
    axis = geom.Point3D(0, 0, 1)
    pos = geom.Point3D(0, 0, 0)
    axis.x = config.ReadFloat("MirrorAxisX", 1.0)
    axis.y = config.ReadFloat("MirrorAxisY", 0.0)
    axis.z = config.ReadFloat("MirrorAxisZ", 0.0)
    pos.x = config.ReadFloat("MirrorPosX", 0.0)
    pos.y = config.ReadFloat("MirrorPosY", 0.0)
    pos.z = config.ReadFloat("MirrorPosZ", 0.0)

    result, axis, pos, copy = InputMirrorPlane(axis, pos, copy, 'Mirror')
    if not result:
        return

    config.WriteBool("MirrorCopy", copy)
    config.WriteFloat("MirrorAxisX", axis.x)
    config.WriteFloat("MirrorAxisY", axis.y)
    config.WriteFloat("MirrorAxisZ", axis.z)
    config.WriteFloat("MirrorPosX", pos.x)
    config.WriteFloat("MirrorPosY", pos.y)
    config.WriteFloat("MirrorPosZ", pos.z)

    cad.StartHistory()

    mat = geom.Matrix()
    x, y = axis.ArbitraryAxes()
    axis_mat = geom.Matrix(pos, x, y)
    inv_mat = axis_mat.Inverse()
    mat.Multiply(inv_mat)  # transform so axis goes to z axis
    mat.Scale3(1.0, 1.0, -1.0)  # mirror in z axis
    mat.Multiply(axis_mat)  # transform back to where it was
    for object in selected_items:
        if copy:
            if object.CanBeCopied():
                object = object.MakeACopy()
                object.Transform(mat)
                cad.AddUndoably(object)
        else:
            cad.TransformUndoably(object, mat)

    cad.EndHistory()
Beispiel #8
0
 def FitArcs(self, object):
     value = self.InputLength('Set tolerance for Fit Arcs', 'tolerance', geom.get_accuracy())
     if value != None:
         geom.set_accuracy(value)
         sketch = object
         sketch.__class__ = cad.Sketch
         curve = sketch.GetCurve()
         curve.FitArcs()
         cad.StartHistory()
         cad.DeleteUndoably(object)
         cad.AddUndoably(cad.NewSketchFromCurve(curve))
         cad.EndHistory()        
Beispiel #9
0
    def NewStock(self, e):
        solids = []
        for object in cad.GetSelectedObjects():
            if object.GetIDGroupType() == cad.OBJECT_TYPE_STL_SOLID:
                solids.append(object.GetID())

        new_object = Stock.Stock()
        new_object.solids += solids
        new_object.SetID(cad.GetNextID(Stock.type))
        if new_object.Edit():
            cad.AddUndoably(new_object, self.program.stocks, None)
            self.EndHistory()
Beispiel #10
0
 def OnSpline(self, e):
     if not self.CheckForNumberOrMore(
             2, [cad.OBJECT_TYPE_POINT],
             'Pick one or more points to make a spline through',
             'Spline Through Points'):
         return
     cad.StartHistory()
     points = []
     for object in cad.GetSelectedObjects():
         points.append(object.GetStartPoint())
     new_object = step.NewSplineFromPoints(points)
     cad.AddUndoably(new_object)
     cad.EndHistory()
Beispiel #11
0
 def OffsetSketch(self, object):
     config = HeeksConfig()
     value = config.ReadFloat('SketchOffsetValue', 1.0)
     value = self.InputLength('Offset Sketch', 'Offset Value +ve for Outwards -ve for Inwards', value)
     if value == None: return
     sketch = object
     sketch.__class__ = cad.Sketch
     area = sketch.GetArea()
     area.Reorder()
     area.Offset(-value)
     new_object = cad.NewSketchFromArea(area)
     cad.AddUndoably(new_object)
     cad.ClearSelection()
     cad.Select(new_object)
Beispiel #12
0
def Scale():
    centre_Pos = geom.Point3D(0, 0, 0)

    if cad.GetNumSelected() == 0:
        wx.GetApp().PickObjects('Pick objects to scale')

    if cad.GetNumSelected() == 0:
        return

    config = HeeksConfig()

    selected_items = cad.GetSelectedObjects()

    cad.ClearSelection(False)

    scale_factor = config.ReadFloat('ScaleFactor', 1.0)
    copy = config.ReadBool("ScaleCopy", False)
    pos = geom.Point3D(0, 0, 0)
    pos.x = config.ReadFloat("ScaleAboutPosX", 0.0)
    pos.y = config.ReadFloat("ScaleAboutPosY", 0.0)
    pos.z = config.ReadFloat("ScaleAboutPosZ", 0.0)

    result, pos, scale_factor, copy = InputScale(pos, scale_factor, copy,
                                                 'Scale')
    if not result:
        return

    config.WriteFloat("ScaleFactor", scale_factor)
    config.WriteBool("ScaleCopy", copy)
    config.WriteFloat("ScaleAboutPosX", pos.x)
    config.WriteFloat("ScaleAboutPosY", pos.y)
    config.WriteFloat("ScaleAboutPosZ", pos.z)

    cad.StartHistory()

    mat = geom.Matrix()
    mat.Translate(-pos)
    mat.Scale(scale_factor)
    mat.Translate(pos)
    for object in selected_items:
        if copy:
            if object.CanBeCopied():
                object = object.MakeACopy()
                object.Transform(mat)
                cad.AddUndoably(object)
        else:
            cad.TransformUndoably(object, mat)

    cad.EndHistory()
Beispiel #13
0
 def MakeToSketch(self):
     objects_to_delete = []
     sketch = cad.NewSketch()
     
     for object in cad.GetSelectedObjects():
         t = object.GetType()
         if object.CanAddTo(sketch):
             new_object = object.MakeACopy()
             objects_to_delete.append(object)
             sketch.Add(new_object)
     
     cad.StartHistory()
     cad.AddUndoably(sketch)
     cad.DeleteObjectsUndoably(objects_to_delete)
     cad.EndHistory()
Beispiel #14
0
 def AddProgramIfThereIsntOne(self):
     # check if there is already a program in the document
     doc = cad.GetApp()
     object = doc.GetFirstChild()
     while object != None:
         if object.GetType() == Program.type:
             self.program = object
             return
         object = doc.GetNextChild()
     
     # add a program
     self.program = Program.Program()
     programs.append(self.program)
     self.program.add_initial_children()        
     cad.AddUndoably(self.program)
Beispiel #15
0
    def OnSetOriginPoints(self, three_points):
        mat = cad.GetDrawMatrix(False)
        o = geom.Point3D(0,0,0).Transformed(mat)
        x = geom.Point3D(1,0,0).Transformed(mat) - o
        y = geom.Point3D(0,1,0).Transformed(mat) - o
        new_object = cad.NewCoordinateSystem("Coordinate System", o, x, y)
        cad.ClearSelection()
        self.SetInputMode(self.select_mode)

        # and pick from three points
        result = self.MakeOriginFromPickPoints(new_object, three_points)
        if result:
            cad.AddUndoably(new_object)
            cad.Select(new_object)
        else:
            cad.DeleteInternalObject(new_object)
Beispiel #16
0
 def OnShadow(self, event):
     if not self.CheckForNumberOrMore(
             1, [step.GetSolidType(), cad.OBJECT_TYPE_STL_SOLID],
             'Pick one or more solids to make a shadow sketch from',
             'Shadow Sketch of Solids'):
         return
     accuracy = self.InputLength('Enter Shadow Accuracy', 'Accuracy',
                                 geom.get_accuracy())
     if accuracy:
         cad.StartHistory()
         geom.set_accuracy(accuracy)
         for object in cad.GetSelectedObjects():
             stl = object.GetTris(accuracy)
             mat = geom.Matrix()
             shadow = stl.Shadow(mat, False)
             #shadow.Reorder()
             sketch = cad.NewSketchFromArea(shadow)
             cad.AddUndoably(sketch)
         cad.EndHistory()
Beispiel #17
0
 def EditAndAddOp(self, op):
     if op.Edit():
         cad.StartHistory('Add ' + op.GetTitle())
         cad.AddUndoably(op, op.PreferredPasteTarget(), None)
         self.EndHistory()
Beispiel #18
0
 def OnGear(self, e):
     gear = Gear.Gear(1.0, 12)
     cad.AddUndoably(gear, None, None)
Beispiel #19
0
 def OnText(self, e):
     cad.AddUndoably(cad.NewText("text"))
Beispiel #20
0
 def FaceToSketch(self, object):
     sketch = step.NewSketchFromFace(object)
     cad.AddUndoably(sketch)
     cad.Select(sketch)
Beispiel #21
0
def ImportImageFile():
    image = HImage.HImage(cad.GetFilePathForImportExport())
    cad.AddUndoably(image)
Beispiel #22
0
 def EditAndAddTool(self, tool):
     if tool.Edit():
         cad.StartHistory('Add Tool')
         cad.AddUndoably(tool, self.program.tools, None)
         self.EndHistory()
Beispiel #23
0
 def FaceRadiusChange(self, object):
     sketch = step.NewSketchFromFace(object)
     cad.AddUndoably(sketch)
     cad.Select(sketch)
Beispiel #24
0
 def OnWing(self, e):
     o = Wing()
     wings.append(o)
     cad.AddUndoably(o, None, None)
Beispiel #25
0
    def OnMouse(self, event):
        # to do? if(wxGetApp().m_property_grid_validation)return;
        if event.Entering():
            self.SetFocus()  # so middle wheel works

        if event.LeftDown():
            button = self.HitTest(event.GetPosition())

            if button:
                if button.type == ButtonTypePlus or button.type == ButtonTypeMinus:
                    self.SetExpanded(button.obj, button.type == ButtonTypePlus)
                    self.SetVirtualSize(self.GetRenderSize())
                    self.Refresh()
                else:
                    self.OnLabelLeftDown(button.obj, event)
                    self.clicked_object = button.obj
            else:
                cad.ClearSelection(True)

            self.button_down_point = event.GetPosition()

        if event.LeftUp():
            if self.dragging:
                self.dragging = False

                # find the object to drop on to
                button = self.HitTest(event.GetPosition())

                if (button == None) or not cad.ObjectMarked(
                        button.obj
                ):  # can only drop on to an item other than one of the items being dragged
                    # test drop possible
                    drag_possible = True

                    add_to = cad.GetApp()
                    if button and button.paste_into: add_to = button.paste_into
                    for object in self.dragged_list:
                        if not add_to.CanAdd(object) or not object.CanAddTo(
                                add_to):
                            drag_possible = False
                            break

                    if drag_possible:
                        cad.StartHistory()

                        # cut the objects
                        cad.DeleteObjectsUndoably(self.dragged_list)

                        # paste the objects
                        for object in self.dragged_list:
                            if object.OneOfAKind():
                                one_found = False
                                child = add_to.GetFirstChild()
                                while child:
                                    if child.GetType() == object.GetType():
                                        child.CopyFrom(object)
                                        one_found = True
                                        break

                                    child = add_to.GetNextChild()

                                if not one_found:
                                    cad.AddUndoably(
                                        object, add_to, button.paste_before if
                                        (button != None) else None)
                            else:
                                cad.AddUndoably(
                                    object, add_to, button.paste_before if
                                    (button != None) else None)

                        cad.EndHistory()
                    else:
                        self.Refresh()
                else:
                    self.Refresh()
            else:
                if self.waiting_until_left_up:
                    cad.ClearSelection(False)
                    cad.Select(self.clicked_object, True)
            self.waiting_until_left_up = False

        if event.RightDown():
            button = self.HitTest(event.GetPosition())
            self.clicked_object = None
            if (button != None) and (button.type == ButtonTypeLabelBefore
                                     or button.type == ButtonTypeLabel):
                self.clicked_object = button.obj
                self.OnLabelRightDown(button.obj, event)

        if event.RightUp():
            if self.dragging:
                self.dragging = False
            else:
                tools = self.GetDropDownTools(event.ControlDown())
                menu = wx.Menu()
                for tool in tools:
                    wx.GetApp().AddToolToListAndMenu(tool, menu)
                self.PopupMenu(menu, event.GetPosition())

        if event.Dragging():
            if event.LeftIsDown() or event.RightIsDown():
                if (not self.dragging) and (
                        math.fabs(self.button_down_point.x - event.GetX()) > 2
                        or math.fabs(self.button_down_point.y - event.GetY()) >
                        2):
                    self.dragging = True
                    self.dragged_list = cad.GetSelectedObjects()

            if self.dragging:
                self.drag_position = self.CalcUnscrolledPosition(
                    event.GetPosition())
                button = self.HitTest(event.GetPosition())
                self.drag_paste_rect = wx.Rect(0, 0, 0, 0)
                if (button != None) and (button.type == ButtonTypeLabelBefore):
                    self.drag_paste_rect = button.rect
                self.Refresh()

        if event.LeftDClick():
            if self.clicked_object:
                wx.GetApp().EditUndoably(self.clicked_object)

        event.Skip()
Beispiel #26
0
 def AddObjectsMade(self):
     for object in self.temp_object_in_list:
         cad.AddUndoably(object, self.GetOwnerForDrawingObjects())
     if self.DragDoneWithXOR():cad.DrawObjectsOnFront(self.temp_object_in_list, True)
     self.temp_object_in_list = []