示例#1
0
def OriTransform():
    if cad.GetNumSelected() == 0:
        wx.GetApp().PickObjects('Pick objects to transform')

    if cad.GetNumSelected() == 0:
        return

    config = HeeksConfig()

    selected_items = cad.GetSelectedObjects()

    cad.ClearSelection(False)

    o1 = PickOrigin('Pick From Origin')
    if o1 == None:
        wx.MessageBox("You didn't pick an origin\nTransform Cancelled!")
        return

    o2 = PickOrigin('Pick To Origin')
    if o2 == None:
        wx.MessageBox("You didn't pick an origin\nTransform Cancelled!")
        return

    cad.StartHistory()

    m1 = o1.GetOrigin()
    mat = m1.Inverse()
    m2 = o2.GetOrigin()
    mat.Multiply(m2)
    for object in selected_items:
        cad.TransformUndoably(object, mat)

    cad.EndHistory()
示例#2
0
 def RotateToFace(self, object):
     n = self.context_face_plane.normal
     p = n * (-self.context_face_plane.d)
     x, y = n.ArbitraryAxes()
     face_matrix = geom.Matrix(p, x, y)
     inv_matrix = face_matrix.Inverse()
     cad.StartHistory()
     selected = cad.GetSelectedObjects()
     # if any objects are selected, move them
     if len(selected) > 0:
         for object in selected:
             cad.TransformUndoably(object, inv_matrix)
     else:
         # move the solid
         parent_body = object.GetParentBody()
         cad.TransformUndoably(parent_body, inv_matrix)
     cad.EndHistory()
示例#3
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()
示例#4
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()
示例#5
0
def Rotate(copy=False):
    #rotation axis - Z axis by default
    axis_Dir = geom.Point3D(0, 0, 1)
    line_Pos = geom.Point3D(0, 0, 0)

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

    if cad.GetNumSelected() == 0:
        return

    config = HeeksConfig()
    ncopies = None
    if copy:
        ncopies = config.ReadInt('RotateNumCopies', 1)
        RemoveUncopyable()
        if cad.GetNumSelected() == 0:
            return

    selected_items = cad.GetSelectedObjects()

    cad.ClearSelection(False)

    angle = config.ReadFloat('RotateAngle', 90.0)

    # enter angle, plane and position

    axis = geom.Point3D(0, 0, 1)
    pos = geom.Point3D(0, 0, 0)
    axis.x = config.ReadFloat("RotateAxisX", 0.0)
    axis.y = config.ReadFloat("RotateAxisY", 0.0)
    axis.z = config.ReadFloat("RotateAxisZ", 1.0)
    pos.x = config.ReadFloat("RotatePosX", 0.0)
    pos.y = config.ReadFloat("RotatePosY", 0.0)
    pos.z = config.ReadFloat("RotatePosZ", 0.0)

    axial_shift = config.ReadFloat('RotateAxialShift', 0.0)

    result, angle, axis, pos, ncopies, axial_shift = InputAngleWithPlane(
        angle, axis, pos, ncopies, axial_shift, 'Rotate')
    if not result:
        return

    if copy:
        if ncopies < 1:
            return
        config.WriteInt("RotateNumCopies", ncopies)

    config.WriteFloat("RotateAngle", angle)
    config.WriteFloat("RotateAxialShift", axial_shift)
    config.WriteFloat("RotateAxisX", axis.x)
    config.WriteFloat("RotateAxisY", axis.y)
    config.WriteFloat("RotateAxisZ", axis.z)
    config.WriteFloat("RotatePosX", pos.x)
    config.WriteFloat("RotatePosY", pos.y)
    config.WriteFloat("RotatePosZ", pos.z)

    cad.StartHistory()

    if copy:
        for i in range(0, ncopies):
            mat = geom.Matrix()
            mat.Translate(-pos)
            mat.RotateAxis(angle * 0.0174532925199433 * (i + 1), axis)
            mat.Translate(pos)
            for object in selected_items:
                new_object = object.MakeACopy()
                object.GetOwner().Add(new_object)
                cad.TransformUndoably(new_object, mat)
    else:
        mat = geom.Matrix()
        mat.Translate(-pos)
        mat.RotateAxis(angle * 0.0174532925199433, axis)
        mat.Translate(pos)
        for object in selected_items:
            cad.TransformUndoably(object, mat)

    cad.EndHistory()
示例#6
0
def Translate(copy=False):
    if cad.GetNumSelected() == 0:
        wx.GetApp().PickObjects('Pick objects to move')

    if cad.GetNumSelected() == 0:
        return

    config = HeeksConfig()
    ncopies = None
    if copy:
        ncopies = config.ReadInt('TranslateNumCopies', 1)
        RemoveUncopyable()
        if cad.GetNumSelected() == 0:
            return

    selected_items = cad.GetSelectedObjects()

    cad.ClearSelection(False)

    fromp = geom.Point3D()
    to = geom.Point3D()

    fromp.x = config.ReadFloat("TranslateFromX", 0.0)
    fromp.y = config.ReadFloat("TranslateFromY", 0.0)
    fromp.z = config.ReadFloat("TranslateFromZ", 0.0)
    to.x = config.ReadFloat("TranslateToX", 0.0)
    to.y = config.ReadFloat("TranslateToY", 0.0)
    to.z = config.ReadFloat("TranslateToZ", 0.0)

    result, fromp, to, ncopies = InputFromAndTo(fromp, to, ncopies,
                                                'Move Translate')
    if not result:
        return

    if copy:
        if ncopies < 1:
            return
        config.WriteInt("TranslateNumCopies", ncopies)

    config.WriteFloat("TranslateFromX", fromp.x)
    config.WriteFloat("TranslateFromY", fromp.y)
    config.WriteFloat("TranslateFromZ", fromp.z)
    config.WriteFloat("TranslateToX", to.x)
    config.WriteFloat("TranslateToY", to.y)
    config.WriteFloat("TranslateToZ", to.z)

    cad.StartHistory()

    if copy:
        for i in range(0, ncopies):
            mat = geom.Matrix()
            mat.Translate((to - fromp) * (i + 1))
            for object in selected_items:
                new_object = object.MakeACopy()
                object.GetOwner().Add(new_object)
                cad.TransformUndoably(new_object, mat)
    else:
        mat = geom.Matrix()
        mat.Translate(to - fromp)
        for object in selected_items:
            cad.TransformUndoably(object, mat)

    cad.EndHistory()