iztok13 发表于 2022-7-6 15:45:55

o那是快速回放,thx提前,所以我还有一个愿望,如果可以是一行中的每个顶点。
 
如果我有多边形的名称:vertex\u name和x,y,坐标
 
顶点名称x y
顶点名称x y
顶点名称x y
顶点名称x y
 
我希望你能理解,再次提前谢谢

Lee Mac 发表于 2022-7-6 15:48:09

这是多坐标问题的快速修复:
 

(defun c:plco (/ File oFile pLin pStr pEnt nlist pLen wLine wfLine vPt wvLine)
(if (setq File (getfiled "Create a Text File" "C:\\" "txt" 9))
   (progn
   (setq oFile (open file "W"))
   (while (setq pLin (ssget "_:S" (list (cons 0 "LWPOLYLINE,POLYLINE") (cons 410 (getvar "CTAB")))))
   (sssetfirst nil pLin)
   (if (/= (setq pStr (getstring t "\nSpecify Name for Selected Polyline >> ")) "")
   (progn
       (setq pEnt (ssname pLin 0))
       (cond ((= "LWPOLYLINE" (cdr (assoc 0 (entget pEnt))))
          (foreach x (entget pEnt)
            (if (eq 10 (car x))
            (setq nlist (cons (cdr x) nlist))
            ) ;_end if
          ) ;_end foreach
          (setq nlist    (reverse nlist)
            pLen    (length nlist)
            wfLine    ""
          ) ;_end setq
          (while (not (minusp (setq pLen (1- pLen))))
            (setq wLine (strcat (rtos (car (nth pLen nlist)) 2 2)
                  ","
                  (rtos (cadr (nth pLen nlist)) 2 2)
                ) ;_end strcat
            ) ;_end setq
            (setq wfLine (strcat wLine "\t" wfLine))
          ) ;_end while
          (write-line (strcat pStr "\t" wfLine) oFile)
          (setq nlist nil
            wfLine    nil
          )
         )
         ((= "POLYLINE" (cdr (assoc 0 (entget pEnt))))
          (setq wvLine    ""
            pEnt    (entnext pEnt)
          ) ;_end setq
          (while (/= (cdr (assoc 0 (entget pEnt))) "SEQEND")
            (setq vPt      (cdr (assoc 10 (entget pEnt)))
            wvLine (strcat (rtos (car vPt) 2 2)
                     ","
                     (rtos (cadr vPt) 2 2)
                     ","
                     (rtos (caddr vPt) 2 2)
                     "\t"
                     wvLine
               ) ;_end strcat
            pEnt      (entnext pEnt)
            ) ;_end setq
          ) ;_end while
          (write-line (strcat pStr "\t" wvLine) oFile)
          (setq wvLine nil)
         )
       ) ;_end cond
   ) ;_end progn
   (princ "\n<!> No Line Name Specified. <!>")
   ) ;_end if
   (sssetfirst nil)
   ) ;_end while
   (close oFile)
   ) ;_end progn
   (princ "\n<!> No File Selected. <!> ")
) ;_end if
(princ)
) ;_end defun


 
但我可能会考虑重新编写这个LISP,因为我对它不满意。
 
至于另一个请求,您想在所有坐标之后输入多段线的名称吗?

Lee Mac 发表于 2022-7-6 15:52:04

还有一个问题-->
 
你会只处理多段线(3D)还是我也必须包含LWD多段线(2d)?

Lee Mac 发表于 2022-7-6 15:55:59

好的,我觉得这样更好:
 

;|

   Polyline Coordinate Writer

       by Lee McDonnell

         27.01.2009

|;


