这两天有人在群里一直问怎么通过脚本查询当前场景中是否存在某个物体,这个问题,如果身边没有直接能回答的人,那么不妨查阅XSI的SDK,像这种基本的问题,是很容易找到答案的。
下面,我例举一下最常见的2种方法
方法1:
模型对象的FindChild方法
这个方法的好处是,使用物体的对象模型的方法,可以实现基于选择对象的子物体查询,并且,通过此方法的第二个形参,还可以定义只针对某一类型物体进行查询,因为model类型物体拥有独立的命名空间,因此,不同模型下,可能存在名称完全相同的物体。另外FindChild只会返回查询过程中第一个匹配的对象,如果想要发挥多个同名或复合名称规则的对象,那么可以考虑使用FindChildren方法。具体细节参见SDK。
App = Application
Log = App.LogMessage
o_SceneRoot = App.ActiveProject.ActiveScene.Root
o_Obj = o_SceneRoot.FindChild("Cube")
Log(o_Obj)
方法2:
场景字典GetObject方法
这个方法只通过名称在场景中查询,并且只返回第一个查询到的匹配对象,另外,如果没有查询到匹配的结果,函数默认会抛出异常,所以下面的代码我做了异常处理。输入False作为第二形参,可关闭异常抛出。这个方法查询时无视层级关系,相比起第一种方法,缺乏灵活性。但是代码很好写。
App = Application
Log = App.LogMessage
try:
o_Obj = App.Dictionary.GetObject("Cube")
Log(o_Obj)
except:
Log("Not Exist")
评论