自定义 Turbosmooth 修改器插件不更新网格

Custom Turbosmooth Modifier Plugin not updating the mesh

很高兴第一次来到 Whosebug:)

我想请求你的帮助,因为我找不到关于我的问题的任何解决方案和文档:( 我想为自己制作一个脚本,我可以为对象添加实例化的自定义涡轮平滑修改器。这些将使用根节点上自定义属性的参数。 有了这个,我可以从我的对话框中操纵我的 highpolys 上的所有 turbosmooths。 我知道如果我只是将一个对象放入场景中并使用 turbosmooth 并从中获取实例会更容易,但我不想为此向视口添加任何节点。另一方面,我只是想学习一些技巧:)

所以我的问题是,如果我只添加一个简单的微调器来单独控制迭代,与原始 TS 相比,修改器会停止自我更新。我真的不知道为什么自定义推出会终止自动网格更新。也许我可以在委托之后添加一个 'update $' 或其他东西,但它不会工作,如果它需要在实例对象上 运行。

plugin modifier myMod
name:"BTSmooth"
classID:#(0x753e4721, 0x1d99e401)
extends:turbosmooth replaceUI:false version:1
(
  parameters main rollout:params
  (
    Iterats type:#integer animatable:true ui:Iterats default:1
    on Iterats set val do 
    (
        delegate.iterations = val
    )
  )
  rollout params "BTSmooth"
  (
    spinner Iterats "Iterat " type:#integer range:[0,4,2]
  )
)

如果您尝试扩展 turbosmooth,它 stops working。如果您计划让一个 CA 来控制一切,您也可以将一个 bezier_float 控制器分配给它的参数并实例化这个控制器。比方说:

ts = TurboSmooth()
ts.iterations.controller = path_to_your_param.controller
addModifier objs ts

首先你当然可以测试场景中是否已经有一些依赖于这个控制器的涡轮平滑修改器,只有当有none时,创建一个新的:

ts = for d in refs.dependents path_to_your_param.controller where isKindOf d TurboSmooth do exit with d
if not isKindOf ts TurboSmooth do ts = TurboSmooth()