乐筑天下

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

[编程交流] 调用另一个LISP失败

[复制链接]

13

主题

146

帖子

136

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2022-7-6 14:13:07 | 显示全部楼层 |阅读模式
似乎无法完全正确地执行此操作。
 
在古代(!)下面是我在工作中使用的例行程序(但还不知道如何清理),有一句话:
(命令“DDATTE”bname)在下面的代码块中显示为红色
这将为刚创建的区域打开属性编辑器,以便可以输入属性数据。
 
我偶然发现CAB有一个很好的DDATTE/ATTEDIT替代品,叫做MyAttEdit。
它很容易修改以显示更多的属性行,这使得它比ATTEDIT有用得多,所以我想我应该尝试将其作为程序的一部分。
 
LSP和DCL位于支持路径中,LSP也位于acad中。文档文件。
作为一个独立的程序,它工作得很好,但当我尝试用这个例程调用它时。我得到错误“未知命令MyAttEdit”并且主例程退出。
 
当然,使用行(C:MyAttEdit)可以让它运行,但它不再与“bname”关联、连接或作用。
需要保持这种联系。
 
我想我遗漏了一些非常基本的东西,但我的大脑不想合作。
我在这里和这里阅读并尝试实施这些想法,但没有乐趣。
 
有人能给我指一下正确的方向吗?
 
