示例#1
0
    def appliance_drop(self, context, event):
        selected_point, selected_obj = utils.get_selection_point(
            context, event)
        bpy.ops.object.select_all(action='DESELECT')
        sel_assembly_bp = utils.get_assembly_bp(selected_obj)

        if sel_assembly_bp:
            selected_assembly = fd_types.Assembly(sel_assembly_bp)
            self.assembly.obj_bp.parent = selected_assembly.obj_bp.parent
            self.assembly.obj_bp.location = selected_assembly.obj_bp.location
            self.assembly.obj_z.location.z = selected_assembly.obj_z.location.z
            self.assembly.obj_y.location.y = selected_assembly.obj_y.location.y
            self.assembly.obj_x.location.x = selected_assembly.obj_x.location.x
        else:
            self.assembly.obj_bp.parent = None
            self.assembly.obj_bp.location = selected_point

        if event.type == 'LEFTMOUSE' and event.value == 'PRESS':
            if sel_assembly_bp:
                selected_assembly = fd_types.Assembly(sel_assembly_bp)
                selected_assembly.replace(self.assembly)
            utils.set_wireframe(self.assembly.obj_bp, False)
            bpy.context.window.cursor_set('DEFAULT')
            bpy.ops.object.select_all(action='DESELECT')
            context.scene.objects.active = self.assembly.obj_bp
            self.assembly.obj_bp.select = True
            return {'FINISHED'}

        return {'RUNNING_MODAL'}
示例#2
0
    def sink_drop(self, context, event):
        selected_point, selected_obj = utils.get_selection_point(
            context, event)
        bpy.ops.object.select_all(action='DESELECT')
        sel_product_bp = utils.get_bp(selected_obj, 'PRODUCT')
        sel_assembly_bp = utils.get_assembly_bp(selected_obj)

        if sel_product_bp and sel_assembly_bp:
            product = fd_types.Assembly(sel_product_bp)
            if product:
                product_depth = math.fabs(product.obj_y.location.y)
                assembly_depth = math.fabs(self.assembly.obj_y.location.y)
                self.assembly.obj_bp.parent = product.obj_bp
                if product.obj_z.location.z < 0:
                    self.assembly.obj_bp.location.z = unit.inch(
                        1.5)  #SUSPENDED CABINETS
                else:
                    self.assembly.obj_bp.location.z = product.obj_z.location.z + unit.inch(
                        1.5)  #BASE CABINETS
                self.assembly.obj_bp.location.y = -math.fabs(
                    product_depth - assembly_depth) / 2
                self.assembly.obj_bp.location.x = product.obj_x.location.x / 2 - self.assembly.obj_x.location.x / 2

            if event.type == 'LEFTMOUSE' and event.value == 'PRESS':
                self.assign_boolean(selected_obj)
                utils.set_wireframe(self.assembly.obj_bp, False)
                bpy.context.window.cursor_set('DEFAULT')
                bpy.ops.object.select_all(action='DESELECT')
                context.scene.objects.active = self.assembly.obj_bp
                self.assembly.obj_bp.select = True
                return {'FINISHED'}

        return {'RUNNING_MODAL'}
    def execute(self, context):
        obj_bp = utils.get_assembly_bp(context.active_object)
        assembly = fd_types.Assembly(obj_bp)
        obj_bp = assembly.obj_bp
        dim_x = assembly.obj_x.location.x
        dim_y = assembly.obj_y.location.y
        dim_z = assembly.obj_z.location.z

        obj_mesh = utils.create_cube_mesh(self.mesh_name,
                                          (dim_x, dim_y, dim_z))

        if obj_mesh:
            obj_mesh.mv.name_object = self.mesh_name
            context.scene.objects.active = obj_mesh
            bpy.ops.object.editmode_toggle()
            bpy.ops.mesh.select_all(action='SELECT')
            bpy.ops.mesh.normals_make_consistent(inside=False)
            bpy.ops.object.editmode_toggle()
            if obj_bp:
                obj_mesh.parent = obj_bp

            update_vector_groups(obj_bp)
            bpy.ops.fd_assembly.load_active_assembly_objects(
                object_name=obj_bp.name)
        return {'FINISHED'}
