akgeo 发表于 2022-7-6 04:10:09

第一个帖子,已经在问了

大家好,我已经阅读这个论坛很多年了,但直到现在才加入。我正在学习一系列复杂的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信息与之关联。有什么想法吗?
 
谢谢大家,这个论坛对我来说是一个巨大的信息来源!
 
斯科特

Lee Mac 发表于 2022-7-6 04:17:42

欢迎来到CADTutor Scott,我很高兴您找到了我的实体列表实用程序
 
以下代码将根据需要从实体DXF数据中检索值1003101:
假设是所讨论对象的实体名称。

akgeo 发表于 2022-7-6 04:25:24

哇,谢谢!在我开始学习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))

akgeo 发表于 2022-7-6 04:31:06

; 错误:我得到的错误是参数太少。事情是这样的。
 
我已经把它分成越来越小的部分,看看它在哪里崩溃了,这就是上面的代码。
 
(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

SLW210 发表于 2022-7-6 04:35:29

也是为了你;错误:参数太少
如果您输入
在命令提示符下添加nsr FILENAME,它可以修复错误,也可以使用完整例程

   (-1 . <Entity name: 7ffff7c7930>)
   (0 . "LWPOLYLINE")

 
您必须这样做(addopt filename)(只需添加括号,因为函数名的前面没有C:这允许键入它以从命令行执行)

akgeo 发表于 2022-7-6 04:40:29

李对此不确定,因为我们的实体没有检查代码cdadr

Bhull1985 发表于 2022-7-6 04:45:09

 
对不起,我不明白你的帖子-比格尔有什么问题?

Bhull1985 发表于 2022-7-6 04:48:39

您是如何确定代码的哪些部分不起作用的?这对你有用吗?
如果是,你是如何使用它的?

BIGAL 发表于 2022-7-6 04:56:22

啊,得到了修复,基本上我破坏了一个bat文件,该文件将调用之前附加的带有csv文件名的代码
7
 
我重新加载了一个备份版本,效果很好。抱歉占用大家的时间!

Lee Mac 发表于 2022-7-6 05:02:34

页: [1] 2
查看完整版本: 第一个帖子,已经在问了