Wojciech 发表于 2022-7-5 23:31:44

保存到选定多边形的TXT文件

你好我想将选定的多段线(用X和Y分隔)保存到txt文件中。
 
类似这样:
X Y,X Y,X Y(等),X Y
X Y,X Y,X Y(等),X Y
 
txt文件:
12 45, 14 46, 11 42
91 45, 92 46, 97 42, 92 35
 
我喜欢使用这样的脚本:
http://assemblysys.com/php-point-in-polygon-algorithm/
所以我必须有选定多段线的点。
 
所有这样的脚本
http://wklej.org/id/1279265/
保存多段线的组合点。。。

Wojciech 发表于 2022-7-5 23:41:51

我在想我的帖子为什么会落空。
 
这是我的第一篇帖子:
 
你好我想将选定的多段线(用X和Y分隔)保存到txt文件中。
 
类似这样:
X Y,X Y,X Y(等),X Y
X Y,X Y,X Y(等),X Y
 
txt文件:
12 45, 14 46, 11 42
11 42, 13 36, 21 22, 18 34
 
我想用这个脚本来寻找多边形中的点,所以我必须有多段线的分离点。

BIGAL 发表于 2022-7-6 00:01:22

在BIGAL和pline co ords下搜索,您希望在lisp代码中找到的确切答案是2d和3d版本。我将稍后尝试查找,而不是再次发布代码。使用VLlisp查找“cordinate”这是一个简单的答案。

Wojciech 发表于 2022-7-6 00:04:22

谢谢,我有。

Wojciech 发表于 2022-7-6 00:19:59

谢谢,我有。
 
这是代码:
 
;; Polyline Point Exported, by Lee McDonnell 26.07.2009

(defun c:zzz (/ doc spc ss file sel pts)
(vl-load-com)
(setq doc (vla-get-ActiveDocument
             (vlax-get-Acad-Object))
       spc (if (zerop (vla-get-activespace doc))
             (if (= (vla-get-mspace doc) :vlax-true)
               (vla-get-modelspace doc)
               (vla-get-paperspace doc))
             (vla-get-modelspace doc)))
(if (and (setq ss (ssget '((0 . "*POLYLINE")(8 . "Warstwa 6"))))
          (setq file
            (getfiled "Output File"
            (if *load *load "") "csv;txt" 9)))
   (progn
   (setq *load file file (open file "a"))
   (vlax-for Obj (setq sel (vla-get-ActiveSelectionSet doc))
       (setq pts
         (vlax-list->3D-point
         (vlax-get Obj 'Coordinates)
             (cond ((eq (vla-get-ObjectName Obj) "AcDbPolyline"))) Obj))                                                                        
       (mapcar
         (function
         (lambda (x)
             (write-line
               (strcat
               (rtos (car x) 2 5) (chr 44)
                   (rtos (cadr x) 2 5)
;                      (chr 44) (rtos (caddr x) 2 2)
                                  ) file)                                                   
;            (vla-addPoint spc (vlax-3D-point x))
                  )) pts)
                  (write-line "" file)                          
                  )
   (princ
       (strcat "\n<< Points from "
         (itoa (vla-get-Count sel)) " Polylines written to file >>"))
   (close file)
   (vla-delete sel)))
(princ))
      
(defun vlax-list->3D-point (lst x Obj / oLst)
(while lst
   (setq oLst
   (cons (list (car lst) (cadr lst)
               (if x (vla-get-Elevation Obj) (caddr lst))) oLst)
         lst ((if x cddr cdddr) lst)))
oLst)
给我发这样的短信:
14498.85,2477.59
14842.06,2466.01
14507.84,2569.84

14365.55,2717.78
14408.25,2758.83
14407.27,2776.11
14455.94,2778.89
14478.06,2804.62

13600.82,2594.97
13589.92,2635.92
13593.87,2699.13
13571.62,2700.52
13485.42,2678.3

如何更改代码以生成以下内容:
14498.85,2477.59 14842.06,2466.01 14507.84,2569.84
14365.55,2717.78 14408.25,2758.83 14407.27,2776.11 14455.94,2778.89 14478.06,2804.62
13600.82,2594.97 13589.92,2635.92 13593.87,2699.13 13571.62,2700.52 13485.42,2678.3

有“写线”功能。是否有“write”(在txt文件中不输入)之类的功能?

Lee Mac 发表于 2022-7-6 00:25:08

尝试以下简单程序:
(defun c:polyex ( / des idx sel txt )
   (if (and (setq sel (ssget '((0 . "LWPOLYLINE"))))
            (setq txt (getfiled "Output File" "" "txt" 1))
       )
       (if (setq des (open txt "w"))
         (progn
               (repeat (setq idx (sslength sel))
                   (write-line
                     (substr
                           (apply 'strcat
                               (mapcar
                                 (function
                                       (lambda ( x )
                                           (strcat " "
                                             (rtos (cadrx)) ","
                                             (rtos (caddr x))
                                           )
                                       )
                                 )
                                 (vl-remove-if-not '(lambda ( x ) (= 10 (car x)))
                                       (entget
                                           (ssname sel
                                             (setq idx (1- idx))
                                           )
                                       )
                                 )
                               )
                           )
                           2
                     )
                     des
                   )
               )
               (close des)
         )
         (princ (strcat "\n\"" txt "\" could not be opened for writing."))
       )
   )
   (princ)
)

Wojciech 发表于 2022-7-6 00:32:15

非常感谢。
页: [1]
查看完整版本: 保存到选定多边形的TXT文件