示例#4
0
    def execute(self, context):
        obj_bp = utils.get_assembly_bp(context.active_object)

        #NOTE: Since Mesh hooks are maintained by object name
        #      You cannot have two emptyhooks with the same name.       
        for child in obj_bp.children:
            if child.type == 'EMPTY' and self.use_as_mesh_hook and child.mv.use_as_mesh_hook and child.mv.name_object == self.empty_name:
                bpy.ops.fd_general.error('INVOKE_DEFAULT',Message="A hook with that name already exists.")
                return {'CANCELLED'}
            
        #NOTE: Since Mesh hooks are maintained by object name
        #      These names are reserved the the visible prompts of the group
        if self.use_as_mesh_hook:
            if self.empty_name in {'Dimension X','Dimension Y','Dimension Z'}:
                bpy.ops.fd_general.error('INVOKE_DEFAULT',Message="That hook name are reserved for visible prompts")
                return {'CANCELLED'}
        
        bpy.ops.object.empty_add()
        obj_empty = context.active_object

        if obj_empty:
            obj_empty.empty_draw_size = unit.inch(1)
            obj_empty.mv.name_object = self.empty_name
            obj_empty.mv.use_as_mesh_hook = self.use_as_mesh_hook
            if obj_bp:
                obj_empty.parent = obj_bp
            
            context.scene.objects.active = obj_empty
            update_vector_groups(obj_bp)
            bpy.ops.fd_assembly.load_active_assembly_objects(object_name=obj_bp.name)
        return {'FINISHED'}
    def sink_drop(self,context,event):
        selected_point, selected_obj = utils.get_selection_point(context,event)
        bpy.ops.object.select_all(action='DESELECT')
        sel_product_bp = utils.get_bp(selected_obj,'PRODUCT')
        sel_assembly_bp = utils.get_assembly_bp(selected_obj)

        if sel_product_bp and sel_assembly_bp:
            product = fd_types.Assembly(sel_product_bp)
            if product:
                product_depth = math.fabs(product.obj_y.location.y)
                assembly_depth = math.fabs(self.assembly.obj_y.location.y)
                self.assembly.obj_bp.parent = product.obj_bp
                self.assembly.obj_bp.location.z = product.obj_z.location.z + unit.inch(1.5)
                self.assembly.obj_bp.location.y = -math.fabs(product_depth-assembly_depth)/2
                self.assembly.obj_bp.location.x = product.obj_x.location.x/2 - self.assembly.obj_x.location.x/2

            if event.type == 'LEFTMOUSE' and event.value == 'PRESS':
                self.assign_boolean(selected_obj)
                utils.set_wireframe(self.assembly.obj_bp,False)
                bpy.context.window.cursor_set('DEFAULT')
                bpy.ops.object.select_all(action='DESELECT')
                context.scene.objects.active = self.assembly.obj_bp
                self.assembly.obj_bp.select = True
                return {'FINISHED'}
        
        return {'RUNNING_MODAL'}
示例#6
0
 def poll(cls, context):
     obj = context.active_object
     obj_bp = utils.get_assembly_bp(obj)
     if obj_bp:
         return True
     else:
         return False
示例#7
0
 def execute(self, context):
     obj = context.object
     obj_bp = utils.get_assembly_bp(obj)
     if obj_bp:
         obj_list = []
         obj_list = utils.get_child_objects(obj_bp,obj_list)
         bpy.ops.object.select_all(action='DESELECT')
         for obj in obj_list:
             obj.hide = False
             obj.select = True
         
         bpy.ops.object.duplicate()
         
         for obj in context.selected_objects:
             if obj.type == 'EMPTY':
                 obj.hide = True
         
         for obj in obj_list:
             if obj.type == 'EMPTY':
                 obj.hide = True
             obj.location = obj.location
         bpy.ops.object.select_all(action='DESELECT')
         
         obj_bp.select = True
         context.scene.objects.active = obj_bp
         
     return {'FINISHED'}
示例#8
0
 def execute(self, context):
     obj = bpy.data.objects[self.object_name]
     group_bp = utils.get_assembly_bp(obj)
     wall_bp = utils.get_wall_bp(obj)
     if group_bp:
         group = fd_types.Assembly(group_bp)
     elif wall_bp:
         group = fd_types.Wall(wall_bp)
     hooklist = []
     for child in group.obj_bp.children:
         if child.type == 'EMPTY'  and child.mv.use_as_mesh_hook:
             hooklist.append(child)
     
     if obj.mode == 'EDIT':
         bpy.ops.object.editmode_toggle()
     
     utils.apply_hook_modifiers(obj)
     for vgroup in obj.vertex_groups:
         if vgroup.name == 'X Dimension':
             utils.hook_vertex_group_to_object(obj,'X Dimension',group.obj_x)
         elif vgroup.name == 'Y Dimension':
             utils.hook_vertex_group_to_object(obj,'Y Dimension',group.obj_y)
         elif vgroup.name == 'Z Dimension':
             utils.hook_vertex_group_to_object(obj,'Z Dimension',group.obj_z)
         else:
             for hook in hooklist:
                 if hook.mv.name_object == vgroup.name:
                     utils.hook_vertex_group_to_object(obj,vgroup.name,hook)
             
     obj.lock_location = (True,True,True)
             
     return {'FINISHED'}
