第一个帖子,已经在问了
大家好,我已经阅读这个论坛很多年了,但直到现在才加入。我正在学习一系列复杂的AutoLISP,到目前为止,我已经能够从互联网和一些同事那里拼凑出所有东西。现在我被一件相对简单的事情难住了。我希望从应用程序中获取数据的实体信息。我用李Mac的很棒的实体列表lisp来获取所有数据,但我只关心我要处理的所有文件的第二行,从“Facesamp”即(1000。“1003101”)开始。以下是整个elist显示的内容
(
(-1 . <Entity name: 7ffff7c7930>)
(0 . "LWPOLYLINE")
(5 . "18B")
(102 . "{ACAD_REACTORS")
(330 . <Entity name: 7ffff7c7c90>)
(102 . "}")
(330 . <Entity name: 7ffff7c19f0>)
(100 . "AcDbEntity")
(67 . 0)
(410 . "Model")
(8 . "0")
(100 . "AcDbPolyline")
(90 . 18)
(70 . 0)
(43 . 0.0)
(38 . 0.0)
(39 . 0.0)
(10 -3.29016 -5.0761)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 -5.11682 -4.97795)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 -4.39008 -2.89717)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 -4.05618 -0.384532)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 -3.91869 1.14661)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 -4.31152 3.24702)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 -2.20987 3.22739)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 -2.68127 2.20663)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 -3.34642 0.766316)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 -3.47677 0.0853092)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 -3.7277 -0.638116)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 -3.76631 -1.17827)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 -3.46711 -1.73772)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 -3.07141 -2.0078)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 -2.83282 -2.4172)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 -2.79641 -2.99942)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 -2.92433 -3.82089)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(10 -3.29016 -5.0761)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(91 . 0)
(210 0.0 0.0 1.0)
(-3
(
"FACESAMP"
(1002 . "{")
(1000 . "1003101")
(1002 . "}")
)
)
)
长话短说,我要做的是遍历我绘制的所有图形,给多段线上色,并根据csv文件中的数字对其进行图案填充。到目前为止,我已经用lisp创建了具有独特颜色的新层,用lisp在每个层中创建填充图案,用lisp正确读取csv文件并将其解析为数字(第二列对应于“(1000)”的第二部分)1003101")".所以现在我正在慢慢研究如何读取实体信息,然后将csv信息与之关联。有什么想法吗?
谢谢大家,这个论坛对我来说是一个巨大的信息来源!
斯科特 欢迎来到CADTutor Scott,我很高兴您找到了我的实体列表实用程序
以下代码将根据需要从实体DXF数据中检索值1003101:
假设是所讨论对象的实体名称。 哇,谢谢!在我开始学习autolisp的过程中,你帮了我很大的忙!我试试看。看起来每个多段线的实体名称都会更改-我通常每个图形有3到10条闭合多段线-如何自动查看所有多段线?(我有一个图像文件、多段线、文本和块引用。唯一的多段线对象是我想要获取信息的对象)
令人沮丧的是,我有一个在autocad 2000i中工作的autolisp,但由于某种原因停止了工作,这就是我试图从头开始重建它的原因。它在lisp开始后立即失败。我已经附加了导致故障的部分。
(defun c:addnsr (fn)
; Extend entity data is associated with FACESAMP app
(setq rname "FACESAMP")
(regapp rname)
(setq dr "")
(setq ff (strcat dr fn))
(setq f (open ff "r")) ;Open filename passed as parameter
(setq a (list 0 0))
(setq b (list -999 0))
(setq samplist (list a b)) ; 错误:我得到的错误是参数太少。事情是这样的。
我已经把它分成越来越小的部分,看看它在哪里崩溃了,这就是上面的代码。
(defun addopt (fn)
; Extend entity data is associated with FACESAMP app
(setq rname "FACESAMP")
(regapp rname)
(setq dr "")
(setq ff (strcat dr fn))
(setq f (open ff "r")) ;Open filename passed as parameter
(setq a (list 0 0))
(setq b (list -999 0))
(setq samplist (list a b))
(while (setq l (read-line f))
;set variables for reading data from a csv file
;which contains the fields sample,Au_Opt
(setq linelen (strlen l)) ;line length
(setq cchar (substr l 1 1)) ;current character
(setq fchar 1) ;first character of field
(setq ccount 1) ;current count
(while (<= ccount linelen)
;read through the current line and find the commas
(setq cchar (substr l ccount 1))
(if (= cchar ",")
(progn
;charlen is the field length
(setq charlen (- ccount fchar))
(setq samp (substr l fchar charlen))
(setq fchar (+ 1 ccount))
);end progn
) ;end if
;leading spaces are removed
(if (= cchar " ") (setq fchar (+ 1 ccount)) )
;increment character counter
(setq ccount (+ 1 ccount))
) ;end while, character reader
(setq Au_Opt (substr l fchar linelen))
(setq samp (atoi samp))
(setq Au_Opt (atoi Au_Opt))
(setq newlist (list samp Au_Opt))
(setq samplist (cons newlist samplist ))
); end of WHILE (setq l..
(close f)
; select polyline, pick null to end
(setq sset (ssget "X" '((0 . "LWPOLYLINE")))); select all LWpolyline in dwg
(command "layer" "n" "LT0" "n" "0-0.08" "n" "0.08-0.15" "n" "0.15-0.30" "n" "0.30-0.50" "n" "0.50-1.00" "n" "GT1.00" "")
(command "layer" "co" "9" "LT0" "co" "5" "0-0.08" "co" "4" "0.08-0.15" "co" "3" "0.15-0.30" "co" "2" "0.30-0.50" "co" "1" "0.50-1.00" "co" "6" "GT1.00" "" )
(command "layer" "LW" "0.35" "LT0" "LW" "0.35" "0-0.08" "LW" "0.35" "0.08-0.15" "LW" "0.35" "0.15-0.30" "LW" "0.35" "0.30-0.50" "LW" "0.35" "0.50-1.00""LW" "0.35" "GT1.00" "")
(setq entnum 0); Initilize entnum for while loop
(while (setq p (ssname sset entnum))
(setq elist (entget p (list "*"))); includes xdata for all regd apps
(if (assoc -3 elist)
(progn
(setq sampnum (cdr (nth 2 (nth 1 (assoc -3 elist)))));Get sampleID from elist
(setq samp (atoi sampnum))
(setq Au_Opt (car (cdr (assoc samp samplist))))
(setq layer (cons 8 "LT0"));Default LAYER
(if (> Au_Opt 0)
(progn (setq layer (cons 8 "0-0.08"))))
(if (> Au_Opt 0.08)
(progn (setq layer (cons 8 "0.08-0.15"))))
(if (> Au_Opt 0.15)
(progn (setq layer (cons 8 "0.15-0.30"))))
(if (> Au_Opt 0.30)
(progn (setq layer (cons 8 "0.30-0.50"))))
(if (> Au_Opt 0.50)
(progn (setq layer (cons 8 "0.50-1.00"))))
(if (> Au_Opt 1.00)
(progn (setq layer (cons 8 "GT1.00"))))
(setq ed (entget p))
(setq ed (subst layer (assoc 8 ed) ed))
(entmod ed)
);end of PROGN entnum
); end of IF (assoc -3 ...
(setq entnum (+ 1 entnum))
); end of WHILE (setq p..
;HATCH BY LAYER
(command "layer" "s" "0.08-0.15" "")
(if (setq sset (ssget "X" '((-4 . "<OR")(8 . "0.08-0.15")(8 . "text")(-4 . "OR>")))) (command "HATCH" "NET" "6" "45" "P" ""))
(command "layer" "s" "0.15-0.30" "")
(if (setq sset (ssget "X" '((-4 . "<OR")(8 . "0.15-0.30")(8 . "text")(-4 . "OR>")))) (command "HATCH" "NET" "5" "45" "P" ""))
(command "layer" "s" "0.30-0.50" "")
(if (setq sset (ssget "X" '((-4 . "<OR")(8 . "0.30-0.50")(8 . "text")(-4 . "OR>")))) (command "HATCH" "NET" "4" "45" "P" ""))
(command "layer" "s" "0.50-1.00" "")
(if (setq sset (ssget "X" '((-4 . "<OR")(8 . "0.50-1.00")(8 . "text")(-4 . "OR>")))) (command "HATCH" "NET" "3" "45" "P" ""))
(command "layer" "s" "GT1.00" "")
(if (setq sset (ssget "X" '((-4 . "<OR")(8 . "GT1.00")(8 . "text")(-4 . "OR>")))) (command "HATCH" "NET" "3" "45" "P" ""))
;(command "layer" "s" "text" "")
;(command "style" "standard" "arial.ttf" "" "" "" "" "")
(command "layer" "s" "0" "")
(command "zoom" "e" )
(command "zoom" "0.95x" )
(command "lwdisplay" "ON")
(command "WMFBKGND" "OFF")
(command "WMFOUT" "" "ALL" "")
(vl-load-COM)
(setq disp (vla-get-display (vla-get-preferences (vlax-get-acad-object))))
(vla-put-GraphicsWinModelBackgrndColor disp 16777215)
(vla-put-modelcrosshaircolor disp 0)
(command "BMPOUT" "" "ALL" "")
(setq disp (vla-get-display (vla-get-preferences (vlax-get-acad-object))))
(vla-put-GraphicsWinModelBackgrndColor disp 0)
(vla-put-modelcrosshaircolor disp 16777215)
)
请注意,在您的第一篇帖子中:
(setq sset (ssget "X" '((0 . "LWPOLYLINE")))); select all LWpolyline in dwg
上面的(setq sset)将向选择集中添加所有dxf组0读取LWDOLYLINE的项目,如上面的行,但零件可以不同,它仍将选择它们。我想这就是你想要找到的?
那将。。。。那么,选择dwg中的所有多段线,包括模型空间和图纸空间。
请再次从李的网站上查看此链接以获取更多信息。
http://www.lee-mac.com/ssget.html 也是为了你;错误:参数太少
如果您输入
在命令提示符下添加nsr FILENAME,它可以修复错误,也可以使用完整例程
(-1 . <Entity name: 7ffff7c7930>)
(0 . "LWPOLYLINE")
您必须这样做(addopt filename)(只需添加括号,因为函数名的前面没有C:这允许键入它以从命令行执行) 李对此不确定,因为我们的实体没有检查代码cdadr
对不起,我不明白你的帖子-比格尔有什么问题? 您是如何确定代码的哪些部分不起作用的?这对你有用吗?
如果是,你是如何使用它的? 啊,得到了修复,基本上我破坏了一个bat文件,该文件将调用之前附加的带有csv文件名的代码
7
我重新加载了一个备份版本,效果很好。抱歉占用大家的时间!
页:
[1]
2