asos2000 发表于 2022-7-6 12:58:35

文本之间的链接

当编辑第二个更改的文本时,lisp是否可以在两个文本之间创建链接
 
我用field做,但需要很长时间。

Lee Mac 发表于 2022-7-6 13:05:31

也许是使用对象反应器?

asos2000 发表于 2022-7-6 13:11:26

我不明白。
解释plz

Lee Mac 发表于 2022-7-6 13:12:48

好的,您提供了一个带有VLA对象(所有者)列表的对象反应器,当列表中的任何对象被修改时(取决于回调数据),反应器将启动。
 
因此,您可能可以将文本对象的句柄存储在其扩展数据中,以便在触发对象反应器时,程序知道链接了哪些对象。
 

CAB 发表于 2022-7-6 13:17:12

还要注意,为了使反应器正常工作,必须在图形中加载LISP例程。

JohnM 发表于 2022-7-6 13:24:16

这不是Lisp程序的答案,但:
链接两个对象(如文本)的简单方法是将文本制作成块。
然后,您可以将该块复制到任何位置,并根据需要制作尽可能多的副本。因此,当您编辑一个块时,所有其他块都会更新。
要编辑文本块,双击它,将出现“块信息”对话框,然后单击“确定”,将出现“参照编辑”工具栏框。现在双击要编辑的文本,完成后单击“参照编辑”工具栏上的最后一个按钮,以更新图形中的所有相同块。
我在画作中经常使用这种技巧来完成笔记。
注意:如果单击“参照编辑”工具栏上的红色X关闭按钮,它将消失,并且屏幕仍处于参照编辑模式。如果发生这种情况,只需键入refedit,工具栏就会重新出现。
对于lisp解决方案,您需要使用一个使用vlr修改的对象反应器,
vlr openedForModify事件和vlr复制的事件。
所以基本上
程序将要求用户选择文本(如果嵌入lisp,则将emane传递给程序)。
然后程序将反应堆连接到该对象。
vlr复制事件将用于将反应堆连接到文本的新副本
vlr openedForModify首先获取原始文本(DXF代码1),并将其保存到变量中
vlr modified事件将使用ssget,使用来自vlr openedForModify的变量来获取所有类似的文本对象,然后更改它们的文本。
我看到的问题是,如果您有50个类似的文本对象,则会为每个对象触发vlr修改事件,即使由于ssget将它们剔除,它不会更改其他文本。这将是大量的程序执行,毫无意义。我不认为这会因为文本对象的数量而变得糟糕,只是可能需要更多的时间来完成大量的对象。
有人对此有想法吗

Lee Mac 发表于 2022-7-6 13:28:29

我只是想链接特定的文本对象,通过将它们的句柄存储在对象的扩展数据中,然后反应器很快知道要查找哪些对象。
 
如本例所示:
 
http://www.cadtutor.net/forum/showpost.php?p=251211&postcount=12

CAB 发表于 2022-7-6 13:31:43

正如OP所说的“在两个文本之间”,所以李提到的选项也是我的方法。
我怀疑这两个文本对象可能不完全相同,但共享一些需要更新的数据。

Lee Mac 发表于 2022-7-6 13:34:32

谢谢Alan
 
Asos,这将帮助您编写对象扩展数据的句柄,只需创建一个有效的应用程序字符串(用于“app”参数)来标识数据。
 

(defun putxdat (Obj App Data / ent type1 valeur)

(setq xtype
   (vlax-make-variant
   (vlax-safearray-fill
       (vlax-make-safearray
         vlax-vbInteger '(0 . 1)) '(1001 1000))))

(setq xval
   (vlax-make-variant
   (vlax-safearray-fill
       (vlax-make-safearray
         vlax-vbVariant '(0 . 1)) (list App Data))))

(vla-setXData Obj xtype xval))

JohnM 发表于 2022-7-6 13:38:49

我认为需要更多信息
问题:
会有两个以上的文本对象吗?
两个文本对象中的数据是否总是相同的,或者只是部分文本将被更改?
这是多行文字还是单行文字?
页: [1] 2
查看完整版本: 文本之间的链接