示例#9
0
 def invoke(self,context,event):
     self.reset_variables()
     obj = bpy.data.objects[self.object_name]
     obj_bp = utils.get_assembly_bp(obj)
     if obj_bp:
         self.group = fd_types.Assembly(obj_bp)
         self.get_part_prompts()
     wm = context.window_manager
     return wm.invoke_props_dialog(self, width=utils.get_prop_dialog_width(400))
示例#10
0
 def invoke(self, context, event):
     self.reset_variables()
     obj = bpy.data.objects[self.object_name]
     obj_bp = utils.get_assembly_bp(obj)
     if obj_bp:
         self.group = fd_types.Assembly(obj_bp)
         self.get_part_prompts()
     wm = context.window_manager
     return wm.invoke_props_dialog(self,
                                   width=utils.get_prop_dialog_width(400))
示例#11
0
 def execute(self, context):
     obj = context.active_object
     obj_bp = utils.get_assembly_bp(obj)
     if obj_bp:
         bpy.ops.object.select_all(action='DESELECT')
         obj_bp.hide = False
         obj_bp.hide_select = False
         obj_bp.select = True
         context.scene.objects.active = obj_bp
     return {'FINISHED'}
示例#12
0
    def execute(self, context):
        obj_bp = utils.get_assembly_bp(context.active_object)

        bpy.ops.object.text_add()
        obj_text = context.active_object

        if obj_text:
            obj_text.mv.name_object = self.text_name

            if obj_bp:
                obj_text.parent = obj_bp
            
            context.scene.objects.active = obj_text
            bpy.ops.fd_group.load_active_group_objects(object_name=obj_bp.name)     
        return {'FINISHED'}
示例#13
0
 def execute(self, context):
     obj = bpy.data.objects[self.object_name]
     obj_bp = utils.get_assembly_bp(obj)
     if obj_bp:
         
         obj_list = []
         obj_list = utils.get_child_objects(obj_bp,obj_list)
         bpy.ops.object.select_all(action='DESELECT')
         
         for obj in obj_list:
             obj.hide = False
             obj.select = True
         
         bpy.ops.object.duplicate()
         
         for obj in context.selected_objects:
             if obj.type == 'EMPTY':
                 obj.hide = True
         
         for obj in obj_list:
             if obj.type == 'EMPTY':
                 obj.hide = True
             if obj.mv.type == 'BPASSEMBLY':
                 obj.hide = True
             obj.location = obj.location
         bpy.ops.object.select_all(action='DESELECT')
         
         obj_bp.select = True
         context.scene.objects.active = obj_bp
         
         assembly = fd_types.Assembly(obj_bp)
         if assembly.obj_bp.mv.drop_id != "":
             self.clear_drivers(assembly)
             eval('bpy.ops.' + assembly.obj_bp.mv.drop_id + '("INVOKE_DEFAULT",object_name=assembly.obj_bp.name)')
             return {'FINISHED'}
         if assembly.obj_bp.mv.type_group == 'PRODUCT':
             self.clear_drivers(assembly)
             eval('bpy.ops.fd_general.drop_product("INVOKE_DEFAULT",object_name=assembly.obj_bp.name)')
             return {'FINISHED'}
         if assembly.obj_bp.mv.type_group == 'INSERT':
             self.clear_drivers(assembly)
             eval('bpy.ops.fd_general.drop_insert("INVOKE_DEFAULT",object_name=assembly.obj_bp.name)')
             return {'FINISHED'}
         
     return {'FINISHED'}
示例#14
0
    def execute(self, context):
        obj_bp = utils.get_assembly_bp(context.active_object)
        group = fd_types.Assembly(obj_bp)
        dim_x = group.obj_x.location.x

        bpy.ops.curve.primitive_bezier_curve_add(enter_editmode=False)
        obj_curve = context.active_object
        obj_curve.data.show_handles = False
        
        obj_curve.data.splines[0].bezier_points[0].co = (0,0,0)
        obj_curve.data.splines[0].bezier_points[1].co = (dim_x,0,0)
        
        bpy.ops.object.editmode_toggle()
        bpy.ops.curve.select_all(action='SELECT')
        bpy.ops.curve.handle_type_set(type='VECTOR')
        bpy.ops.object.editmode_toggle()
        obj_curve.data.dimensions = '2D'
        
        if obj_curve:
            obj_curve.mv.name_object = self.curve_name
            obj_curve.parent = obj_bp
            bpy.ops.fd_assembly.load_active_assembly_objects(object_name=obj_bp.name)
        return {'FINISHED'}
