mirror of
https://github.com/drewcassidy/TexTools-Blender
synced 2024-09-01 14:54:44 +00:00
70 lines
1.8 KiB
Python
70 lines
1.8 KiB
Python
import bpy
|
|
import bmesh
|
|
import operator
|
|
from mathutils import Vector
|
|
from collections import defaultdict
|
|
from math import pi
|
|
import math
|
|
|
|
from . import utilities_meshtex
|
|
|
|
|
|
def is_available():
|
|
# If the selection contains a boolean modifier
|
|
obj_textures = utilities_meshtex.find_texture_meshes(bpy.context.selected_objects)
|
|
for obj in obj_textures:
|
|
for modifier in obj.modifiers:
|
|
if modifier.type == 'BOOLEAN':
|
|
return True
|
|
return False
|
|
|
|
|
|
class op(bpy.types.Operator):
|
|
bl_idname = "uv.textools_meshtex_trimcollapse"
|
|
bl_label = "Collapse"
|
|
bl_description = "Trim Mesh Texture"
|
|
bl_options = {'REGISTER', 'UNDO'}
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
if not bpy.context.active_object or bpy.context.active_object.mode != 'OBJECT':
|
|
return False
|
|
|
|
return is_available()
|
|
|
|
def execute(self, context):
|
|
collapse(self)
|
|
return {'FINISHED'}
|
|
|
|
|
|
|
|
def collapse(self):
|
|
# Collect texture meshes
|
|
obj_textures = utilities_meshtex.find_texture_meshes( bpy.context.selected_objects )
|
|
|
|
|
|
previous_selection = bpy.context.selected_objects.copy()
|
|
previous_active = bpy.context.view_layer.objects.active
|
|
|
|
if len(obj_textures) == 0:
|
|
self.report({'ERROR_INVALID_INPUT'}, "No meshes found for mesh textures" )
|
|
return
|
|
|
|
# Apply bool modifier to trim
|
|
for obj in obj_textures:
|
|
bpy.ops.object.select_all(action='DESELECT')
|
|
obj.select_set( state = True, view_layer = None)
|
|
bpy.context.view_layer.objects.active = obj
|
|
bpy.ops.object.convert(target='MESH')
|
|
|
|
# restore selection
|
|
bpy.ops.object.select_all(action='DESELECT')
|
|
for obj in previous_selection:
|
|
obj.select_set( state = True, view_layer = None)
|
|
bpy.context.view_layer.objects.active = previous_active
|
|
|
|
|
|
bpy.ops.ui.textools_popup('INVOKE_DEFAULT', message="{}x objects have been collapsed".format(len(obj_textures)))
|
|
|
|
|
|
bpy.utils.register_class(op) |