乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 256|回复: 13

使用一个实体来控制另一个实体?

[复制链接]

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2019-1-10 11:35:28 | 显示全部楼层 |阅读模式
假设我有一条线和一条弧线。我希望线的长度由弧的长度控制。但是,弧线是一个隐藏的,不可见的对象。因此,当选择线时,我希望显示弧线的夹点,并与线的夹点一起拖动。但是,我不希望通过仅向其添加弧来修改隐含的选择集。这有可能吗?
我实际使用的是弧线和该弧的Civil3D曲线标签。这是我希望不可见的弧线,但在选择标签时需要对其进行编辑。我认为线/弧会更容易解释...我尝试使用ImpledSelectionChanged事件,检查我添加到标签的Xdata,如果找到这样的标签,则将弧添加到MeatmentSelectionSet。这实际上像我希望的那样工作,除了它打破了隐含选择集中标签的正常C3D编辑。
我还尝试获取弧形夹点,并将其添加到标签抓地力点。到目前为止,这导致了许多致命错误,所以我将其更改为MetroatSelectionChanged选项。我宁愿让它工作,但我没有想法。如果我能得到一个线/弧场景的例子,我相信我可以调整它以用于标签/弧。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2019-1-13 19:20:00 | 显示全部楼层
很多观点,所以我想大家对此有些兴趣。我已经做了很多工作,并在一个小的示例类中实现了我所希望的效果,附后(使用AutoCAD 2018开发,应该适用于任何版本2010+)。还有两件事我一直在纠结。
第一个问题,也不是最大的问题,是我无法在拖动手柄时更新弧线。
第二,也可能是最大的障碍,就是有许多条目被添加到撤消堆栈中。我试过用普通事务,OpenClose事务,没有事务。似乎都留下了相同数量的撤销条目。我一点也不喜欢这样,也看不出我在做什么来增加这些内容。
非常感谢对这两方面的任何帮助。下面是一个简短的视频,展示了示例工具的运行。
https://www . screen cast . com/t/CCDrzlHjonrI
回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2019-1-13 20:51:08 | 显示全部楼层

嘿,Jeff,我很好奇你想完成什么。这个想法看起来确实非常有用。
您能否发布一个gif或非flash视频链接?
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2019-1-14 11:11:30 | 显示全部楼层
这是从swf文件创建的GIF。它开始慢,因为我不知道它开始录音。
回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2019-1-14 13:17:20 | 显示全部楼层
这是一个很酷的实现。
将可见物体与不可见物体捆绑在一起的想法很有趣。这条线如何知道哪条看不见的弧线是它的父弧?我目前正在将两个可见对象绑定在一起,方法是将一个对象的句柄编写为另一个对象的扩展数据。只要用户不复制或粘贴剪辑它们,这种方法就有效。
至于多次撤消,您是否尝试过创建一个事务来启动,并将其传递给任何需要调用的函数?
编辑:我建议使用动态块,但我认为这是不可能的,因为你希望将其应用于Civil3d对象。
此外,我刚刚意识到您发布了代码以供阅读。为代码中回答的任何愚蠢的问题道歉。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2019-1-14 16:38:38 | 显示全部楼层
我将每个对象的句柄保存在另一个对象的Xdata中,以便它们之间有链接。虽然,由于弧线是不可见的,因此无法通过正常选择来选择(可以在代码中获取,但大多数用户不需要这样做),但它确实不需要知道该行。选择线将显示弧形夹点所在的夹点(这些不是弧的实际夹点),然后根据夹点的移动重新计算弧形。您将在代码中看到,如果擦除该行,我也会擦除不可见的弧线,因此它不会留下来污染绘图。
至于复制问题,对于带有C3D标签的最终版本,无论如何都无法复制它们,所以我应该不会有任何问题。
GripOverrule 具有 GetGripPoints 和 MoveGripPoints 方法,这些方法与 Line 的选择相关联,默认情况下,Autocad 会打开该行进行写入。但是,要使用 Arc,必须在这两种方法中打开它进行写入,以便显示它,然后对其进行修改。这些方法在握柄编辑期间多次触发。我刚刚在测试中对弧进行了1次编辑,并为该1次编辑添加了76个撤消条目。这大约是75太多了。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2019-1-17 15:55:29 | 显示全部楼层
我最终在Autodesk .NET论坛上发布了这个。Virupaksha Aithal认为,多个Undo条目的罪魁祸首可能是GetGripPoints中弧形上的Open.ForWrite调用。果然,将其更改为 ForRead,并将修改弧线显示的 2 个调用移动到 MoveGripPointsAt 方法解决了 Undo 问题。以下是预期应用程序的最终结果。
回复

使用道具 举报

57

主题

559

帖子

13

银币

中流砥柱

Rank: 25

铜币
786
发表于 2019-1-17 17:09:55 | 显示全部楼层

干得好,杰夫。
回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2019-1-17 20:11:32 | 显示全部楼层

x 2!!
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2019-1-17 21:35:31 | 显示全部楼层
哇,杰夫,看起来太棒了!看起来是一个很棒的UI增强。
Arc的这些变化。通过覆盖、扩展或其他类型的覆盖来完成?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 08:52 , Processed in 0.194814 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表