BIGAL 发表于 2022-7-5 23:59:41

此dwg索引l的错误帮助

我创建了一个dwg索引lsp,它有两个部分,从单独布局的标题栏中读取信息,然后创建一个表。
 
我分别运行这两个部分,当一起在创建带有错误的表时停止处理错误时,它就会工作。
 
错误:发生异常:0xC0000005(访问冲突)
; 警告:未知异常时跳过了展开
 
; dwg index to a table
; by Alan H NOV 2013
;(defun AH:dwgindex (/ doc lay ans ans2 plotabs len ss1 tag2 tag3 list1 list2 clayout colwidth numcolumns numrows objtable rowheight )
(defun AH:dwgindex (/ doc ans ans2 plotabs len ss1 tag2 tag3 )
(vl-load-com)
(setq curlayout (getvar "ctab"))
(if (= clayout "Model")
(progn
(Alert "You need to be in a layout for this option")
(exit)
)
)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(setq curspace (vla-get-paperspace doc))
(vlax-for lay (vla-get-Layouts doc)
(setq plotabs (cons (vla-get-name lay) plotabs))
)
(setq pt1 (vlax-3d-point (getpoint "\nPick point for top left hand of table:")))
;(setq pt1 (vlax-3d-point '(0 0 0)))
; for testing
; read values from title blocks
(setq len (length plotabs))
(setq x 0)
(setq bname "DA1DRTXT")
(setq tag2 "DRG_NO") ;attribute tag name
(setq tag3 "WORKS_DESCRIPTION") ;attribute tag name
;(setq list1 ""
;      list2 "")
(repeat len
(setq tabname (nth x plotabs))
(if (/= tabname "Model")
   (progn
   (setvar "ctab" tabname)
   (setq ss1 (ssget "x"(list (cons 0 "INSERT") (cons 2 bname)(cons 410 tabname))))
   (foreach att (vlax-invoke (vlax-ename->vla-object (ssname SS1 0 )) 'getattributes)
       (if (= tag2 (strcase (vla-get-tagstring att)))
         (progn
    (setq ans (vla-get-textstring att))
         (if (/= ans NIL)
      (setq list1 (cons ans list1))
    )
         ); end progn
) ; end if
       (if (= tag3 (strcase (vla-get-tagstring att)))
(progn
    (setq ans2 (vla-get-textstring att))
    (if (/= ans2 NIL)
             (setq list2 (cons ans2 list2))
         ) ; end if
      ) ; end progn
       ) ; end if
      ) ; end foreach
   ) ; end progn
) ; end if
(setq x (+ x 1))
) ; end repeat
(setvar "ctab" curlayout)
(command "Zoom" "E")
(command "regen")
(alert "layouts done")

; now do table
(setq numrows 5)
(setq numcolumns 5)
(setq rowheight 0.5)
(setq colwidth 30)
(setq objtable (vla-addtable curspace pt1 numrows numcolumns rowheight colwidth))
(vla-settext objtable 0 0 "DRAWING REGISTER")
(vla-settext objtable 1 0 "DRAWING NUMBER")
(vla-settext objtable 1 1 "DRAWING TITLE")
;(SETQ ANS (NTH 0 LIST1))
;(vla-settext objtable 1 2 ANS)
;(vla-settext objtable 1 3 (NTH 0 LIST1))
(vla-settext objtable 1 4 "E")
(vla-settext objtable 2 0 "1") ; NUMBER
(vla-settext objtable 3 0 "2")
(vla-settext objtable 4 0 "3")
(command "_zoom" "e")
); end table defun
(AH:dwgindex)
(princ)

Tharwat 发表于 2022-7-6 00:22:46

 
零必须替换为变量x
 
尽管您可以用更少的代码行重写代码。

pBe 发表于 2022-7-6 00:27:30

 
我猜BIGAL希望确保如果布局选项卡上有多个“DA1DRTXT”,它将只处理一个块。
 
@比加尔
随便。是的,它将以其他方式编写,不过有一个建议,您不需要通过布局选项卡来生成变量的值。列表1和列表2。
 
顺便说一句:我运行代码时,似乎无法复制您发布的错误消息。

BIGAL 发表于 2022-7-6 00:40:12

Pbe的0只是检查第一次出现的一个块在选项卡中,我会虽然有一个看不打开每个布局的原始代码修改了标题栏细节在个别布局,使他们在更新链接。
 
最近我的电脑有一些问题,所以我可能会剪切并粘贴整个代码,以防它们是文本文件中的隐藏字符。
 
我会在另一台电脑上试试,我们有很多。
 
在其他电脑上工作正常,所以问题是我的电脑会在内存等上运行低级诊断,看看我是否能找到问题。
 
感谢您的帮助,我们将在完成后更新代码,供其他人使用。

BIGAL 发表于 2022-7-6 00:51:38

改变了一些事情,比如不用担心打开布局,现在它在我的电脑上工作了,我不知道为什么。现在只需将单元格项排序,还有几个其他问题,但将单独发布,因为这与修改表的外观有关。
 
谢谢你的帮助

pBe 发表于 2022-7-6 01:04:27

 
很好,霍勒,如果你需要更多帮助,比格尔
 
干杯
页: [1]
查看完整版本: 此dwg索引l的错误帮助