【问题标题】:How to get the order of SubRollouts in MaxScript如何在 MaxScript 中获取 SubRollouts 的顺序
【发布时间】:2021-11-15 12:05:34
【问题描述】:

我正在尝试访问 mainSubRollout 的属性,以了解子部署的顺序。

在运行下面的代码并将 Sub 2 rollout 像图像一样拖到顶部并检查 mainRolTest.mainSubRollout.rollouts 后,它总是返回 #(Rollout:subRollout1, Rollout:subRollout2),即使显示的 rollout 顺序不同。

如何访问它们当前的显示顺序?

图片的结果应该是:#(Rollout:subRollout2, Rollout:subRollout1)

try destroyDialog mainRolTest catch()

(

  rollout subRollout1 "Sub 1" autoLayoutOnResize:true
  (
    button theButton1 "Fake Button 1"
    )

  rollout subRollout2 "Sub 2"  autoLayoutOnResize:true
  (
    button theButton2 "Fake Button 2"
    )

  rollout mainRolTest "..."
  (

    button btn_close "X" align:#right offset:[13,-5]

    SubRollout mainSubRollout "" height:133 width:150 pos:[0,20]

    on btn_close pressed do destroydialog mainRolTest

    )

  createDialog mainRolTest 150 133 style:#() lockHeight:true lockWidth:true
  AddSubRollout mainRolTest.mainSubRollout subRollout1
  AddSubRollout mainRolTest.mainSubRollout subRollout2

  )

-- This always returns #(Rollout:subRollout1, Rollout:subRollout2)
-- Even though the order of the rollouts are not the same
-- How can i access this info?
mainRolTest.mainSubRollout.rollouts

【问题讨论】:

    标签: maxscript


    【解决方案1】:

    你总是可以使用他们的实际位置:

    fn sortByY A B = (windows.getWindowPos A.hWnd).y - (windows.getWindowPos B.hWnd).y
    rollouts = #() + mainRolTest.mainSubRollout.rollouts
    qSort rollouts sortByY --> 'rollouts' will now be sorted based on Y
    

    如果你想要索引并且不介意一点.NET,也可以这样做:

    iGlobal = (dotNetClass "Autodesk.Max.GlobalInterface").Instance
    rollupContainer = iGlobal.GetIRollup (UIAccessor.GetParentWindow mainRolTest.mainSubRollout.rollouts[1].hwnd)
    rollupContainer.GetPanelIndex mainRolTest.mainSubRollout.rollouts[2].hwnd
    

    为了完整起见,您也可以通过 Qt 来完成:

    QtWidgets = python.import "PySide2.QtWidgets"
    rolloutWidget = QtWidgets.QWidget.find (UIAccessor.GetParentWindow mainRolTest.mainSubRollout.rollouts[1].hwnd)
    ((rolloutWidget.parent()).layout()).indexOf rolloutWidget
    

    【讨论】:

    • 奇怪的是没有内置的方法来获得它。我想知道渲染对话框等中的那些卷展栏是如何记住它们的位置的。谢谢,这将允许我读取一个 ini 文件并根据该数组在它们的最后位置打开对话框。
    • 好吧,如果您使用 SDK,索引 存储并公开,因此从技术上讲,您也可以在 maxscript 中检索它们 - 我已经编辑了答案以显示那个。
    • 谢谢,剑客。 .NET 方法可能是我将使用的方法。
    猜你喜欢
    • 2020-01-27
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 2020-03-06
    • 1970-01-01
    相关资源
    最近更新 更多