fix the bug of the 3dsmax OP data not being collected during switching version

This commit is contained in:
Kayla Man 2023-09-14 16:27:49 +08:00
parent c53abb50f0
commit 559021b5f6
5 changed files with 39 additions and 37 deletions

View file

@ -73,22 +73,18 @@ class FbxLoader(load.LoaderPlugin):
rt.FBXImporterSetParam("Preserveinstances", True)
rt.ImportFile(
path, rt.name("noPrompt"), using=rt.FBXIMP)
current_fbx_objects = [sel for sel in rt.GetCurrentSelection()
if sel != rt.Container
and sel.name != node_name]
update_custom_attribute_data(node, current_fbx_objects)
current_fbx_objects = rt.GetCurrentSelection()
fbx_objects = []
for fbx_object in current_fbx_objects:
fbx_object.name = f"{namespace}:{fbx_object.name}"
if fbx_object in node_list:
fbx_object.pos = transform_data[
f"{fbx_object.name}.transform"] or 0
fbx_objects.append(fbx_object)
fbx_transform = f"{fbx_object.name}.transform"
if fbx_transform in transform_data.keys():
fbx_object.pos = transform_data[fbx_transform] or 0
fbx_object.scale = transform_data[
f"{fbx_object.name}.scale"] or 0
with maintained_selection():
rt.Select(node)
update_custom_attribute_data(node, fbx_objects)
lib.imprint(container["instance_node"], {
"representation": str(representation["_id"])
})

View file

@ -43,7 +43,6 @@ class MaxSceneLoader(load.LoaderPlugin):
for max_obj, obj_name in zip(max_objects, max_object_names):
max_obj.name = f"{namespace}:{obj_name}"
max_container.append(rt.getNodeByName(max_obj.name))
return containerise(
name, max_container, context,
namespace, loader=self.__class__.__name__)
@ -53,32 +52,40 @@ class MaxSceneLoader(load.LoaderPlugin):
path = get_representation_path(representation)
node_name = container["instance_node"]
print(node_name)
node = rt.getNodeByName(node_name)
namespace, _ = get_namespace(node_name)
# delete the old container with attribute
# delete old duplicate
# use the modifier OP data to delete the data
node_list = get_previous_loaded_object(node)
prev_max_objects = rt.getLastMergedNodes()
rt.select(node_list)
prev_max_objects = rt.GetCurrentSelection()
print(f"{node_list}")
transform_data = object_transform_set(prev_max_objects)
for prev_max_obj in prev_max_objects:
if rt.isValidNode(prev_max_obj): # noqa
rt.Delete(prev_max_obj)
rt.MergeMaxFile(path, rt.Name("deleteOldDups"))
rt.MergeMaxFile(path, quiet=True)
current_max_objects = rt.getLastMergedNodes()
current_max_object_names = [obj.name for obj
in current_max_objects]
update_custom_attribute_data(node, current_max_objects)
max_objects = []
for max_obj, obj_name in zip(current_max_objects,
current_max_object_names):
current_max_object_names):
max_obj.name = f"{namespace}:{obj_name}"
if max_obj in node_list:
max_obj.pos = transform_data[
f"{max_obj.name}.transform"] or 0
max_objects.append(max_obj)
max_transform = f"{max_obj.name}.transform"
if max_transform in transform_data.keys():
max_obj.pos = transform_data[max_transform] or 0
max_obj.scale = transform_data[
f"{max_obj.name}.scale"] or 0
update_custom_attribute_data(node, max_objects)
lib.imprint(container["instance_node"], {
"representation": str(representation["_id"])
})

View file

@ -52,13 +52,13 @@ class FbxModelLoader(load.LoaderPlugin):
path = get_representation_path(representation)
node_name = container["instance_node"]
node = rt.getNodeByName(node_name)
if not node:
rt.Container(name=node_name)
namespace, _ = get_namespace(node_name)
node_list = get_previous_loaded_object(node)
rt.Select(node_list)
prev_fbx_objects = [sel for sel in rt.GetCurrentSelection()
if sel != rt.Container
and sel.name != node_name]
prev_fbx_objects = rt.GetCurrentSelection()
transform_data = object_transform_set(prev_fbx_objects)
for prev_fbx_obj in prev_fbx_objects:
if rt.isValidNode(prev_fbx_obj):
@ -70,18 +70,19 @@ class FbxModelLoader(load.LoaderPlugin):
rt.FBXImporterSetParam("Preserveinstances", True)
rt.importFile(path, rt.name("noPrompt"), using=rt.FBXIMP)
current_fbx_objects = rt.GetCurrentSelection()
update_custom_attribute_data(node, current_fbx_objects)
fbx_objects = []
for fbx_object in current_fbx_objects:
fbx_object.name = f"{namespace}:{fbx_object.name}"
if fbx_object in node_list:
fbx_object.pos = transform_data[
f"{fbx_object.name}.transform"] or 0
fbx_objects.append(fbx_object)
fbx_transform = f"{fbx_object.name}.transform"
if fbx_transform in transform_data.keys():
fbx_object.pos = transform_data[fbx_transform] or 0
fbx_object.scale = transform_data[
f"{fbx_object.name}.scale"] or 0
with maintained_selection():
rt.Select(node)
update_custom_attribute_data(node, fbx_objects)
lib.imprint(container["instance_node"], {
"representation": str(representation["_id"])
})

View file

@ -55,9 +55,7 @@ class ObjLoader(load.LoaderPlugin):
namespace, _ = get_namespace(node_name)
node_list = get_previous_loaded_object(node)
rt.Select(node_list)
previous_objects = [sel for sel in rt.GetCurrentSelection()
if sel != rt.Container
and sel.name == node_name]
previous_objects = rt.GetCurrentSelection()
transform_data = object_transform_set(previous_objects)
for prev_obj in previous_objects:
if rt.isValidNode(prev_obj):
@ -68,9 +66,9 @@ class ObjLoader(load.LoaderPlugin):
selections = rt.GetCurrentSelection()
for selection in selections:
selection.name = f"{namespace}:{selection.name}"
if selection in node_list:
selection.pos = transform_data[
f"{selection.name}.transform"] or 0
selection_transform = f"{selection.name}.transform"
if selection_transform in transform_data.keys():
selection.pos = transform_data[selection_transform] or 0
selection.scale = transform_data[
f"{selection.name}.scale"] or 0
update_custom_attribute_data(node, selections)

View file

@ -93,9 +93,9 @@ class ModelUSDLoader(load.LoaderPlugin):
for children in asset.Children:
children.name = f"{namespace}:{children.name}"
usd_objects.append(children)
if children in node_list:
children.pos = transform_data[
f"{children.name}.transform"] or 0
children_transform = f"{children.name}.transform"
if children_transform in transform_data.keys():
children.pos = transform_data[children_transform] or 0
children.scale = transform_data[
f"{children.name}.scale"] or 0