谢谢
史蒂夫
 
 
  1. ;* DATE 05/20/93
  2. ;*REVISED 08/08/00
  3. (setvar "REGENMODE" 1)
  4. ;***********************************************************************
  5. ;* Function: DXF (Generic)
  6. ;* Created by: Rocky W. (3/10/94)
  7. ;* Parameters in:
  8. ;* Returns:
  9. ;* Comments: takes an integer DXF code and an entity list, and
  10. ;*    returns the data element of the associated pair.
  11. (defun err (s)
  12.   (if (not (MEMBER s '("console break " "Function cancelled")))
  13.      (princ (strcat "\nERROR: " s))
  14.   )
  15.   (progn
  16.      ;(command "_.U")
  17.      ;(COMMAND "_.redraw")
  18.   )
  19.   (setq *error* olderr)
  20.   (princ)
  21. )
  22. (defun DXF (code elist)
  23.   (cdr (assoc code elist))
  24. )
  25. ;***********************************************************************
  26. ;* Function:C:Hotspot
  27. ;* Used by:DSD group
  28. ;* Parameters in:
  29. ;* Returns:
  30. ;* Comments:Used to semi automate the process of assigning attributes to
  31. ;*          blocks and regions in a drawing.
  32. ;*          region is update by autobox for exiting region with new cords.
  33. (defun C:AUTOROCK(/ olderr)
  34. (c:BOXQA) ; outlines existing attributed regions (helps track progress across the drawing)
  35.   (command "ucs" "w");this sets the UCS back to World
  36.   (if (tblsearch "LAYER" "NOPLOT")
  37.      (command "_.Layer" "_S" "NOPLOT" "U" "NOPLOT" "")
  38.      (Progn
  39.         (command "_.Layer" "_M" "NOPLOT" "_C" "MAGENTA" "NOPLOT" "_LT" "CONTINUOUS" "NOPLOT" "U" "NOPLOT" "")
  40.      )
  41.   )      
  42.   (setq rin nil
  43.      mrin ""
  44.      ulsize nil
  45.      lrsize nil
  46.      textdatin ""
  47.      textdatout ""
  48.      var (getvar "CMDECHO")
  49.      atvar (getvar "AFLAGS")
  50.      a2 nil
  51.      atblk 1
  52.      dname (getvar "dwgname")
  53.      strleg (strlen dname)
  54.      strleg1(- strleg 4)
  55.      dpre  (getvar "dwgprefix")
  56.   drawname (substr dname 1 strleg1))
  57.   (setq olderr *error* *error* err)
  58.   (setq cmdech var)
  59.   (setvar "AFLAGS" 1)
  60.   (autobox2)       ;* call function
  61.   ; draw box from selection
  62.   (setq p2 (list (car ul) (cadr lr) )) ;lr corner
  63.   (setq p4 (list (car lr) (cadr ul) )) ;lr corner
  64.   ;function to draw colored vectored region
  65.   (grdraw ul p2 7 1)
  66.   (grdraw p2 lr 7 1)
  67.   (grdraw ul p4 7 1)
  68.   (grdraw p4 lr 7 1)
  69.   (prompt "\nPick all items that make up unit...")
  70.   (setq ss2 (ssget))
  71.   (setq a (dxf 2 (entget (ssname ss2 0))))
  72.   (if (/= a nil)
  73.      (setq a2 (tblsearch "BLOCK" a))     ;* true if a is a block
  74.      (progn                               ;* false
  75.         (setq xxx  (sslength ss2))   ;loop counter
  76.         (setq cxxx 1)
  77.         (setq textdat "")
  78.         (while (<= cxxx xxx)
  79.            (setq dat1 (entget (ssname ss2 (- cxxx 1))))
  80.            (setq txttype (cdr (assoc 0 dat1)))
  81.            (if (= txttype "TEXT")
  82.               (progn                    ;* progn start
  83.                  (setq txt1 (dxf 1 dat1))  ;if false
  84.                  (setq textdat (strcat textdat txt1 " "))
  85.                  (setq cxxx (+ 1 cxxx))
  86.               )                         ;*progn end
  87.            ) ;* endif
  88.         ) ;while end
  89.      ) ;*progn end
  90.   ) ;*endif block check
  91.   (if rin ()(setq rin ""))
  92.   (setq dscord (dxf 10 (entget (ssname ss2 0))))     ;* get insert point
  93.   (setq dscord (list (- (car dscord) 0.05) (-(cadr dscord) 0.05)))
  94.   (setq bname (ssname ss2 0))
  95.   (if (and (/= a nil)(= (sslength ss2) 1)(/= a2 nil))
  96.      (progn
  97.         (setq en bname)
  98.         (setq ed (entget en))
  99.         (while (/= "SEQEND" (dxf 0 ed))                     ;*** while 2
  100.            (setq en (entnext en))
  101.            (setq ed (entget en))
  102.            (setq tag (dxf 2 ed))
  103.            (setq val (dxf 1 ed))
  104.            (if (/= "SEQEND" (dxf 0 ed))                       ;*** if 2
  105.               (progn                                            ;*** progn 2
  106.                  (if (= "BOXSIZE" TAG)                                ;*** if 3
  107.                     (progn                                          ;*** progn 3
  108.                        (setq  ttval (read val))
  109.                        ;*      (strcase ttval)
  110.                        (if (/= ttval BSIZE)
  111.                           (progn         
  112.                              (setq ed (subst (cons 1 BSIZE)(assoc 1 ed) ed ))
  113.                              (entmod ed)
  114.                              (entupd en)
  115.                              (PRINC (STRCAT "BOXSIZE CHANGED  " BSIZE " " VAL "   "))
  116.                           )
  117.                        )
  118.                     )                                                ;*** progn 3
  119.                  )                                                 ;*** endif 3
  120.               )                                                  ;*** progn 2
  121.            )                                                   ;*** endif 2
  122.         )                                                    ;*** while 2
  123. [color=red];;;[/color]
  124. [color=red];;;   [b]In place of this line, I would like to call CAB's routine MyAttEdit[/b][/color]
  125. [color=red]  (command "DDATTE" bname)[/color]
  126. [color=red];;;   [/color]
  127. [color=red];;;   [/color]
  128.   )
  129.      (progn
  130.         (command "attdef" "" "NAME" "Enter NAME." textdat dscord "")
  131.         (setq nameattr1 (entlast))
  132.         (command "attdef" "" "RIN" "Enter RIN." RIN dscord "")
  133.         (setq nameattr2 (entlast))                                    
  134.         (command "attdef" "" "BOXSIZE"  "Enter boxsize.     " bsize dscord "")
  135.         (setq nameattr3 (entlast))
  136.         (command "attdef" "" "MRIN"  "Enter SCLSIS Rin." mrin dscord "")
  137.         (setq nameattr4 (entlast))
  138.         (setq CurLayer( getvar "clayer"))
  139.         (command "attdef" "" "CURRENTLAYER" "Enter Current Layer." "NOPLOT" dscord "")
  140.         (setq nameattr5 (entlast))
  141.         (command "attdef" "" "SHAPE" "Enter Object Shape Type." "R" dscord "")
  142.         (setq nameattr6 (entlast))
  143.         (command "attdef" "" "OBJTYPE" "Enter Object Type." "EQ" dscord "");MOD BY JDR 8/8/00
  144.         (setq nameattr7 (entlast))
  145.         (setq bname   (itoa atblk))
  146.         (while (tblsearch "BLOCK"   (strcat drawname "$ECC$" bname))
  147.            (progn                                       
  148.               (setq atblk (+ atblk 1)                    
  149.                  bname  (itoa atblk))
  150.            )
  151.         )
  152.        (setq bname (strcat drawname "$ECC$" bname))
  153.    (progn
  154.          (command "block" bname dscord  nameattr1 nameattr2 nameattr3 nameattr4 nameattr5 nameattr6 nameattr7 )  
  155.          (setq count 0
  156.            emax (sslength ss2)
  157.          )
  158.          (while (< count emax)
  159.            (command (ssname ss2 count))
  160.            (setq count (1+ count))
  161.          )
  162.          (setvar "ATTREQ" 1)
  163.          (setvar "ATTDIA" 1)
  164.          (command "" "insert" bname dscord "1" "1" "0" )
  165.    )
  166.      )
  167.   )
  168. (command "redraw") ;clears existing region outlines so NOID regions will display
  169. (NOID) ;* call function to display "neglect" regions
  170. )
  171. (princ)
  172. (defun AUTOBOX2()
  173.   (setq bsize nil)
  174.   (setq ul (getpoint "Pick UL corner: ")
  175.   lr (getcorner ul "Pick LR corner: "))
  176.   (setq bsize (strcat "("(rtos (car ul) 2 6) " " (rtos (cadr ul) 2 6) " " (rtos (car lr) 2 6) " " (rtos (cadr lr) 2 6)")" ))
  177. );AUTOBOX2
  178. ;;This part written by LeeMac (cadtutor.net) 14 May 2009. Thanks, Lee.
  179. (defun NOID (/ ss attLst Box ul lr); To outline regions with no ID
  180. (vl-load-com)
  181. (if (setq ss (ssget "_X" '((0 . "INSERT") (66 . 1))))
  182.    (progn
  183.      (foreach Obj (mapcar 'vlax-ename->vla-object
  184.                     (mapcar 'cadr (ssnamex ss)))
  185.        (setq attLst nil)
  186.        (foreach att (vlax-safearray->list
  187.                       (vlax-variant-value
  188.                         (vla-getAttributes Obj)))
  189.          (setq attLst (cons (cons (vla-get-TagString att)
  190.                                   (vla-get-TextString att)) attLst)))
  191.        (if (and (assoc "RIN" attLst)
  192.                 (eq "" (cdr (assoc "RIN" attLst)))
  193.                 (setq Box (assoc "BOXSIZE" attLst)
  194.                       Box (read (cdr Box))))
  195.          (progn
  196.            (setq ul (list (car Box) (cadr Box))
  197.                  lr (list (caddr Box) (cadddr Box)))
  198.            (grvecs (list 1 lr (list (car lr) (cadr ul))
  199.                          1 ul (list (car lr) (cadr ul))
  200.                          1 lr (list (car ul) (cadr lr))
  201.                          1 ul (list (car ul) (cadr lr)))))))))
  202. (princ)
  203. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:22:50 | 显示全部楼层
您可能需要调整CABs例程以接受参数,或使块对象的变量成为全局变量
回复

使用道具 举报

13

主题

146

帖子

136

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2022-7-6 14:26:11 | 显示全部楼层
谢谢我试试看。
 
史蒂夫
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 14:29:43 | 显示全部楼层
代替这个命令,试试这个
 
  1. (sssetfirst nil bname)
  2. (C:MyAttEdit)
回复

使用道具 举报

6

主题

249

帖子

247

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 14:39:48 | 显示全部楼层
比尔,不知道怎么了,但这在这里似乎不起作用。
我得到以下错误,
 
错误:错误的参数类型:lselsetp
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:41:48 | 显示全部楼层
这是因为“bname”是一个实体,而不是一个选择集。
回复

使用道具 举报

13

主题

146

帖子

136

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2022-7-6 14:46:56 | 显示全部楼层
我什么都做不到。我只能接受两步手术。
 
谢谢大家,
史蒂夫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:54:16 | 显示全部楼层
如果你发布CAB的例行程序或链接,我相信我能帮上忙
回复

使用道具 举报

13

主题

146

帖子

136

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2022-7-6 14:59:32 | 显示全部楼层
谢谢你的提议,李。
 
我不知道如何链接到zip文件,所以我将CAB的zip附加到了这条消息中。
 
原始线程的链接是:
http://www.theswamp.org/index.php?topic=6741.0
 
 
史蒂夫
MyAttEdit 03。拉链
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:03:02 | 显示全部楼层
好的,Steve,你所需要做的就是注释顶部的主要函数定义,向下到函数标题,用“+”符号概括。
 
然后,在你的日常生活中,只需:
 
  1. (myattedit bname nil nil)

 
代替你的红色代码。
 
(确保在运行代码时加载CAB的代码)。
 
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 03:17 , Processed in 0.427530 second(s), 72 queries .

© 2020-2025 乐筑天下

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