乐筑天下

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

[编程交流] 透镜型nil

[复制链接]

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 23:08:59 | 显示全部楼层 |阅读模式
将对话框中的块插入图形时,偶尔会出现错误。
只需关闭autocad,然后重新打开autocad,即可阻止错误的发生。
但这种情况经常发生,我想得到一些帮助,因为我找不到任何会导致实体错误随机发生的东西
 
  1. (vl-load-com)
  2. (defun ssvla (selection-set / index vla-list)
  3. (setq index (if selection-set
  4. (1- (sslength selection-set))
  5. -1
  6.       )
  7. )
  8. (while (>= index 0)
  9.    (setq vla-list (cons (vlax-ename->vla-object
  10.      (ssname selection-set index)
  11.    )
  12.    vla-list
  13.     )
  14.   index    (1- index)
  15.    )
  16. )
  17. vla-list
  18. );; ssvla
  19. (defun HORIZ (/ ss)
  20. (if (setq ss (ssget "_L" '((0 . "INSERT")(66 . 1))))
  21.    (foreach obj (ssvla ss)
  22.      (foreach att (vlax-safearray->list
  23.       (vlax-variant-value (vla-getattributes obj))
  24.     )
  25. (vla-put-rotation att 0.0)
  26.      )
  27.    )
  28. )
  29. (princ)
  30. );horiz defun
  31. (defun c:PIPpsvs (/ Dcl_Id% Folder$ Slides@ Slide1$ Slide2$ Slide3$ Slide4$ Slide5$ Slide6$ Slide7$ Slide8$ Slide9$ Slide10$ Slide11$ Slide12$ Slide13# Return$ X# Y# ss a1 a2 a3 p2 p3 osm insertpt1 *error*)
  32. (command "_.undo" "_begin")
  33. (defun *error* ( msg )
  34.      (if osm (setvar 'OSMODE osm))
  35.      (if snpm (setvar 'SNAPMODE snpm))
  36.      (if snp (command "snap" snp))
  37.      (if echo (setvar 'CMDECHO echo))
  38.    (if (not (member msg '("Function cancelled" "quit / exit abort")))
  39.        (princ (strcat "\nError: " msg))
  40.    )
  41.    (princ)
  42.    (command "_.undo" "_end")
  43.    )
  44.        (princ "\n*************PSV's Dialog*************")(princ)
  45. (princ "\n")
  46.    ; Set Default Variables
  47.   (setq Slides@ (list nil "SA001" "SA002" "SA003" "SA004" "SA005" "SA006" "SA007" "SA008" "SA009" "SA010" "SA011" "SA012" "SA013")
  48.         Slide1$ (nth 1 Slides@)
  49.         Slide2$ (nth 2 Slides@)
  50.         Slide3$ (nth 3 Slides@)
  51.         Slide4$ (nth 4 Slides@)
  52.         Slide5$ (nth 5 Slides@)
  53.         Slide6$ (nth 6 Slides@)
  54.         Slide7$ (nth 7 Slides@)
  55.         Slide8$ (nth 8 Slides@)
  56.         Slide9$ (nth 9 Slides@)
  57.         Slide10$ (nth 10 Slides@)
  58.         Slide11$ (nth 11 Slides@)
  59.         Slide12$ (nth 12 Slides@)
  60.         Slide13$ (nth 13 Slides@)
  61.         Folder$ ""
  62.         Return$ ""
  63.   );setq
  64.    ; Load Dialog
  65.   (setq Dcl_Id% (load_dialog "PIPpsvs.dcl"))
  66.   (new_dialog "PIPpsvs" Dcl_Id%)
  67.    ; Set Dialog Initial Settings
  68.   (set_tile "Title" "PRESSURE RELIEF VALVES")
  69.   (set_tile "SA001" Slide1$)
  70.   (set_tile "SA002" Slide2$)
  71.   (set_tile "SA003" Slide3$)
  72.   (set_tile "SA004" Slide4$)
  73.   (set_tile "SA005" Slide5$)
  74.   (set_tile "SA006" Slide6$)
  75.   (set_tile "SA007" Slide7$)
  76.   (set_tile "SA008" Slide8$)
  77.   (set_tile "SA009" Slide9$)
  78.   (set_tile "SA0010" Slide10$)
  79.   (set_tile "SA0011" Slide11$)
  80.   (set_tile "SA0012" Slide12$)
  81.   (set_tile "SA0013" Slide13$)
  82.    ; Adjust X# and Y# per image_buttom outline to fit slide_image
  83.   (start_image "Slide1")
  84.   (setq X# (- (dimx_tile "Slide1") 2))
  85.   (setq Y# (- (dimy_tile "Slide1") 2))
  86.   (end_image)
  87.   (start_image "Slide1")(slide_image 1 1 X# Y# (strcat Folder$ Slide1$))(end_image)
  88.   (start_image "Slide2")(slide_image 1 1 X# Y# (strcat Folder$ Slide2$))(end_image)
  89.   (start_image "Slide3")(slide_image 1 1 X# Y# (strcat Folder$ Slide3$))(end_image)
  90.   (start_image "Slide4")(slide_image 1 1 X# Y# (strcat Folder$ Slide4$))(end_image)
  91.   (start_image "Slide5")(slide_image 1 1 X# Y# (strcat Folder$ Slide5$))(end_image)
  92.   (start_image "Slide6")(slide_image 1 1 X# Y# (strcat Folder$ Slide6$))(end_image)
  93.   (start_image "Slide7")(slide_image 1 1 X# Y# (strcat Folder$ Slide7$))(end_image)
  94.   (start_image "Slide8")(slide_image 1 1 X# Y# (strcat Folder$ Slide8$))(end_image)
  95.   (start_image "Slide9")(slide_image 1 1 X# Y# (strcat Folder$ Slide9$))(end_image)
  96.   (start_image "Slide10")(slide_image 1 1 X# Y# (strcat Folder$ Slide10$))(end_image)
  97.   (start_image "Slide11")(slide_image 1 1 X# Y# (strcat Folder$ Slide11$))(end_image)
  98.   (start_image "Slide12")(slide_image 1 1 X# Y# (strcat Folder$ Slide12$))(end_image)
  99.   (start_image "Slide13")(slide_image 1 1 X# Y# (strcat Folder$ Slide13$))(end_image)
  100.     ; Dialog Actions
  101. (action_tile "Slide1" "(done_dialog 11)")
  102. (action_tile "Slide2" "(done_dialog 12)")
  103. (action_tile "Slide3" "(done_dialog 13)")
  104. (action_tile "Slide4" "(done_dialog 14)")
  105. (action_tile "Slide5" "(done_dialog 15)")
  106. (action_tile "Slide6" "(done_dialog 16)")
  107. (action_tile "Slide7" "(done_dialog 17)")
  108. (action_tile "Slide8" "(done_dialog 18)")
  109. (action_tile "Slide9" "(done_dialog 19)")
  110. (action_tile "Slide10" "(done_dialog 20)")
  111. (action_tile "Slide11" "(done_dialog 21)")
  112. (action_tile "Slide12" "(done_dialog 22)")
  113. (action_tile "Slide13" "(done_dialog 23)")
  114. (action_tile "cancel" "(done_dialog 0)")
  115. (setq a1 (start_dialog))
  116. (setq osm (getvar "osmode")
  117.      echo (getvar "cmdecho")
  118.      snp (rtos (car (getvar 'snapunit)))
  119.      snpm (getvar 'SNAPMODE))
  120. (setvar "cmdecho" 0)
  121. (command "attreq" "0")
  122. (command "snap" "0.0625")
  123. (if (and a1 (> a1 1))
  124. (progn
  125.                        (if (not (tblsearch "layer" "PID"))
  126.                            (entmake
  127.                               (list
  128.                                  (cons 0 "Layer")
  129.                                  (cons 100 "AcDbSymbolTableRecord")
  130.                                  (cons 100 "AcDbLayerTableRecord")
  131.                                  (cons 2 "PID")
  132.                                  (cons 70 0)
  133.                                  (cons 62 2)
  134.                                  (cons 6 "Continuous")
  135.                                );list
  136.                               );entmake
  137.                          );if
  138. (setvar "clayer" "PID")
  139. (if (setq insertpt1 (getpoint "\nPick Insertion Point on line, or In Space (Check Snap Settings): "))
  140. (progn
  141. (if (and (setq name (car (nentselp insertpt1)))
  142.    (wcmatch (cdr (assoc 0 (entget name)))"LINE,LWPOLYLINE")
  143.    );; and
  144.    (setq objx 1)
  145.    );; if
  146.      (cond
  147. ((= a1 11)(MySub "SA001" 0.1500 -0.1500 insertpt1))    ;a1 11
  148. ((= a1 12)(MySub "SA002" 0.1500 -0.1500 insertpt1))    ;a1 12
  149. ((= a1 13)(MySub "SA003" 0.1500 -0.00001 insertpt1))   ;a1 13
  150. ((= a1 14)(MySub "SA004" 0.00001 -0.1500 insertpt1))   ;a1 14
  151. ((= a1 15)(MySub "SA005" 0.150 -0.150 insertpt1))    ;a1 15
  152. ((= a1 16)(MySub "SA006" 0.150 -0.00001 insertpt1))    ;a1 15
  153. ((= a1 17)(MySub "SA007" 0.150 -0.00001 insertpt1))    ;a1 15
  154. ((= a1 18)(MySub "SA008" 0.1500 -0.1500 insertpt1))    ;a1 15
  155. ((= a1 19)(MySub "SA009" 0.1500 -0.1500 insertpt1))    ;a1 15
  156. ((= a1 20)(MySub "SA010" 0.1500 -0.1500 insertpt1))    ;a1 15
  157. ((= a1 21)(MySub "SA011" 0.1500 -0.1500 insertpt1))    ;a1 15
  158. ((= a1 22)(MySub "SA012" 0.1500 -0.1500 insertpt1))    ;a1 15
  159. ((= a1 23)(MySub "SA013" 0.1500 -0.1500 insertpt1))    ;a1 15
  160.        )          ;cond
  161.       )          ;progn
  162. )          ;a1 1 if
  163. ))          ;if progn test   
  164. (command "snap" snp)
  165. (setvar "snapmode" snpm)
  166. (setvar "osmode" osm)
  167. (setvar "cmdecho" echo)
  168. (command "_.undo" "_end")      
  169. (princ)         
  170. )         
  171. (defun MySub (a1 a2 a3 insertpt1 / OBJ P2 P3 doc)      ;subfunction
  172. (vl-load-com)          ;load vlisp functions
  173. ;(setq doc (vla-get-activedocument (vlax-get-acad-object)))
  174. (if (= objx 1)         ;if objx is 1, ent=line or pline
  175.    (progn          ;preform these actions
  176. (setvar "osmode" 0)         ;first turn off osnap
  177. (princ)
  178. (if (> a2 0.0)          ;if trim dist is greater than 0.0 preform
  179. (progn           ;these actions
  180. (setq obj (vlax-ename->vla-object name))      ;get entity object
  181. (if (eq (vla-get-ObjectName obj) "AcDbPolyline")     ;if it is a LwPolyline
  182.     (setq p3 insertpt1         ;get first break point
  183.    p2 (angle insertpt1  (vlax-curve-getpointatparam obj  
  184. (fix (vlax-curve-getparamatpoint obj
  185. (vlax-curve-getClosestPointTo obj insertpt1 T))))))      
  186. (setq p3 insertpt1         ;and second break point
  187.      p2 (angle (vlax-curve-getStartpoint obj) (vlax-curve-getEndPoint obj)))
  188. )           ;if
  189. (command "break" name (polar p3 p2 a2) (polar p3 p2 a3))
  190. (command "_insert" a1 insertpt1 "" "" pause)      ;insert into space
  191. ;(vla-sendcommand doc (strcat "horiz" " " "L" " " " "))     ;break line
  192. (HORIZ)
  193. )           ;progn
  194. (princ "\n......Selected....\n......Breaking Lines....")    ;status
  195. )           ;if
  196. )
  197. (progn  
  198. (command "_insert" a1 insertpt1 "" "" pause)      ;insert onto line
  199. ;(vla-sendcommand doc (strcat "horiz" " " "L" " " " "))
  200. (HORIZ)
  201. (princ)
  202. )
  203. )           ;if
  204. (princ "\n......Insertion Completed!")       ;princ
  205. (princ)
  206. ;(ARXUNLOAD "AT_CUSTDB" "DBX")           ;print clear
  207. (setq name nil)
  208. )           ;MySub
  209. ;|«Visual LISP© Format Options»
  210. (78 2 40 2 nil "end of " 75 9 0 0 0 T T nil T)
  211. ;*** DO NOT add text below the comment! ***|;

是导致透镜体错误的代码,但我不确定原因。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 23:36:08 | 显示全部楼层
你试过调试你的代码吗?这个代码在哪一行中断?
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 00:05:22 | 显示全部楼层
是的,但这是一个间歇性错误,我无法重现。
它只是在将配件从菜单中插入到充满相同菜单块的dwg中时随机发生的。。。。只是偶尔它会吐回一个错误,是的,能够在vlide中拉出问题行将是很棒的。下次出错时,我必须这样做,而不是仅仅关闭并重新打开cad以完成dwg。
谢谢BB
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 00:19:53 | 显示全部楼层
很明显,作为一个制作人员,我说这些事情主要是“在时间允许的情况下”。
 
也就是说,如果可以的话,试着打开VLIDE并从那里加载代码,选中“出错时中断”等,以尝试隔离未知。。。这将帮助您最终确定导致间歇性问题的确切原因。
 
李推出了一些很棒的教程,这里有一个关于调试的。
 
 
 
FWIW,以我有限的经验……”“间歇性”通常可以追溯到设置或未能设置一个或多个全局变量的条件。
 
祝你好运
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 03:11 , Processed in 0.503196 second(s), 60 queries .

© 2020-2025 乐筑天下

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