(defun c:plco2 (/ File oFile ss eLst Selss pName aEnt vLst i vNme)
(vl-load-com)
(if (setq File (getfiled "Create a Text File" "C:\\" "txt" 9))
   (progn
   (setq oFile (open File "W"))
   (if (setq    ss (ssget (list    (cons 0 "POLYLINE")
   (if (getvar "CTAB") (cons 410 (getvar "CTAB"))(cons 67 (- 1 (getvar "TILEMODE")))))))
   (progn
   (setq    eLst(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
       Selss (ssadd))
   (foreach ent eLst
       (ssadd ent Selss)
       (sssetfirst nil Selss)
       (if    (not (setq pName (getstring t "\nSpecify Name for Selected Polyline >")))
         (setq pName (vl-princ-to-string ent)))
       (write-line (strcat "Polyline: " pName "\n\n") oFile)
       (setq aEnt (entnext ent))
       (while (/= "SEQEND" (cdr (assoc 0 (entget aEnt))))
         (setq vLst (cons (cdr (assoc 10 (entget aEnt))) vLst)
         aEnt (entnext aEnt)))
       (setq i    (length vLst) vNme "Vertex No: " vt 1)
       (while (not (minusp (setq i (1- i))))
         (write-line
       (strcat    vNme (rtos vt) "\t"
         (rtos (car (nth i vLst)) 2 2) ","
         (rtos (cadr (nth i vLst)) 2 2) ","
         (rtos (caddr (nth i vLst)) 2 2) "\n") oFile)
         (setq vt (1+ vt)))
       (write-line "\n" oFile)
       (setq vLst nil)
       (ssdel ent Selss)
       (sssetfirst nil nil)))
   (princ "\n<!> No Polyline Selected <!>")))
   (princ "\n<!> No File Selected <!>"))
(close oFile)
(princ "\n...Vertices Written to File...")
(princ))


 
只在一分钟内适用于多段线,但如果您需要展开它,我将编写另一个。
 
一次选择任意多段线

iztok13 发表于 2022-7-6 15:59:27

这是一个巨大的thx。
 
但这与第一个完全不同。
我将解释:
 
我有普通多段线,不是2d或3d多边形。所有多段线都是闭合的。每一种聚乙烯都有不同的名称。所以我需要问每个多边形的名称是什么。
 
基本上就像你写的第一个Lisp程序。它只在第二个thrd的坐标中工作,。。,错误或重复。我现在不知道为什么?
 
例如,如果我有四个名为A、B、C和D的闭合法线多边形(不是2D或3D)。A有4个顶点,B有4个顶点,C有7个顶点,D有3个顶点,TXT文件应该如下所示:
 
 
A x,y
A x,y
A x,y
A x,y
B x,y
B x,y
B x,y
B x,y
C x,y
C x,y
C x,y
C x,y
C x,y
C x,y
C x,y
D x,y
D x,y
D x,y
 
下面是示例图形的预览:
 
http://img90.imageshack.us/img90/8498/polylinesso4.th.jpg
 
A、 B、C、D是多边形的名称,x和y是它们的坐标。
 
我希望我不要为此制造太多麻烦。。
 
Thx提前。。

Lee Mac 发表于 2022-7-6 16:01:10

我的另一个发布的LISP没有修复多坐标问题吗?

iztok13 发表于 2022-7-6 16:06:10

我没有试过3d或2d多段线,只试过普通多段线,当我选择多段线时,它说什么都没有选择????
 
Mybe因为不是2或3D多边形??

Lee Mac 发表于 2022-7-6 16:07:25

Is只能是2D或3D多边形-除非你在4D中工作,我非常怀疑…:眨眼:
 
我很惊讶它说没有选择。。。你能贴一张2000年格式的样图给我吗?

iztok13 发表于 2022-7-6 16:12:18

好的,thx
以下是我绘制多段线的示例:
 
http://www.2shared.com/file/4743843/d6e1e7a4/polylines.html
 
谢谢
 
多段线的名称如下:“SEM-S3-10”。。。。。。

Lee Mac 发表于 2022-7-6 16:13:16

好啊
 
请查看随附的文档,并验证“所需”记事本文档是否符合您的要求:
渴望的txt文件
第一个结果。txt文件
PLCO2.zip
页: 1 [2]
查看完整版本: 如何读取垂直于f的多段线