Skip to content
Snippets Groups Projects
createMesh.py 63.4 KiB
Newer Older
  • Learn to ignore specific revisions
  •     elif props.bf_Head_Type =='bf_Head_Dome':
    
    Brendon Murphy's avatar
    Brendon Murphy committed
            Head_Verts,Head_Faces,Head_Height = Create_Dome_Head(Bit_Dia,props.bf_Dome_Head_Dia,props.bf_Shank_Dia,props.bf_Hex_Head_Height,1,1,0)
    
    
        elif props.bf_Head_Type == 'bf_Head_Pan':
    
    Brendon Murphy's avatar
    Brendon Murphy committed
            Head_Verts,Head_Faces,Head_Height = Create_Pan_Head(Bit_Dia,props.bf_Pan_Head_Dia,props.bf_Shank_Dia,props.bf_Hex_Head_Height,1,1,0)
    
    
        elif props.bf_Head_Type == 'bf_Head_CounterSink':
    
            Head_Verts,Head_Faces,Head_Height = Create_CounterSink_Head(Bit_Dia,props.bf_CounterSink_Head_Dia,props.bf_Shank_Dia,props.bf_CounterSink_Head_Dia,props.bf_CounterSink_Head_Dia*(0.09/6.31))
    #Head_Verts,Head_Faces,Head_Height = Create_CounterSink_Head(Bit_Dia,props.bf_CounterSink_Head_Dia,props.bf_Shank_Dia,props.bf_CounterSink_Head_Dia,props.bf_CounterSink_Head_Dia*(1.0/19.0))
    
    Brendon Murphy's avatar
    Brendon Murphy committed
    
        Face_Start = len(verts)
        verts.extend(Move_Verts_Up_Z(Bit_Verts,Head_Height))
        faces.extend(Copy_Faces(Bit_Faces,Face_Start))
    
        Face_Start = len(verts)
        verts.extend(Move_Verts_Up_Z(Head_Verts,Head_Height))
        faces.extend(Copy_Faces(Head_Faces,Face_Start))
    
        Face_Start = len(verts)
        Thread_Verts,Thread_Faces,Thread_Height = Create_External_Thread(props.bf_Shank_Dia,props.bf_Shank_Length,props.bf_Minor_Dia,props.bf_Major_Dia,props.bf_Pitch,props.bf_Thread_Length,props.bf_Crest_Percent,props.bf_Root_Percent)
    
        verts.extend(Move_Verts_Up_Z(Thread_Verts,00))
        faces.extend(Copy_Faces(Thread_Faces,Face_Start))
    
    Brendon Murphy's avatar
    Brendon Murphy committed
        return Move_Verts_Up_Z(verts,Thread_Height),faces
    
    
    Aaron Keith's avatar
    Aaron Keith committed
    # calculates the matrix for the new object
    # depending on user pref
    def align_matrix(context):
        loc = Matrix.Translation(context.scene.cursor_location)
        obj_align = context.user_preferences.edit.object_align
        if (context.space_data.type == 'VIEW_3D'
            and obj_align == 'VIEW'):
    
            rot = context.space_data.region_3d.view_matrix.to_3x3().inverted().to_4x4()
    
    Aaron Keith's avatar
    Aaron Keith committed
        else:
            rot = Matrix()
        align_matrix = loc * rot
        return align_matrix
    
    
    # Create a new mesh (object) from verts/edges/faces.
    # verts/edges/faces ... List of vertices/edges/faces for the
    #                       new mesh (as used in from_pydata).
    # name ... Name of the new mesh (& object).
    # edit ... Replace existing mesh data.
    # Note: Using "edit" will destroy/delete existing mesh data.
    def create_mesh_object(context, verts, edges, faces, name, edit, align_matrix):
        scene = context.scene
        obj_act = scene.objects.active
    
        # Can't edit anything, unless we have an active obj.
        if edit and not obj_act:
            return None
    
        # Create new mesh
        mesh = bpy.data.meshes.new(name)
    
        # Make a mesh from a list of verts/edges/faces.
        mesh.from_pydata(verts, edges, faces)
    
        # Update mesh geometry after adding stuff.
    
        # Deselect all objects when in object mode
        if bpy.ops.object.select_all.poll():
            bpy.ops.object.select_all(action='DESELECT')
    
    Aaron Keith's avatar
    Aaron Keith committed
    
        if edit:
            # Replace geometry of existing object
    
            # Use the active obj and select it.
            ob_new = obj_act
            ob_new.select = True
    
            if obj_act.mode == 'OBJECT':
                # Get existing mesh datablock.
                old_mesh = ob_new.data
    
                # Set object data to nothing
                ob_new.data = None
    
                # Clear users of existing mesh datablock.
                old_mesh.user_clear()
    
                # Remove old mesh datablock if no users are left.
                if (old_mesh.users == 0):
                    bpy.data.meshes.remove(old_mesh)
    
                # Assign new mesh datablock.
                ob_new.data = mesh
    
        else:
            # Create new object
            ob_new = bpy.data.objects.new(name, mesh)
    
            # Link new object to the given scene and select it.
            scene.objects.link(ob_new)
            ob_new.select = True
    
            # Place the object at the 3D cursor location.
            # apply viewRotaion
            ob_new.matrix_world = align_matrix
    
        if obj_act and obj_act.mode == 'EDIT':
            if not edit:
                # We are in EditMode, switch to ObjectMode.
                bpy.ops.object.mode_set(mode='OBJECT')
    
                # Select the active object as well.
                obj_act.select = True
    
                # Apply location of new object.
                scene.update()
    
                # Join new object into the active.
                bpy.ops.object.join()
    
                # Switching back to EditMode.
                bpy.ops.object.mode_set(mode='EDIT')
    
                ob_new = obj_act
    
        else:
            # We are in ObjectMode.
            # Make the new object the active one.
            scene.objects.active = ob_new
    
        return ob_new
    
    
    Brendon Murphy's avatar
    Brendon Murphy committed
    
    def Create_New_Mesh(props, context, align_matrix):
    
        verts = []
        faces = []
    
    Campbell Barton's avatar
    Campbell Barton committed
        # sMeshName =''  # UNUSED
    
    Brendon Murphy's avatar
    Brendon Murphy committed
        sObjName =''
    
    Brendon Murphy's avatar
    Brendon Murphy committed
        if props.bf_Model_Type == 'bf_Model_Bolt':
            #print('Create Bolt')
            verts, faces = Bolt_Mesh(props, context)
    
    Campbell Barton's avatar
    Campbell Barton committed
            # sMeshName = 'Bolt'  # UNUSED
    
    Brendon Murphy's avatar
    Brendon Murphy committed
            sObjName = 'Bolt'
    
    Brendon Murphy's avatar
    Brendon Murphy committed
        if props.bf_Model_Type == 'bf_Model_Nut':
            #print('Create Nut')
            verts, faces = Nut_Mesh(props, context)
    
    Campbell Barton's avatar
    Campbell Barton committed
            # sMeshName = 'Nut'  # UNUSED
    
    Brendon Murphy's avatar
    Brendon Murphy committed
            sObjName = 'Nut'
    
    
    Brendon Murphy's avatar
    Brendon Murphy committed
        verts, faces = RemoveDoubles(verts, faces)
    
    Brendon Murphy's avatar
    Brendon Murphy committed
        verts = Scale_Mesh_Verts(verts,GLOBAL_SCALE)
    
    Aaron Keith's avatar
    Aaron Keith committed
        obj = create_mesh_object(context, verts, [], faces,sObjName,
                props.edit, align_matrix)
    
    Campbell Barton's avatar
    Campbell Barton committed
        return obj