乐筑天下

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

[编程交流] 程序工作,但有错误

[复制链接]

4

主题

68

帖子

69

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 12:56:50 | 显示全部楼层 |阅读模式
大家好,
 
我找到了cadalyst发布的“ATT-SELECT.lsp”。
 
它的作用:
-收集块的一个属性作为输入
-请注意此属性的值
-将属性标记和值与具有相同名称的所有其他块进行比较
-将匹配块放入选择集中
-最后提示一条消息,并告诉用户有多少这种类型的块具有相同的值。
 
这工作得很完美,速度也很快,因为程序通过ssget过滤器选择解析块名,并循环两次进行比较。
 
在我的例子中,所有要比较的块都被一条闭合多段线包围。
这使得:
-取选择集,
-提取插入点
-使用此插入点调用bhatch命令
-并对所有匹配的已建立区块进行bhatch。
 
我将代码中糟糕的部分直接放在最终提示消息之前,因此我确信选择集已经完成,我可以完成我的部分。
 
令我惊讶的是,所有的工作都很完美——除了少数情况下图案填充会失败(但这是一个小问题)——例程现在运行得相当慢,因为逐点图案填充需要时间,每次绘制图案填充后,我都会收到消息“未知命令”TT
 
但是我确信程序知道这个命令,因为它被定义为(defun C:TT()
 
谁能解释一下为什么会这样?
 
代码下方:
  1. ;;;CADALYST 07/06  Tip2128: ATT-SELECT.lsp  Attribute Filter   (c) Raymond Rizkallah
  2. (defun rt1 ()                            ;;; only ATTRIB or NULL will be selected
  3.    (setq e1 (nentsel "\nSelect attribute to filter: "))
  4.    (if (null e1)
  5.      (progn (setq ex_tag nil) (QUIT))
  6.      (progn
  7.        (while (/= (cdr (assoc 0 (entget (car e1)))) "ATTRIB")
  8.          (PRINC "Attribute not found. ") (princ (cdr (assoc 0 (entget (car e1)))))   
  9.          (RT1)
  10.        ) ;end while
  11.         
  12.      )   ;end progn
  13.    )     ;end if
  14. )
  15. ;__________________________________________________________
  16. (defun C:TT ()
  17.   (RT1)
  18. ;  (setq e1 (nentsel "\nSelect attribute to filter: "))
  19.   (setvar "cmdecho" 0)
  20.   (setq eget (entget (car e1)))
  21.   (setq EX_STR (cdr (assoc 1 EGET)))   ;EXISTING TEXTSTRING
  22.   (setq ex_tag (cdr (assoc 2 EGET)))   ;EXISTING tag
  23. (SETQ PT1 (CADR E1))
  24. (SETQ SS0 (SSGET PT1))
  25. (SETQ BLKNAME (CDR (ASSOC 2 (ENTGET (SSNAME SS0 0)))))
  26. (prompt (strcat "\n Block: " blkname "   Attribute tag: " ex_tag "   >: " ex_str "\n "))
  27. ; +++ added code for new line at the end of prompt, just for better reading  
  28. ;______________ SELECTING BLOCKS "BLKNAME" _________________
  29. (SETQ LST1 (LIST '(0 . "INSERT") (CONS 2 BLKNAME)) )
  30. (SETQ SS1 (SSGET "X" LST1))
  31. ; (SETQ SS1 (SSGET LST1))
  32. ; (IF (NULL SS1) (SETQ SS1 (SSGET "X" LST1)) )
  33. (setq SSM (SSADD))
  34. (setq len1 (sslength ss1) n1 0 ssx (ssadd))
  35. (WHILE (< n1 len1) ;WHILE 1
  36.    (setq ename1 (ssname ss1 n1) eget1 (entget ename1) CTRL1 nil COUNTER 0 str1 "")
  37.    (SETQ en1 ename1)
  38.    ;____ Find Tag Level
  39.    (while (and (null ctrl1) (/= (CDR (ASSOC 0 (ENTGET (setq en1 (ENTNEXT en1))))) "SEQEND"))
  40.           (setq tag1 (CDR (ASSOC 2 (ENTGET en1))))
  41.           (if (= tag1 ex_tag) (setq str1 (CDR (ASSOC 1 (ENTGET en1))) ctrl1 T))
  42.           (setq counter (1+ counter))
  43.    ) ;end while2
  44.    ;_____
  45.    ;(if (= str1 ex_str) (princ str1))
  46.    (if (= (STRCASE str1) (STRCASE ex_str)) (setq ssx (ssadd ename1 ssx)))
  47.    (setq n1 (1+ n1))
  48. ) ; end WHILE1
  49.             
  50. (setq lenx (sslength ssx))  
  51. (command "._select" ssx "")
  52. [color=RoyalBlue]; +++ from here starts my code +++
  53. (command "_zoom" "_e") ; zoom to extends, neccassary for hatching
  54. (repeat (setq n (sslength ssx)) ; loop till any part of the selection-set is proccessed
  55.    (setq en (ssname ssx (setq n (1- n)))) ; get entity-name
  56.    (setq p1 (cdr (assoc 10 (entget en)))) ; extract insertion-point
  57.    (progn ; force hatch to use solid
  58.      (setvar "HPNAME" "SOLID")
  59.      (command ".-bhatch" p1 "" "") ; do a hatch, point to the insertion-point of entity
  60.    ) ; end of progn
  61. )                    ; end of repeat
  62. ; +++ end of my code +++[/color]
  63. (PROMPT (strcat "\n Match found : [" (itoa lenx) "].   Selected objects are stored in Previous Selection."))
  64. (setvar "cmdecho" 1)
  65. (princ)
  66. )
  67. ;_____________________________________________________________
  68. (prompt "\n Start command with [TT]  - by Raymond Rizkallah -  April 06. ")
  69. (PRINC)
问候
沃尔夫冈
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 13:13:33 | 显示全部楼层
这通常意味着您的代码中有一个额外的“”,它尝试重新调用最后一个命令mid lisp。。。
 
回复

使用道具 举报

4

主题

68

帖子

69

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 13:22:05 | 显示全部楼层
李,
 
谢谢你的快速回答(像往常一样)!
 
我在我的中找到了多余的“”-bhatch命令。
改变
  1. (command ".-bhatch" p1 "" "")

一切都很完美!
 
亲切的问候
沃尔夫冈
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 13:34:02 | 显示全部楼层
另一种方法:
 
  1. 3
回复

使用道具 举报

4

主题

68

帖子

69

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 13:55:22 | 显示全部楼层
李,
 
我花了两天零一个晚上的时间在我在万维网上找到的东西上添加了10行代码。
 
你需要53分钟,包括阅读我的消息,设置你的代码和张贴!
 
我在许多论坛上搜索了属于autocad lisp的不同主题,有一天我注意到,大约一年前,一个叫“Lee Mac”的人在这里和沼泽地开始了第一篇帖子。
 
看到你每天都在增长的编程技能真是太棒了!
你给我们的不仅仅是一些善意的建议,这太好了!
 
我可以建议您对代码做一点小改动吗?
 
请在其中添加(蓝色的):
如果孔图不可见,这将确保图案填充功能不会停止。(我建议您始终必须“放大”以选择属性)。
 
 
亲切的问候
沃尔夫冈
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:06:48 | 显示全部楼层
谢谢Wolfgang
 
请随意修改我的代码,我张贴它来帮助你学习。
 
谢谢
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 03:11 , Processed in 0.416917 second(s), 64 queries .

© 2020-2025 乐筑天下

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