老师好,rhino是否可以通过python或其他方式显示上一次隐藏的物件?(类似于撤销上一次隐藏)
比如sketch up的类似命令,撤销隐藏(但只能是最后一次)
或cad命令:LAYERP 恢复上一个图层状态,(可撤销多次)
因为建模时经常要局部隐藏或显示,不知道rhino是否有办法能够实现快捷的撤销上一次隐藏的方法?
老师好,rhino是否可以通过python或其他方式显示上一次隐藏的物件?(类似于撤销上一次隐藏)
比如sketch up的类似命令,撤销隐藏(但只能是最后一次)
或cad命令:LAYERP 恢复上一个图层状态,(可撤销多次)
因为建模时经常要局部隐藏或显示,不知道rhino是否有办法能够实现快捷的撤销上一次隐藏的方法?
我测试了一下,sellast并不能很好的选择最后一次隐藏是物件,在一些简单的操作后,会显示SelLast 的选取集合是空的。
你还可以试试 SelPrev, 如果选集比较多可能无法找到你需要内容,这样推荐你对物件进行 NamedSelection, 详情请浏览
https://docs.mcneel.com/rhino/7/help/zh-cn/index.htm#commands/namedselections.htm
命名选集是一种妥协且有点麻烦的方法,大多数情况下我用的非常少,如果能实现按顺序撤销隐藏,我感觉对建模操作及效率会有很大提升,简单且符合操作逻辑,我试过用chartGPT写一段python的代码,但也没有成功
没有完美的解决方案,有个折中的办法是建模过程中用 隔离物件(Isolate) / 取消隔离物件(Unisolate) 临时隐藏和显示物件。
主要利用了工具的特性:Unisolate 指令只能显示全部被 Isolate 指令隐藏的物件。如果物件是通过 Hide 指令隐藏的,则不会被显示。
是的,unisolate可以做一些辅助的显示工作,但建模的隐藏过程是随机的,isolate和hide都用的比较多,所以恢复或者撤销显示应该是一个比较必要的功能,另外unisolate只能使用一次,连续的两次isolate隔离后,也不能记录更上一次的。
下面付ai提出的解决代码,供大家讨论一下(不知是否有发展的可能性)
在Rhino 7中,可以使用以下代码来实现显示或撤销上一次隐藏的物体的命令:
import rhinoscriptsyntax as rs
# Custom list to store the IDs of previously hidden objects
previous_hidden_objects = []
def hide_objects():
# Get selected objects
selected_objects = rs.SelectedObjects()
if selected_objects:
# Hide selected objects
rs.HideObjects(selected_objects)
# Add the IDs of hidden objects to the record
previous_hidden_objects.extend(selected_objects)
def show_previous_hidden_objects():
if previous_hidden_objects:
# Show the previously hidden objects
rs.UnhideObjects(previous_hidden_objects)
def undo_hide_objects():
if previous_hidden_objects:
# Unhide the previously hidden objects
rs.ShowObjects(previous_hidden_objects)
# Clear the record of hidden objects
previous_hidden_objects.clear()
# Run the custom command
if __name__ == "__main__":
hide_objects()
这段代码中,我们添加了一个新的函数undo_hide_objects()
,用于撤销隐藏的物体。它会显示之前隐藏的所有对象,并清除记录隐藏物体的列表。
请注意,这个代码仍然只能追踪隐藏的对象,而无法检测到其他任何形式的隐藏(例如通过层或视图来隐藏)。对于更复杂的场景,您可能需要进一步探索Rhino的API和功能。
非常抱歉之前的回答仍然不正确。在Rhino中,没有直接的方法来获取上一次隐藏的物体。不过,您可以使用自定义的脚本来实现这个目标。
以下是一个示例脚本,它会在每次隐藏物体时记录隐藏的物体ID,并且可以随时通过运行命令来显示上一次隐藏的物体:
import rhinoscriptsyntax as rs
# 用于记录上一次隐藏的物体ID的变量
previous_hidden_objects = []
def hide_objects():
# 获取选择的物体
selected_objects = rs.SelectedObjects()
if selected_objects:
# 隐藏选择的物体
rs.HideObjects(selected_objects)
# 将隐藏的物体ID添加到记录中
previous_hidden_objects.extend(selected_objects)
def show_previous_hidden_objects():
if previous_hidden_objects:
# 显示记录中的上一次隐藏的物体
rs.ShowObjects(previous_hidden_objects)
# 运行自定义命令
if __name__ == "__main__":
hide_objects()
请将上述代码复制到Rhino的Python编辑器中(通过运行EditPythonScript
命令打开编辑器),然后保存并运行代码。每当您选择并隐藏物体时,它们的ID将被记录在previous_hidden_objects
变量中。然后,您可以随时运行show_previous_hidden_objects()
命令来显示上一次隐藏的物体。
请注意,这个方法只会追踪隐藏的物体,而不会追踪删除或其他操作。如果在隐藏操作之后执行了其他操作,则可能无法正确显示上一次隐藏的物体。
如果想通过脚本一直监听隐藏的序列,其实并不好做。
McNeel 论坛有类似的讨论,你可以看看,这里不再做回答。