import bpy from cam.ui_panels.buttons_panel import CAMButtonsPanel class CAM_AREA_Panel(CAMButtonsPanel, bpy.types.Panel): """CAM operation area panel""" bl_label = "CAM operation area " bl_idname = "WORLD_PT_CAM_OPERATION_AREA" panel_interface_level = 0 prop_level = { 'draw_use_layers': 0, 'draw_maxz': 1, 'draw_minz': 1, 'draw_ambient': 1, 'draw_limit_curve': 1 } def draw_use_layers(self): if not self.has_correct_level(): return row = self.layout.row(align=True) row.prop(self.op, 'use_layers') if self.op.use_layers: row.prop(self.op, 'stepdown') def draw_maxz(self): if not self.has_correct_level(): return self.layout.prop(self.op, 'maxz') if self.op.maxz > self.op.movement.free_height: self.layout.prop(self.op.movement, 'free_height') self.layout.label(text='POSSIBLE COLLISION: Depth start > Free movement') def draw_minz(self): if not self.has_correct_level(): return if self.op.geometry_source in ['OBJECT', 'COLLECTION']: if self.op.strategy == 'CURVE': self.layout.label(text="cannot use depth from object using CURVES") if not self.op.minz_from_ob: if not self.op.minz_from_material: self.layout.prop(self.op, 'minz') self.layout.prop(self.op, 'minz_from_material') if not self.op.minz_from_material: self.layout.prop(self.op, 'minz_from_ob') else: self.layout.prop(self.op, 'source_image_scale_z') self.layout.prop(self.op, 'source_image_size_x') if self.op.source_image_name != '': i = bpy.data.images[self.op.source_image_name] if i is not None: sy = int((self.op.source_image_size_x / i.size[0]) * i.size[1] * 1000000) / 1000 self.layout.label(text='image size on y axis: ' + strInUnits(sy, 8)) self.layout.separator() self.layout.prop(self.op, 'source_image_offset') col = self.layout.column(align=True) col.prop(self.op, 'source_image_crop', text='Crop source image') if self.op.source_image_crop: col.prop(self.op, 'source_image_crop_start_x', text='start x') col.prop(self.op, 'source_image_crop_start_y', text='start y') col.prop(self.op, 'source_image_crop_end_x', text='end x') col.prop(self.op, 'source_image_crop_end_y', text='end y') def draw_ambient(self): if not self.has_correct_level(): return if self.op.strategy in ['BLOCK', 'SPIRAL', 'CIRCLES', 'PARALLEL', 'CROSS']: self.layout.prop(self.op, 'ambient_behaviour') if self.op.ambient_behaviour == 'AROUND': self.layout.prop(self.op, 'ambient_radius') self.layout.prop(self.op, "ambient_cutter_restrict") def draw_limit_curve(self): if not self.has_correct_level(): return if self.op.strategy in ['BLOCK', 'SPIRAL', 'CIRCLES', 'PARALLEL', 'CROSS']: self.layout.prop(self.op, 'use_limit_curve') if self.op.use_limit_curve: self.layout.prop_search(self.op, "limit_curve", bpy.data, "objects") def draw(self, context): self.context = context self.draw_use_layers() self.draw_maxz() self.draw_minz() self.draw_ambient() self.draw_limit_curve()