我在 eCat 的‘

我的模型’目录下创建了一个自定义文件夹,里面存放了我建模的轨道段组件的模板模型。我的目标是使用插件文件(init.py文件和Command文件)从这些模型自动生成轨道,并且我没有使用 XML 文件,而是使用了一个包含段详细信息但没有 x、y、z 位置的 JSON 配置文件。放置是通过配置文件中的段长度和每个段的零位置值完成的,并通过接口进行连接。段正在生成,但它们在场景中的位置不正确或没有被正确平移,就好像它们有姿态锁定一样。有人能给我提示或见解,告诉我如何解决这个问题,或者指出我方法中的任何错误吗?

Generating components from eCatalog - Extensions and Python Add-ons

谢谢

fystro

也许你可以提供一下你用来设置段位置的代码。没有这个很难排查问题。
Could you maybe provide the Code you are using to set the position of the segments. It’s hard to problemshoot the issue without this.
请确保在更改组件的 PositionMatrix 后更新模拟,否则更改将不可见。为此,你可以使用以下代码:

sim.update()
app.render()
sim.setInitialState()

感谢回复

关于初始段的放置:
pm = vcMatrix.new()
pm.P.X = 0.0; pm.P.Y = 0.0; pm.P.Z = 0.0
c.PositionMatrix = pm

关于后续段的放置:
pm = vcMatrix.new(prev_comp.WorldPositionMatrix)
nm = vcMatrix.new(next_comp.PositionMatrix)

nm.P.X = pm.P.X + delta
nm.P.Y = pm.P.Y
nm.P.Z = pm.P.Z
next_comp.PositionMatrix = nm

目前我只尝试过使用 app.render(),因为我的理解是脚本中的更改会在关闭并重新打开脚本时更新。我正在将轨道生成到一个空世界中。

请注意,nm.P.X = 10.0 并不可行。这是因为 nm.P 会创建一个包含位置值的新 vcVector 实例,但创建后该实例与 nm 并无关联。因此,这只会设置该副本的 X 值,而原始矩阵的位置保持不变。请尝试改为:
P = nm.P
P.X = 10.0
nm.P = P

这是 VC API 中一个相当常见的错误,用户需要习惯这一点。

-k

2 个赞

谢谢,这解决了布局问题。