超链接?
首先,我对编写lisp非常陌生:不确定:我有一个小的lisp,用来更改lwpolyline的z值,我有一个超链接设置,当我悬停在lwpolyline上时,它会显示该值。我实际上没有链接到任何东西。所以我的问题是,我能去掉超链接框中的文字吗?超链接框中写着“Ctrl+单击以跟随链接”?
;Zdepth lisp
;Moves a single selected polyline Z coordinate to user
specified elevation
;Created 7/9/09 DJM
( defun c:RX (/ a x b c d a1 )
(setvar "cmdecho" 1)
(setq a(entget (car (entsel))))
(setq x(cdr (assoc -1 a)))
(setq b(assoc 38 a))
(setq c(getreal "\nENTER NEW Z VALUE"))
(setq d(cons (car b ) c))
(setq a1(subst d b a))
(entmod a1)
(setq c(rtos c 2 3))
(command "-hyperlink" "i" "o" x "" "current drawing" "none" c)
)
我只看到Z长度或厚度,其他什么都看不到。
我没有看到你提到的超链接框中的文本。
我还注意到,如果对象的z值实际上不同,则为超链接输入的任何值都将不正确。 谢谢你看。它可能是显示或不显示该文本的超链接设置。
超链接值是为z高程移动键入的任何值,因此在使用此例程时,只要z高程发生变化,超链接值就应该发生变化。
哦,顺便提一下,我正在WIN XP系统上使用autocad 2008。我不确定这是否有什么不同,但我之前没有提到。
最初我是在2004年测试的。自从你提出了这个版本的想法,我在2009年也测试了它,是的,我现在看到了信息。
在这个阶段不确定如何摆脱它。我会检查命令和任何相关变量,看看这是否可以更改。如果我先找到什么,我会引起你的注意。
另请查看此链接:
http://www.cadtutor.net/forum/showthread.php?t=36273
它做了一些我认为你试图做的事情。
我不太确定,不过还是看一看。 我不确定是否可以删除Ctrl+click消息,但这里有一种替代方法:
(defun c:rx (/ ent Obj zVal)
(vl-load-com)
(while
(progn
(setq ent (car (entsel "\nSelect LWPolyline: ")))
(cond ((eq 'ENAME (type ent))
(if (not (eq "AcDbPolyline"
(vla-get-ObjectName
(setq Obj (vlax-ename->vla-object ent)))))
(princ "\n** Object is not an LWPOLYLINE **")))
(t (princ "\n** Nothing Selected **")))))
(if (setq zVal (getdist "\nEnter New Z Value: "))
(progn
(vla-put-Elevation Obj zVal)
(vla-add
(vla-get-Hyperlinks Obj)
(vl-princ-to-string zVal))))
(princ))
如果可以的话,我想提出几点建议:
[列表]
[*]为变量使用更多描述性名称,这使代码10x更易于阅读和理解-尤其是在您第一次学习时。
[/列表]
[列表]
[*]使用条件语句,例如IF或WHILE循环,以允许用户输入为空,或错过单击-否则将导致错误。
[/列表]
[列表]
[*]使用“命令”功能时,包括语言兼容性前缀,即:
[/列表]
(command "_.line" (list 0 1 0) (list 2 3 4) "")
[列表]
[*]在本地化变量方面做得很好,许多新的LISP'er都忽略了这一点,这可能会带来很多麻烦。。
如果你还有其他问题,尽管问
李 谢谢你的指点,我喜欢关于变量更具描述性的部分。
根据您那里的代码,当我第一次编辑Z标高时,超链接是正确的。当我使用相同的例程再次更改高程时,超链接信息没有更改。当然,“Ctrl+click-to-follow链接”仍然存在。
谢谢你的帮助。 我不允许重新编辑超链接,将更新代码。
是的,正如我在上一篇文章中所说的,我认为你不能删除Ctrl+click消息。
李 代码已更新,假设每个对象有一个超链接:
(defun c:rx (/ ent Obj zVal)
(vl-load-com)
(while
(progn
(setq ent (car (entsel "\nSelect LWPolyline: ")))
(cond ((eq 'ENAME (type ent))
(if (not (eq "AcDbPolyline"
(vla-get-ObjectName
(setq Obj (vlax-ename->vla-object ent)))))
(princ "\n** Object is not an LWPOLYLINE **")))
(t (princ "\n** Nothing Selected **")))))
(if (setq zVal (getdist "\nEnter New Z Value: "))
(progn
(vla-put-Elevation Obj zVal)
(if (zerop
(vla-get-Count
(setq hlnk
(vla-get-Hyperlinks Obj))))
(vla-add hlnk(vl-princ-to-string zVal))
(vlax-for lnk hlnk
(vla-put-url lnk zVal)))))
(princ))
页:
[1]