乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: prodromosm

[编程交流] 提取三维多段线桩号an

[复制链接]

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:03:01 | 显示全部楼层
不客气,prodromosm!
 
 
看看你的代码和我的代码之间的差异,试着找出为什么你的代码没有按预期工作。
 
 
干杯
亨里克
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-5 23:05:32 | 显示全部楼层
您好,可以使用中心线更新以导出数据吗。
 
看附件,你就会明白
测试1.dwg
导出数据。txt文件
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:11:47 | 显示全部楼层
prodromosm,试试这个版本。。。
 
  1. (defun c:demo (/ acdist e fn fo lst par parpt pdist poly pos pre pt s)
  2. (prompt "\nSelect a 3DPolyline to extract Stations and Elevations to txt file: ")
  3. (if
  4.    (and (setq s (ssget "_+.:E:S" '((0 . "POLYLINE") (-4 . "&") (70 . )))
  5. (setq fn (getfiled "Enter the output filename:" (getvar 'DWGPREFIX) "txt" 1))
  6. ; no prefix
  7. ;|(setq pre (strcase (getstring "\nEnter station prefix:")))|;
  8.    );; and
  9.     (progn
  10.       (setq poly (vlax-ename->vla-object (ssname s 0))
  11.      e          (fix (vlax-curve-getEndParam poly))
  12.      pos  0
  13.      par  0
  14.      acdist 0.0
  15.      lst  nil
  16.       );; setq
  17.       (while (/= par (1+ e))
  18. (setq pt  (vlax-curve-getPointAtParam poly par)
  19.        pos (1+ pos)
  20. );; setq
  21. (if (not parpt)
  22.    (setq lst (cons (strcat
  23.          ;|pre (itoa pos) "," "0.000,"|;
  24.          "0.000," (rtos (caddr pt) 2 3)) lst)
  25.          parpt pt
  26. );; setq
  27.    ;; the pdist variable is needed to the accumulated the distance
  28.    (setq pdist (distance (list (car pt) (cadr pt)) (list (car parpt) (cadr parpt)))
  29.          lst (cons (strcat
  30.             ;|pre (itoa pos) ","
  31.             (rtos (setq pdist (distance (list (car pt) (cadr pt)) (list (car parpt) (cadr parpt)))) 2 3) ","|;
  32.             (rtos (setq acdist (+ acdist pdist)) 2 3)
  33.             "," (rtos (caddr pt) 2 3)) lst)
  34.          parpt pt
  35.          );; setq
  36.    );; if
  37. (setq par (1+ par))
  38.       );; while
  39.       (if lst
  40. (progn
  41.    (setq lst (reverse lst)
  42.          fo  (open fn "w")
  43.    );; setq
  44.    (foreach l lst
  45.      (write-line l fo)
  46.    );; foreach
  47.    (close fo)
  48.    (startapp "notepad" fn);; added to open the new txt file
  49. );; progn
  50.       );; if
  51.     );; progn
  52. );; if
  53. (princ)
  54. );; demo

 
尊敬的d.i.a.Marko Ribar。
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-5 23:15:11 | 显示全部楼层
 
好人!
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:17:48 | 显示全部楼层
谢谢marko_ribar
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-5 23:20:20 | 显示全部楼层
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 23:25:11 | 显示全部楼层
prodromosm, try this revision...
 
  1. (defun c:demo (/ acdcp acdist cp e fn fo lst osm par parpt pdist poly              pos pre pt s) (vl-load-com) (setq osm (getvar 'osmode)) (setvar 'osmode 1) (prompt   "\nSelect a 3DPolyline to extract Stations and Elevations to txt file: " ) (if   (and (setq s (ssget "_+.:E:S" '((0 . "POLYLINE") (-4 . "&") (70 . )))        (setq fn (getfiled "Enter the output filename:"                           (getvar 'DWGPREFIX)                           "txt"                           1                 )        )                                       ; no prefix        ;|(setq pre (strcase (getstring "\nEnter station prefix:")))|;        (setq cp (getpoint "\nClick or specify center point : "))   );; and    (progn      (setq poly   (vlax-ename->vla-object (ssname s 0))            e      (fix (vlax-curve-getEndParam poly))            pos    0            par    0            acdist 0.0            lst    nil            cp     (vlax-curve-getClosestPointToProjection                     poly                     cp                     '(0.0 0.0 1.0)                   )      )      ;; setq      (while (/= par (1+ e))        (setq pt  (vlax-curve-getPointAtParam poly par)              pos (1+ pos)        )        ;; setq        (if (not parpt)          (setq lst   (cons (strcat                             ;|pre (itoa pos) "," "0.000,"|;                              "0.000,"                              (rtos (caddr pt) 2 3)                            )                            lst                      )                parpt pt          )          ;; setq          ;; the pdist variable is needed to the accumulated the distance          (setq pdist (distance (list (car pt) (cadr pt))                                (list (car parpt) (cadr parpt))                      )                lst   (cons (strcat                             ;|pre (itoa pos) ","           (rtos (setq pdist (distance (list (car pt) (cadr pt)) (list (car parpt) (cadr parpt)))) 2 3) ","|;                              (rtos (setq acdist (+ acdist pdist)) 2 3)                              ","                              (rtos (caddr pt) 2 3)                            )                            lst                      )                parpt pt          )          ;; setq        )        ;; if        (if (equal pt cp 1e-          (setq acdcp (- acdist))        )        (setq par (1+ par))      )      ;; while      (if lst        (progn          (setq lst (mapcar '(lambda (x)                               (strcat (rtos (+ (atof x) acdcp) 2 3)                                       (substr x (1+ (vl-string-search "," x)))                               )                             )                            (reverse lst)                    )                fo  (open fn "w")          )          ;; setq          (foreach l lst            (write-line l fo)          )          ;; foreach          (close fo)          (startapp "notepad" fn)          ;; added to open the new txt file        )        ;; progn      )      ;; if    )    ;; progn ) ;; if (setvar 'osmode osm) (princ));; demo
 
Regards, Marko Ribar, d.i.a.
回复

使用道具 举报

56

主题

346

帖子

68

银币

中流砥柱

Rank: 25

铜币
512
发表于 2022-7-5 23:26:58 | 显示全部楼层
 
Good man!
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-5 23:29:36 | 显示全部楼层
Thank you marko_ribar
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 06:42 , Processed in 1.160228 second(s), 68 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表