示例#15
0
    def execute(self, context):
        obj_bp = utils.get_assembly_bp(context.active_object)
        assembly = fd_types.Assembly(obj_bp)
        obj_bp = assembly.obj_bp
        dim_x = assembly.obj_x.location.x
        dim_y = assembly.obj_y.location.y
        dim_z = assembly.obj_z.location.z

        obj_mesh = utils.create_cube_mesh(self.mesh_name,(dim_x,dim_y,dim_z))
                
        if obj_mesh:
            obj_mesh.mv.name_object = self.mesh_name
            context.scene.objects.active = obj_mesh
            bpy.ops.object.editmode_toggle()
            bpy.ops.mesh.select_all(action='SELECT')
            bpy.ops.mesh.normals_make_consistent(inside=False)
            bpy.ops.object.editmode_toggle()
            if obj_bp:
                obj_mesh.parent = obj_bp

            update_vector_groups(obj_bp)
            bpy.ops.fd_assembly.load_active_assembly_objects(object_name=obj_bp.name)
        return {'FINISHED'}
示例#16
0
 def execute(self, context):
     obj = bpy.data.objects[self.object_name]
     obj_bp = utils.get_assembly_bp(obj)
     if obj_bp:
         self.group = fd_types.Assembly(obj_bp)
         for DR in obj.animation_data.drivers:
             if self.data_path in DR.data_path and DR.array_index == self.array_index:
                 DR.driver.show_debug_info = False
                 
                 if self.x_loc:
                     var = DR.driver.variables.new()
                     var.name = 'loc_x'
                     var.targets[0].id = self.group.obj_bp
                     var.targets[0].data_path = 'location.x'
                 if self.y_loc:
                     var = DR.driver.variables.new()
                     var.name = 'loc_y'
                     var.targets[0].id = self.group.obj_bp
                     var.targets[0].data_path = 'location.y'
                 if self.z_loc:
                     var = DR.driver.variables.new()
                     var.name = 'loc_z'
                     var.targets[0].id = self.group.obj_bp
                     var.targets[0].data_path = 'location.z'
                 if self.x_rot:
                     var = DR.driver.variables.new()
                     var.name = 'rot_x'
                     var.targets[0].id = self.group.obj_bp
                     var.targets[0].data_path = 'rotation_euler.x'
                 if self.y_rot:
                     var = DR.driver.variables.new()
                     var.name = 'rot_y'
                     var.targets[0].id = self.group.obj_bp
                     var.targets[0].data_path = 'rotation_euler.y'
                 if self.z_rot:
                     var = DR.driver.variables.new()
                     var.name = 'rot_z'
                     var.targets[0].id = self.group.obj_bp
                     var.targets[0].data_path = 'rotation_euler.z'
                 if self.x_dim:
                     var = DR.driver.variables.new()
                     var.name = 'dim_x'
                     var.targets[0].id = self.group.obj_x
                     var.targets[0].data_path = 'location.x'
                 if self.y_dim:
                     var = DR.driver.variables.new()
                     var.name = 'dim_y'
                     var.targets[0].id = self.group.obj_y
                     var.targets[0].data_path = 'location.y'
                 if self.z_dim:
                     var = DR.driver.variables.new()
                     var.name = 'dim_z'
                     var.targets[0].id = self.group.obj_z
                     var.targets[0].data_path = 'location.z'      
 #                 if self.spec_group_index:
 #                     var = DR.driver.variables.new()
 #                     var.name = 'sgi'
 #                     var.targets[0].id = obj_bp
 #                     var.targets[0].data_path = 'mv.spec_group_index'
                     
                 for prompt in self.COL_prompt:
                     if prompt.add:
                         var = DR.driver.variables.new()
                         var.name = prompt.name.replace(" ","")
                         var.targets[0].id = obj_bp
                         if prompt.type == 'NUMBER':
                             var.targets[0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].NumberValue'
                         if prompt.type == 'QUANTITY':
                             var.targets[0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].QuantityValue'
                         if prompt.type == 'NUMBER':
                             var.targets[0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].NumberValue'
                         if prompt.type == 'COMBOBOX':
                             var.targets[0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].EnumIndex'
                         if prompt.type == 'CHECKBOX':
                             var.targets[0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].CheckBoxValue'
                         if prompt.type == 'DISTANCE':
                             var.targets[0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].DistanceValue'
                         if prompt.type == 'PERCENTAGE':
                             var.targets[0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].PercentageValue'
                         if prompt.type == 'PRICE':
                             var.targets[0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].PriceValue'
                         if prompt.type == 'ANGLE':
                             var.targets[0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].AngleValue'
                             
                 var.type = 'SINGLE_PROP'
                 for target in var.targets:
                     target.transform_space = 'LOCAL_SPACE'
                 
     return {'FINISHED'}
