kopia lustrzana https://github.com/vilemduha/blendercam
				
				
				
			
		
			
				
	
	
		
			126 wiersze
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			126 wiersze
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
"""Fabex 'basrelief.py'
 | 
						|
 | 
						|
'Bas Relief' properties and panel in Properties > Render
 | 
						|
"""
 | 
						|
 | 
						|
import bpy
 | 
						|
from bpy.types import Panel
 | 
						|
 | 
						|
 | 
						|
class BASRELIEF_Panel(Panel):
 | 
						|
    """Bas Relief Panel"""
 | 
						|
 | 
						|
    bl_label = "[ Bas Relief ]"
 | 
						|
    bl_idname = "FABEX_PT_BASRELIEF"
 | 
						|
    bl_options = {"DEFAULT_CLOSED"}
 | 
						|
    bl_space_type = "PROPERTIES"
 | 
						|
    bl_region_type = "WINDOW"
 | 
						|
    bl_context = "render"
 | 
						|
    COMPAT_ENGINES = {"FABEX_RENDER"}
 | 
						|
 | 
						|
    @classmethod
 | 
						|
    def poll(cls, context):
 | 
						|
        """Check if the current render engine is compatible.
 | 
						|
 | 
						|
        This class method checks whether the render engine specified in the
 | 
						|
        provided context is included in the list of compatible engines. It
 | 
						|
        accesses the render settings from the context and verifies if the engine
 | 
						|
        is part of the predefined compatible engines.
 | 
						|
 | 
						|
        Args:
 | 
						|
            context (Context): The context containing the scene and render settings.
 | 
						|
 | 
						|
        Returns:
 | 
						|
            bool: True if the render engine is compatible, False otherwise.
 | 
						|
        """
 | 
						|
 | 
						|
        rd = context.scene.render
 | 
						|
        return rd.engine in cls.COMPAT_ENGINES
 | 
						|
 | 
						|
    def draw(self, context):
 | 
						|
        """Draw the user interface for the bas relief settings.
 | 
						|
 | 
						|
        This method constructs the layout for the bas relief settings in the
 | 
						|
        Blender user interface. It includes various properties and options that
 | 
						|
        allow users to configure the bas relief calculations, such as selecting
 | 
						|
        images, adjusting parameters, and setting justification options. The
 | 
						|
        layout is dynamically updated based on user selections, providing a
 | 
						|
        comprehensive interface for manipulating bas relief settings.
 | 
						|
 | 
						|
        Args:
 | 
						|
            context (bpy.context): The context in which the UI is being drawn.
 | 
						|
 | 
						|
        Returns:
 | 
						|
            None: This method does not return any value; it modifies the layout
 | 
						|
            directly.
 | 
						|
        """
 | 
						|
 | 
						|
        layout = self.layout
 | 
						|
        layout.use_property_split = True
 | 
						|
        layout.use_property_decorate = False
 | 
						|
 | 
						|
        scene = context.scene
 | 
						|
 | 
						|
        br = scene.basreliefsettings
 | 
						|
 | 
						|
        box = layout.box()
 | 
						|
        col = box.column(align=True)
 | 
						|
        col.label(text="Source")
 | 
						|
        if br.use_image_source:
 | 
						|
            col.prop_search(br, "source_image_name", bpy.data, "images")
 | 
						|
        else:
 | 
						|
            col.prop_search(br, "view_layer_name", context.scene, "view_layers")
 | 
						|
        col.prop(br, "use_image_source")
 | 
						|
        col.prop(br, "depth_exponent")
 | 
						|
        col.prop(br, "advanced")
 | 
						|
 | 
						|
        box = layout.box()
 | 
						|
        col = box.column(align=True)
 | 
						|
        col.label(text="Parameters")
 | 
						|
        col.prop(br, "bit_diameter", text="Ball End Diameter (mm)")
 | 
						|
        col.prop(br, "pass_per_radius")
 | 
						|
        col.prop(br, "widthmm", text="Desired Width (mm)")
 | 
						|
        col.prop(br, "heightmm", text="Desired Height (mm)")
 | 
						|
        col.prop(br, "thicknessmm", text="Thickness (mm)")
 | 
						|
 | 
						|
        box = layout.box()
 | 
						|
        col = box.column(align=True)
 | 
						|
        col.label(text="Justification")
 | 
						|
        col.prop(br, "justifyx")
 | 
						|
        col.prop(br, "justifyy")
 | 
						|
        col.prop(br, "justifyz")
 | 
						|
 | 
						|
        box = layout.box()
 | 
						|
        col = box.column(align=True)
 | 
						|
        col.label(text="Silhouette")
 | 
						|
        col.prop(br, "silhouette_threshold", text="Threshold")
 | 
						|
        col.prop(br, "recover_silhouettes")
 | 
						|
        if br.recover_silhouettes:
 | 
						|
            col.prop(br, "silhouette_scale", text="Scale")
 | 
						|
            if br.advanced:
 | 
						|
                col.prop(br, "silhouette_exponent", text="Square Exponent")
 | 
						|
 | 
						|
        box = layout.box()
 | 
						|
        col = box.column(align=True)
 | 
						|
        col.label(text="Iterations")
 | 
						|
        if br.advanced:
 | 
						|
            col.prop(br, "smooth_iterations", text="Smooth")
 | 
						|
        col.prop(br, "vcycle_iterations", text="V-Cycle")
 | 
						|
        col.prop(br, "linbcg_iterations", text="LINBCG")
 | 
						|
 | 
						|
        if br.advanced:
 | 
						|
            layout.prop(br, "min_gridsize")
 | 
						|
        layout.prop(br, "decimate_ratio")
 | 
						|
        layout.prop(br, "use_planar")
 | 
						|
        layout.prop(br, "gradient_scaling_mask_use")
 | 
						|
        if br.advanced:
 | 
						|
            if br.gradient_scaling_mask_use:
 | 
						|
                layout.prop_search(br, "gradient_scaling_mask_name", bpy.data, "images")
 | 
						|
            layout.prop(br, "detail_enhancement_use")
 | 
						|
            if br.detail_enhancement_use:
 | 
						|
                layout.prop(br, "detail_enhancement_amount")
 | 
						|
        box = layout.box()
 | 
						|
        col = box.column()
 | 
						|
        col.scale_y = 1.2
 | 
						|
        col.operator("scene.calculate_bas_relief", text="Calculate Relief", icon="RNDCURVE")
 |