DMcNiel 发表于 2022-7-6 14:14:14

超链接?

首先,我对编写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)


)

The Buzzard 发表于 2022-7-6 14:26:15

 
我只看到Z长度或厚度,其他什么都看不到。
我没有看到你提到的超链接框中的文本。
 
我还注意到,如果对象的z值实际上不同,则为超链接输入的任何值都将不正确。

DMcNiel 发表于 2022-7-6 14:38:56

谢谢你看。它可能是显示或不显示该文本的超链接设置。
 
超链接值是为z高程移动键入的任何值,因此在使用此例程时,只要z高程发生变化,超链接值就应该发生变化。
 
哦,顺便提一下,我正在WIN XP系统上使用autocad 2008。我不确定这是否有什么不同,但我之前没有提到。

The Buzzard 发表于 2022-7-6 14:40:06

 
最初我是在2004年测试的。自从你提出了这个版本的想法,我在2009年也测试了它,是的,我现在看到了信息。
在这个阶段不确定如何摆脱它。我会检查命令和任何相关变量,看看这是否可以更改。如果我先找到什么,我会引起你的注意。
 
另请查看此链接:
http://www.cadtutor.net/forum/showthread.php?t=36273
它做了一些我认为你试图做的事情。
我不太确定,不过还是看一看。

Lee Mac 发表于 2022-7-6 14:48:47

我不确定是否可以删除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都忽略了这一点,这可能会带来很多麻烦。。
如果你还有其他问题,尽管问
 

DMcNiel 发表于 2022-7-6 14:57:14

谢谢你的指点,我喜欢关于变量更具描述性的部分。
 
根据您那里的代码,当我第一次编辑Z标高时,超链接是正确的。当我使用相同的例程再次更改高程时,超链接信息没有更改。当然,“Ctrl+click-to-follow链接”仍然存在。
 
谢谢你的帮助。

Lee Mac 发表于 2022-7-6 15:05:52

我不允许重新编辑超链接,将更新代码。
 
是的,正如我在上一篇文章中所说的,我认为你不能删除Ctrl+click消息。
 

Lee Mac 发表于 2022-7-6 15:18:57

代码已更新,假设每个对象有一个超链接:
 

(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]
查看完整版本: 超链接?