Source code for liatool.ui_domain


from os import path, listdir, makedirs
from shutil import rmtree
import math
import bpy
from bpy.app.handlers import persistent
from bpy.types import Panel, PropertyGroup, Operator, Scene, UIList, Object
from bpy.props import (BoolProperty, IntProperty, StringProperty,
                       FloatVectorProperty, PointerProperty,
                       EnumProperty, CollectionProperty)
from mathutils import Vector

from . ui_panel import ILSPpanel
from . import utils
from . import foam


########################################################################
# PROPERTIES
########################################################################
[docs] class DomainProperties(PropertyGroup):
[docs] def setDefaultValues(self, context): pass
[docs] def check(self, context): if self.selected_object is None: message = 'none object selected ...' iconValue = 3 return False, message, iconValue return True
domain_object: PointerProperty(type=Object) def _selectedObjectPoll(self, object): if not utils.getDomainByDomainObj(object): if object not in bpy.context.scene.ilsp_illuminations: if object.type == 'MESH': return True else: return False selected_object: PointerProperty( name="Selected Object", description="Selected Object", type=bpy.types.Object, poll=lambda self, object: self._selectedObjectPoll(object), ) def _updateFineness(self, context): domain = context.scene.ilsp_domain if domain.mesh_fineness == 'veryCoarse': domain.octree = 6 elif domain.mesh_fineness == 'coarse': domain.octree = 7 elif domain.mesh_fineness == 'moderate': domain.octree = 8 elif domain.mesh_fineness == 'fine': domain.octree = 9 elif domain.mesh_fineness == 'veryFine': domain.octree = 10 mesh_fineness: EnumProperty( name="Background Mesh Fineness", description="Background Mesh Fineness", items=( ('veryCoarse', "Very Coarse", ""), ('coarse', "Coarse", ""), ('moderate', "Moderate", ""), ('fine', "Fine", ""), ('veryFine', "Very Fine", ""), ), default='moderate', update=lambda self, context: self._updateFineness(context), ) octree: IntProperty( name="Octree Depth", description="Octree Depth", default=8, min=1, max=10, )
######################################################################## # PANELS ########################################################################
[docs] class ILSP_PT_domain(ILSPpanel, Panel): bl_label = "Domain Generator" def _enabled(self, context): if context.scene.ilsp_domain.selected_object is None: return False else: return True
[docs] def draw(self, context): layout = self.layout layout.use_property_split = False layout.use_property_decorate = False domain = context.scene.ilsp_domain process = context.scene.ilsp_process enabled = self._enabled(context) panelValues = True if process.selected_domain: self.layout.enabled = False domain = utils.getDomainByDomainObj(process.selected_domain).props panelValues = False row = layout.row() row.enabled = True row.prop(domain, "selected_object", icon='OUTLINER_OB_MESH') layout.separator() row = layout.row() row.enabled = enabled row.prop(domain, "mesh_fineness") if panelValues: row = layout.row() row.enabled = enabled row.operator("domain.generate_mesh", text="Generate Background Mesh") status = domain.check(context) try: len(status) except Exception: return layout.label(text=status[1], icon_value=status[2])
######################################################################## # OPERATORSs ########################################################################
[docs] class ILSP_OT_domain_generateMesh(Operator): bl_idname = "domain.generate_mesh" bl_label = "3D-Print Info Volume" bl_description = "Report the volume of the active mesh"
[docs] @classmethod def poll(cls, context): status = context.scene.ilsp_domain.check(context) try: len(status) except Exception: return True return False
[docs] def execute(self, context): domain = context.scene.ilsp_domain domainName = domain.selected_object.name + '_domain' case = path.join(context.scene.ILSP_tempDir, domainName, 'mesh') try: objs = bpy.data.objects objs.remove(objs[domainName], do_unlink=True) except Exception: pass domain_object = domain.selected_object.copy() domain_object.data = domain.selected_object.data.copy() domain_object.name = domainName domain.selected_object.select_set(False) domain.selected_object.hide_set(True) utils.addObjectToCollection(domain_object, Scene.ILSP_domainCollectionName) utils.selectOnlyObj(domain_object) bpy.ops.object.modifier_add(type='REMESH') bpy.ops.object.modifier_set_active(modifier="Remesh") bpy.context.object.modifiers["Remesh"].mode = 'SHARP' bpy.context.object.modifiers["Remesh"].octree_depth = \ domain.octree bpy.ops.object.modifier_apply(modifier="Remesh") iLSPDomain = context.scene.ilsp_iLspDomains.add() iLSPDomain.setDomainState(object=domain.selected_object, domain_object=domain_object, props=context.scene.ilsp_domain) utils.selectOnlyObj(domain_object) return {'FINISHED'}
[docs] class iLspDomain(PropertyGroup): object: PointerProperty(type=Object) domain_object: PointerProperty(type=Object) props: PointerProperty(type=DomainProperties)
[docs] def setDomainState(self, *, object=None, domain_object=None, props=None): self.object = object self.domain_object = domain_object utils.copyProperties(props, self.props)