1. 首页
  2. SketchUp

SketchUp观察员和被删除的实体信息可以解决这个问题

阅读其他主题后,我了解到,在实体观察者的onEraseEntity方法中,我无法访问已删除实体中的信息。
是否有观察者(或其他方式)获取某个事件,该事件将被删除?
我对当前软件所做的是让用户使用我的UI删除我的一个实体。什么时候发生这种情况时,我检查实体是什么,它是否与另一个实体关联(通过属性信息)。
例如,当用户删除一个窗口时,我看看它属于哪面墙去。然后呢然后我把墙上的洞关上,把窗户也去掉了。
问题当然是,用户只需选择窗口并以旧的方式删除它快点。这个在墙上留下一个洞墙。什么我需要做的是:
-看到窗口将被删除
-从窗口的属性中获取相关信息
-允许删除发生
-关闭墙上的洞
如果我不能用观察者来做这件事,有人知道我该怎么办吗?
提前感谢您的支持救命,你呢男人总是很有洞察力好主意。我的如果没有你,项目将陷入泥潭。
当你创建墙的实例时,你将定义它的初始属性,例如,
我是墙1
我有几个属性,比如颜色,高度等
没有窗口:但是当你创建一个窗口实例并放到墙1上时,你将定义它的属性,例如,
我是一个窗口1
我属于墙1,在这里和那里的某个位置,我的大小是这个和那个,然后创建这个窗口的最后一部分通知墙1,通过将墙1的属性修改为:
我是一个墙1
我有几个属性,比如颜色、高度,所以
现在有一个窗口:window1
位于这里和那里的窗口
我打开了一个洞对于大小为this和that的用户。
现在,您可以将一个观察者附加到window1实例,以侦听它是否被删除。
当用户删除此window1实例时,observer OnRaseEntity方法将启动。在该方法中,您仍然可以读取墙的属性(包含洞口信息),并注意关闭墙的洞口1,并将其属性修改回initials。
Class:Sketchup::EntityObserver
Johno3535:
是否有一个观察者(或其他方法)来获取将要删除的事件?
现在不行。API问题跟踪程序中有一个打开的请求…github.com/SketchUp/api-issue tracker 3已删除事件的观察员-应在删除前启动3已打开上海2019年12月9日上午5:39,2019年12月8日下午10:39洛杉矶2019年12月9日下午1:39 Fredosixx检测到实体、实例、定义等删除的所有观察者。。。开火…在移除后地点。作为因此,observer event方法的参数中传递的对象或id引用的是一个已删除的实体,因此完全没有用处,因为我们无法对其进行任何查询。**请求**:在删除之前触发observer事件,以便我们可以对对象或实体执行有意义的操作。有\”after\”事件只是一个加号,但如前所述,完全没有用。我认为无论如何**应该完全重新访问整个obserapi**。它的设计方式通常是不可用的,在许多情况下是错误的,即使一些错误已经在SketchUp版本中得到了修复。至少,任何事件驱动框架都会在事件发生之前和之后触发显式方法。此外,目前还不清楚在观察者方法中可以做什么和不可以做什么。观察器的概念非常强大,但至少可以说,当前的实现是有缺陷的。
Johno3535:
如果我不能用观察器来做这件事,有人知道我该怎么做吗?一般来说,您将需要访问的信息附加到实体层次结构中较高的对象上。
您可以使用DefintionsObersever#onComponentInstanceRemoved回调来触发对\”父\”对象属性的搜索。
@dezmo显示了上面的一个场景。
您可能没有意识到的是,一个AttributeDictionary是一个Entity子类对象,它本身也是有一个AttributeDictionaries的儿童词典集合(比如每个窗口和/或打开一个)。
谢谢@dezmo和@DanRathbun。
我对这些场景的问题是IFC导出。每个这些项目(墙、窗、门等)中的一个是IFC组件。我需要保存在要导出的组件词典中的信息当我执行导出。如果信息不包含在组件的字典,它不会被导出到IFC文件。
有什么想法吗?这与观察者的话题不同。请在论坛中搜索有关国际金融公司的讨论。
修好。基本上, 我需要在删除该项之前获取观察者事件,以便查询属性。但是我不能从元素中删除属性(正如您和@desmo所建议的),因为属性需要在那里国际金融公司这是一个难题。
也是您前面提到的API请求的一个很好的例子。
创建一个自定义观察者,将重要数据存储在其中并将其附加到窗口。
mobnamico/mobnamico_load
如果您不喜欢类(但是类是首选的),但希望捕获上下文:使用lambdas:
\”ex_hello_cube/main\”SketchUp在默认观察者中为您提供。
删除对象后观察者会发生什么?它是被sketchup删除的还是我需要跟踪它?
你现在的观察员怎么办?它是你的观察者对象。您的代码可以保持对它的持久引用……即,File.join(\”mobnamico\”, \”constants\”).
但是附加它的操作也意味着SketchUp的观察者队列也保留对它的引用。
删除任何附加了观察者的API对象时会发生什么情况?很简单,它们由SketchUp引擎从观察者回调队列中删除。如果没有其他引用,那么在下一个GC循环中,它们将被垃圾收集。
但是(正如您所发现的那样,include MobnamicoConstants回调在删除之后,但在清理之前被调用。我想我们都同意这几乎使回拨毫无价值。(如果可以检查include MobnamicoConstants对象的pid,可能会更好一些。)

SketchUp观察员和被删除的实体信息可以解决这个问题 为WP2原创文章,链接:https://www.wp2.cn/sketchup/sketchup%e8%a7%82%e5%af%9f%e5%91%98%e5%92%8c%e8%a2%ab%e5%88%a0%e9%99%a4%e7%9a%84%e5%ae%9e%e4%bd%93%e4%bf%a1%e6%81%af%e5%8f%af%e4%bb%a5%e8%a7%a3%e5%86%b3%e8%bf%99%e4%b8%aa%e9%97%ae%e9%a2%98/