kam1967 发表于 2022-7-6 10:06:29

图层线宽提取

你好我正在尝试将额外的图层数据(包括线宽)添加到excel格式中。我将线宽信息添加到lisp例程中,但我肯定做错了什么,因为它继续给我带来错误。提前谢谢!
 
以下是修改为包含线宽的例程。。
 

(defun c:LA2EXCEL (/ nm lnm llnm nam name opf ln lname color ltype lna lnamea colora ltypea,line_wt,description)
;
;I added line_wt in the line above
;
(setq nm (getvar "dwgname"))
(setq lnm (strlen nm))
(setq llnm (- lnm 3))
;(setq lay_alst (entget (tblobjname "LAYER" "LAYER-NAME")))
;(setq line_wt (cdr (assoc 370 lay_alst)))
(setq lay_alst (entget (tblobjname "LAYER" "LAYER-NAME")))
;
;I added this line below
(setq line_wt (cdr (assoc 370 lay_alst)))
;I added this line above
;
(setq nam (substr nm 1 llnm))
(setq name (strcat nam "csv"))
(setq opf (open name "w"))
(setq ln (tblnext "layer" T))
(setq lname (cdr (assoc 2 ln)))
(setq color (cdr (assoc 62 ln)))
(setq ltype (cdr (assoc 6 ln)))
(setq stat (cdr (assoc 70 ln)))
(cond
((= stat 1)(setq state "FROZEN"))
((= stat 2)(setq state "FROZEN IN NEW VPORT"))
((= stat 4)(setq state "LOCKED"))
((< color 0)(setq state "OFF"))
((>= color 0)(setq state "ON"))
)
(write-line "Layer Name,Color,Linetype,Condition,Line_wt,Description" opf)
(write-line (strcat lname "," (rtos (abs color) 2 0) "," ltype "," state) opf)
(while
(setq lna (tblnext "layer"))
(setq lnamea (cdr (assoc 2 lna)))
(setq colora (cdr (assoc 62 lna)))
(setq ltypea (cdr (assoc 6 lna)))
(setq stata (cdr (assoc 70 lna)))
(cond
((= stata 1)(setq statea "FROZEN"))
((= stata 2)(setq statea "FROZEN IN NEW VPORT"))
((= stata 4)(setq statea "LOCKED"))
((< colora 0)(setq statea "OFF"))
((>= colora 0)(setq statea "ON"))
)
(write-line (strcat lnamea "," (rtos (abs colora) 2 0) "," ltypea "," statea) opf)
)
(close opf)
(alert (strcat "File " name " created in current folder"))
(princ)
)

 
汉克斯!

The Buzzard 发表于 2022-7-6 10:18:20

kam1967,
 
欢迎来到论坛。你能编辑你的帖子并使用代码标签吗。
 
请参见此处:http://www.cadtutor.net/forum/showthread.php?9184-代码发布指南

Lee Mac 发表于 2022-7-6 10:26:19

很快就被砍掉了,但应该可以:
 
(defun c:LayerInfo(/GetLayerState dxf f l w);;©Lee Mac 2010(defun GetLayerState(bit colour)((lambda(s)(setq s(strcat s)(应用“strcat(mapcar)”(lambda(b s)(if(=b(logand bit b))s“”))”(1 2 4)“(冻结“冻结在新VPORT中;”“锁定;”))(substr s 1(1-(strlen s)))(if(minusp colour)“关”“ON;”)(setq dxf(lambda(x l)(cdr(assoc x l)))(if(setq f(open(strcat(getvar'DWGPREFIX))).csv”)“a”)(progn(write line“Layer Name,Color,Linetype,Lineweight,Status”f)(while(setq l(tblnext“Layer”(null l))(setq l(entget(tblobjname“Layer”(dxf 2 l)))))))(write line(strcat(dxf 2 l)”,“(itoa(abs(dxf 62 l))“,“(dxf 6 l)”,“(if(minusp(setq w(/(dxf 370 l)100))“DEFAULT”(rtos w 2 2)),“(GetLayerState(dxf 70 l)(dxf 62 l)))f))(close f)(princ”\n-->写入的层信息

Lee Mac 发表于 2022-7-6 10:29:35

你可能也对此感兴趣。

kam1967 发表于 2022-7-6 10:39:36

谢谢李的快速回复。在测试您刚才提供的例程时,它似乎已经生成了4个不同的层。例如,如果我有15层,它会生成60层。前45行的线宽为“默认”。只有最后15个图层具有线宽信息。这可能不是问题,但当您有500层或更多层时,可能很难跟踪。
 
无论如何,我需要扩展这个程序以包括其他层信息(请参阅layer info needed.jpg文件)。这是我需要帮助的。。。
 
1) 当前程序不会提取线宽和图层描述。如果有的话,我希望能够提取出整个层信息-包括vp层信息(见附件)
 
2) 如果您知道有一个程序或例程将所有这些信息导入到Autocad中,那就太棒了!
 
我知道有很多问题要问,你可能真的很忙。希望你能在本周完成第一部分。事实上,我很乐意完成#1。再次感谢李!
 
[附件]24881

Lee Mac 发表于 2022-7-6 10:47:49

 
使用“代码”按钮设置代码格式,“报价”按钮引用帖子

kam1967 发表于 2022-7-6 10:55:36

李-我想知道你是否能阅读最后一篇帖子。我还想提取层描述。如果你能帮忙,那就太好了。再次感谢。

Lee Mac 发表于 2022-7-6 11:05:39

 
行-我今天晚些时候有空的时候看看能做些什么

Lee Mac 发表于 2022-7-6 11:13:53

您好,Kam1967,
 
这个计划应该适合你的需要
http://www.cadtutor.net/forum/showthread.php?54830-层提取器
页: [1]
查看完整版本: 图层线宽提取