【问题标题】:How to mark last imported *obj in blender如何在搅拌机中标记最后导入的 *obj
【发布时间】:2012-12-18 07:26:12
【问题描述】:

(可能写得不太好)问题是:有没有办法在通过 bpy.import_scene.obj 函数加载对象数据后立即获取它?

我的意思是当我使用这个函数导入一个 obj 文件时,我需要对其进行更多的转换。当我通过名称“网格”(导入后对象的默认名称)选择一个对象时,所有这些功能都适用于我场景中名为“网格”的其他对象。我试图从场景中的对象列表中获取最后一个对象,但它们是按字母顺序排列的,所以效果不佳。当我尝试更改 object.name 并对其应用下一个功能时,它仅适用于一个。导入对象的所有早期实例都恢复为默认值。

如何解决这个问题?是否可以从场景最后添加的对象中获取?或者,在导入 *obj 对象之后,在应用下一个函数之前,可能有某种方式来“标记”它?或者也许有一种方法可以将 *obj 数据直接导入到之前创建的空白对象中。

干杯, 雷格

PS:使用 Blender 2.63

【问题讨论】:

    标签: python object import blender


    【解决方案1】:

    操作员不会返回他们加载的数据,但您可以通过这种方式使用标记...

    for obj in bpy.data.objects:
        obj.tag = True
    
    bpy.import_scene.obj(filepath="somefile.obj")
    
    imported_objects = [obj for obj in bpy.data.objects if obj.tag is False]
    

    【讨论】:

    • 太棒了!我没有想到。谢谢!
    【解决方案2】:

    从我在导入东西后看到的情况来看,所有对象(包括场景中已经存在的对象)的默认标签都是 true。因此,似乎为了标记对象,您必须为它们分配一个 false 值,然后导入,如果它们的标记为 True,则将它们添加到导入的对象中。反过来不行。所以我不确定这个答案是否准确。

    【讨论】:

    • 那么,如果您的答案是否准确,而您的答案是否准确,而您的答案是干净的代码,那么您的观点是什么?
    • “干净的代码”,如 1. 从未测试过的代码(第 4 行有错误。只需将其复制并粘贴到搅拌机控制台即可查看错误。) 2. 之前的代码即使没有错误也永远不会运行(修复错误会创建一个大小为 0 的数组。)那是因为,正如我所说,当场景开始时和新导入的对象时,所有对象都具有真实值。我猜你只是假设@ideasman42 的答案是准确的,因为“(4)群众的智慧”......我的意思是,如果有四个人对此表示赞同,那一定是准确的吧?
    • 不,我认为ideaman42 的回答是令人满意的,因为OP 接受了它并通过它找到了解决方案。
    猜你喜欢
    • 2017-05-08
    • 2017-11-17
    • 2019-12-22
    • 2016-01-29
    • 2015-05-20
    • 2014-06-29
    • 2015-08-24
    • 2017-04-18
    • 1970-01-01
    相关资源
    最近更新 更多