表面纹理
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

172 lines
6.0 KiB

import bpy
import os
import json
import sys
import datetime
from ..project_config import PROJECT_CONFIG
sys.path.append(PROJECT_CONFIG.executable_dir_path)
sys.path.append(PROJECT_CONFIG.library_dir_path)
sys.path.append(PROJECT_CONFIG.workplace_dir_path)
supported_family = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
class LatticeLibraryOperator(bpy.types.Operator):
bl_idname: str = "designauto.lattice_library"
bl_label: str = "纹理库"
bl_options = {"REGISTER", "UNDO"}
family_items = [("-1","全部纹理","")]
for family in supported_family :
family_items.append((str(family),"纹理" + str(family),""))
lattice_family: bpy.props.EnumProperty(name = "lattice_family", items=family_items)
lattice_type : bpy.props.StringProperty(name = "lattice")
start_id = 1
end_id = 61
out_type = -1
cur_dir = os.path.dirname(os.path.abspath(__file__))
line3valid_file_path = os.path.join(PROJECT_CONFIG.workplace_dir_path, "parameters", "line3_valid.json")
def invoke(self, context, event):
wm = context.window_manager
return wm.invoke_props_dialog(self)
def draw(self, context):
layout = self.layout
layout.ui_units_x = 40
row = layout.row()
# row.prop(self,"lattice_type",text="Type")
row.prop(self,"lattice_family",text="相连性类别")
button = row.operator("designauto.search_lattice",text="查询纹理")
button.lattice_family = self.lattice_family # string
row = layout.row()
button = row.operator("designauto.edit_lattice_para",text="修改生成纹理参数")
box =layout.box()
box.ui_units_y = 20
row = box.row()
#从数据库中取的晶格列表
lattices_id_list=self.getFromJson(self.start_id,self.end_id,self.out_type)
#i记录一行中的按钮数
i = 0
for lattice_info in lattices_id_list:
name = "Type " + str(lattice_info['id'])
button = row.operator("designauto.load_obj",text = name)
real_obj_path = os.path.join(PROJECT_CONFIG.workplace_dir_path, "parameters", lattice_info['obj_path'])
button.obj_path = real_obj_path
#五个一行,超过换行
i = i + 1
if i % 5 == 0 :
col =box.column()
row = col.row()
row = box.row()
row = box.row()
row.operator("designauto.pre_page",text="上一页")
row.operator("designauto.nex_page",text="下一页")
def getFromJson(self, id_start, id_end, out_type):
lattices_list = []
with open(self.line3valid_file_path, encoding='utf-8') as f:
all_lattices = json.load(f)
for lattice in all_lattices:
if (out_type == -1) or (lattice.get("out_type") == str(out_type)):
lattices_list.append({
'id': lattice.get("id"),
'obj_path': lattice.get("obj_path")
})
return lattices_list[id_start-1:id_end-1]
class LoadOBJOperator(bpy.types.Operator):
bl_idname: str = "designauto.load_obj"
bl_label: str = "加载纹理"
bl_options = {"REGISTER", "UNDO"}
obj_path: bpy.props.StringProperty(name="Object Path")
def execute(self, context):
bpy.ops.import_scene.obj(filepath=self.obj_path)
return {'FINISHED'}
class PrePageOperator(bpy.types.Operator):
bl_idname: str = "designauto.pre_page"
bl_label: str = "上一页"
bl_options = {"REGISTER", "UNDO"}
def execute(self, context):
LatticeLibraryOperator.start_id -= 60
LatticeLibraryOperator.end_id -= 60
return {'FINISHED'}
def invoke(self, context, event):
return self.execute(self)
class NexPageOperator(bpy.types.Operator):
bl_idname: str = "designauto.nex_page"
bl_label: str = "下一页"
bl_options = {"REGISTER", "UNDO"}
def execute(self, context):
LatticeLibraryOperator.start_id += 60
LatticeLibraryOperator.end_id += 60
return {'FINISHED'}
def invoke(self, context, event):
return self.execute(self)
class EditLatticeParaOperator(bpy.types.Operator):
bl_idname: str = "designauto.edit_lattice_para"
bl_label: str = "修改纹理参数"
bl_options = {"REGISTER", "UNDO"}
radius : bpy.props.FloatProperty(name="半径",default=0.02,min=0.01,max=0.09,step=0.01)
offset : bpy.props.FloatProperty(name="深度",default=0.5,min=0.1,max=0.9,step=0.1)
sample : bpy.props.FloatProperty(name="凹凸",default=0.8,min=0.1,max=1,step=0.1)
def execute(self, context):
path = LatticeLibraryOperator.cur_dir + "/user_setting.txt"
with open(path,'w') as f:
f.truncate()
round(self.radius,2)
radius_lines = str(round(self.radius,2))+",lattice_radius;\n"
offset_lines = str(round(self.offset,2))+",lattice_offset;\n"
sample_lines = str(self.sample)+",lattice_sample;\n"
txtlist = [radius_lines,offset_lines,sample_lines]
f.writelines(txtlist)
return {'FINISHED'}
def invoke(self, context, event):
path = LatticeLibraryOperator.cur_dir + "/user_setting.txt"
with open(path,'r') as f:
lines=f.readlines()
self.radius = float(lines[0].split(",")[0])
self.offset = float(lines[1].split(",")[0])
self.sample = int(lines[2].split(",")[0])
wm = context.window_manager
return wm.invoke_props_dialog(self)
class SearchLatticeOperator(bpy.types.Operator):
bl_idname: str = "designauto.search_lattice"
bl_label: str = "搜索纹理"
bl_options = {"REGISTER", "UNDO"}
lattice_family : bpy.props.StringProperty(name = 'family')
def execute(self, context):
LatticeLibraryOperator.start_id = 1
LatticeLibraryOperator.end_id = 61
LatticeLibraryOperator.out_type = int(self.lattice_family)
return {'FINISHED'}
def invoke(self, context, event):
return self.execute(self)