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'}
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'}
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'}
def poll(cls, context): obj = context.active_object obj_bp = utils.get_assembly_bp(obj) if obj_bp: return True else: return False
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'}
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'}
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))
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))
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'}
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'}
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'}
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'}
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'}
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'}
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'}
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)
def poll(cls, context): if context.active_object: obj_bp = utils.get_assembly_bp(context.active_object) if obj_bp: return True return False