示例#17
0
    def execute(self, context):
        obj = bpy.data.objects[self.object_name]
        obj_bp = utils.get_assembly_bp(obj)
        if obj_bp:
            self.group = fd_types.Assembly(obj_bp)
            for DR in obj.animation_data.drivers:
                if self.data_path in DR.data_path and DR.array_index == self.array_index:
                    DR.driver.show_debug_info = False

                    if self.x_loc:
                        var = DR.driver.variables.new()
                        var.name = 'loc_x'
                        var.targets[0].id = self.group.obj_bp
                        var.targets[0].data_path = 'location.x'
                    if self.y_loc:
                        var = DR.driver.variables.new()
                        var.name = 'loc_y'
                        var.targets[0].id = self.group.obj_bp
                        var.targets[0].data_path = 'location.y'
                    if self.z_loc:
                        var = DR.driver.variables.new()
                        var.name = 'loc_z'
                        var.targets[0].id = self.group.obj_bp
                        var.targets[0].data_path = 'location.z'
                    if self.x_rot:
                        var = DR.driver.variables.new()
                        var.name = 'rot_x'
                        var.targets[0].id = self.group.obj_bp
                        var.targets[0].data_path = 'rotation_euler.x'
                    if self.y_rot:
                        var = DR.driver.variables.new()
                        var.name = 'rot_y'
                        var.targets[0].id = self.group.obj_bp
                        var.targets[0].data_path = 'rotation_euler.y'
                    if self.z_rot:
                        var = DR.driver.variables.new()
                        var.name = 'rot_z'
                        var.targets[0].id = self.group.obj_bp
                        var.targets[0].data_path = 'rotation_euler.z'
                    if self.x_dim:
                        var = DR.driver.variables.new()
                        var.name = 'dim_x'
                        var.targets[0].id = self.group.obj_x
                        var.targets[0].data_path = 'location.x'
                    if self.y_dim:
                        var = DR.driver.variables.new()
                        var.name = 'dim_y'
                        var.targets[0].id = self.group.obj_y
                        var.targets[0].data_path = 'location.y'
                    if self.z_dim:
                        var = DR.driver.variables.new()
                        var.name = 'dim_z'
                        var.targets[0].id = self.group.obj_z
                        var.targets[0].data_path = 'location.z'

    #                 if self.spec_group_index:
    #                     var = DR.driver.variables.new()
    #                     var.name = 'sgi'
    #                     var.targets[0].id = obj_bp
    #                     var.targets[0].data_path = 'mv.spec_group_index'

                    for prompt in self.COL_prompt:
                        if prompt.add:
                            var = DR.driver.variables.new()
                            var.name = prompt.name.replace(" ", "")
                            var.targets[0].id = obj_bp
                            if prompt.type == 'NUMBER':
                                var.targets[
                                    0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].NumberValue'
                            if prompt.type == 'QUANTITY':
                                var.targets[
                                    0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].QuantityValue'
                            if prompt.type == 'NUMBER':
                                var.targets[
                                    0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].NumberValue'
                            if prompt.type == 'COMBOBOX':
                                var.targets[
                                    0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].EnumIndex'
                            if prompt.type == 'CHECKBOX':
                                var.targets[
                                    0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].CheckBoxValue'
                            if prompt.type == 'DISTANCE':
                                var.targets[
                                    0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].DistanceValue'
                            if prompt.type == 'PERCENTAGE':
                                var.targets[
                                    0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].PercentageValue'
                            if prompt.type == 'PRICE':
                                var.targets[
                                    0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].PriceValue'
                            if prompt.type == 'ANGLE':
                                var.targets[
                                    0].data_path = 'mv.PromptPage.COL_Prompt["' + prompt.name + '"].AngleValue'

                    var.type = 'SINGLE_PROP'
                    for target in var.targets:
                        target.transform_space = 'LOCAL_SPACE'

        return {'FINISHED'}
示例#18
0
 def get_bp(self,context):
     if self.object_name != "":
         return bpy.data.objects[self.object_name]
     else:
         obj = context.object
         return utils.get_assembly_bp(obj)
示例#19
0
 def poll(cls, context):
     if context.active_object:
         obj_bp = utils.get_assembly_bp(context.active_object)
         if obj_bp:
             return True
     return False