乐筑天下

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

[编程交流] 需要帮助创建多段线e

[复制链接]

4

主题

8

帖子

4

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 23:19:13 | 显示全部楼层 |阅读模式
大家好,
对不起,我的英语太差了
我在图纸中有一条道路的中心线。我想从文件中在中心线的左侧和右侧创建两条多段线。txt文件
 
文件结构:
第1列:中心线的桩号
第2列:从左侧边缘道路到车站点中心线的垂直距离
第3列:从右边缘道路到车站点中心线的垂直距离
 
我们在图形中选择中心线的多段线,选择起点,然后选择文件。txt。
 
示例请下载附加文件。
请帮帮我!
测验txt文件
示例1.dwg
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 23:32:39 | 显示全部楼层
你好
 
试试这个惯例,让我知道你会怎么做。
 
  1. (defun c:Test (/ _ps _lw f o st l p s st nd pt ang e lst len)
  2. ;;    Author : Tharwat 30. Mar. 2014        ;;
  3. (if (and (setq f (getfiled "Select txt file :" "" "txt" 16))
  4.           (setq o (open f "r"))
  5.           (setq p (getpoint "\n Specify point at start point of Polyline :"))
  6.           (setq s (ssget p '((0 . "LWPOLYLINE"))))
  7.      )
  8.    (progn
  9.      (defun _ps (st / p v)
  10.        (while (setq p (vl-string-position 9 st))
  11.          (setq v  (cons (substr st 1 p) v)
  12.                st (substr st (+ 2 p) (strlen st))
  13.          )
  14.        )
  15.        (if st
  16.          (setq v (cons st v))
  17.        )
  18.        (reverse v)
  19.      )
  20.      (while (setq st (read-line o)) (setq l (cons (_ps st) l)))
  21.      (setq l (reverse l))
  22.      (close o)
  23.      (if (< (distance p (setq st (vlax-curve-getstartpoint (setq e (ssname s 0)))))
  24.             (distance p (setq nd (vlax-curve-getendpoint e)))
  25.          )
  26.        (progn
  27.          (setq p st)
  28.          (foreach d l
  29.            (if (setq ang (angle '(0.0 0.0 0.0)
  30.                                 (vlax-curve-getfirstderiv
  31.                                   e
  32.                                   (vlax-curve-getparamatpoint e (setq pt (vlax-curve-getpointatdist e (atof (car d)))))
  33.                                 )
  34.                          )
  35.                )
  36.              (setq lst
  37.                     (cons
  38.                       (list (polar pt (+ (/ pi 2.) ang) (atof (cadr d))) (polar pt (- ang (/ pi 2.)) (atof (caddr d))))
  39.                       lst
  40.                     )
  41.              )
  42.            )
  43.          )
  44.        )
  45.        (progn (setq len (vlax-curve-getdistatpoint e nd))
  46.               (foreach d l
  47.                 (if (setq
  48.                       ang (angle
  49.                             '(0.0 0.0 0.0)
  50.                             (vlax-curve-getfirstderiv
  51.                               e
  52.                               (vlax-curve-getparamatpoint e (setq pt (vlax-curve-getpointatdist e (- len (atof (car d))))))
  53.                             )
  54.                           )
  55.                     )
  56.                   (setq lst
  57.                          (cons
  58.                            (list (polar pt (+ (/ pi 2.) ang) (atof (cadr d))) (polar pt (- ang (/ pi 2.)) (atof (caddr d))))
  59.                            lst
  60.                          )
  61.                   )
  62.                 )
  63.               )
  64.        )
  65.      )
  66.      (if (and lst (> (length lst) 1))
  67.        (progn (defun _lw (pts)
  68.                 (entmakex (append (list '(0 . "LWPOLYLINE")
  69.                                         '(100 . "AcDbEntity")
  70.                                         '(100 . "AcDbPolyline")
  71.                                         (cons 90 (length lst))
  72.                                         '(70 . 0)
  73.                                   )
  74.                                   (mapcar '(lambda (x) (cons 10 x)) pts)
  75.                           )
  76.                 )
  77.               )
  78.               (mapcar '_lw (list (mapcar 'car lst) (mapcar 'cadr lst)))
  79.        )
  80.      )
  81.    )
  82.    (princ "\n Invalid file or Picked isn't on Polyline !!")
  83. )
  84. (princ)
  85. )(vl-load-com)
回复

使用道具 举报

4

主题

8

帖子

4

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 23:38:22 | 显示全部楼层
嗨,塔瓦,非常感谢你帮助我。这个惯例奏效了!
但是,如果在图形中未选择多段线,则当两条(或>2条)多段线具有公共起点时会发生什么情况?
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-5 23:48:52 | 显示全部楼层
干得好Tharwat。我可以问你一个问题吗。
 
a) 如果我们有这样一个文件会怎么样
b) 如果我想选择具有特定车站的道路中心线的特定点,会发生什么?
 
  1. 0,3.5,3.6
  2. 20,3.4,3.6
  3. 45,3.6,3.5
  4. 70,3.5,3.4
  5. 100,3.4,3.6

 
谢谢
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 23:54:37 | 显示全部楼层
 
试着在例行程序中替换这个,并让我知道。
 
更换此。
 
  1. (while (setq p (vl-string-position 9 st))

 
用这个。
 
  1. (while (setq p (vl-string-position 44 st))
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 00:07:58 | 显示全部楼层
 
只有一个会被考虑。
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-6 00:17:01 | 显示全部楼层
好的,我换一下。
如果我想选择具有特定车站的道路中心线的特定点,会发生什么?我想给任何时候的起点不是一直为0,也不是一直都必须是多段线的起点或终点,必须是多段线的任何点。
 
实例
 
我有一条从4+500到8+400的路,我想把线从4+500偏移到6+200。首先我把点选到4+500,给起点桩号4+500,然后从4+500-->6+200加载文件
 
查看附加文件
  1. (defun c:Test (/ _ps _lw f o st l p s st nd pt ang e lst len)
  2. ;;    Author : Tharwat 30. Mar. 2014        ;;
  3. (if (and (setq f (getfiled "Select txt file :" "" "txt" 16))
  4.           (setq o (open f "r"))
  5.           (setq p (getpoint "\n Specify point at start point of Polyline :"))
  6.           (setq s (ssget p '((0 . "LWPOLYLINE"))))
  7.      )
  8.    (progn
  9.      (defun _ps (st / p v)
  10.        (while (setq p (vl-string-position 44 st))
  11.          (setq v  (cons (substr st 1 p) v)
  12.                st (substr st (+ 2 p) (strlen st))
  13.          )
  14.        )
  15.        (if st
  16.          (setq v (cons st v))
  17.        )
  18.        (reverse v)
  19.      )
  20.      (while (setq st (read-line o)) (setq l (cons (_ps st) l)))
  21.      (setq l (reverse l))
  22.      (close o)
  23.      (if (< (distance p (setq st (vlax-curve-getstartpoint (setq e (ssname s 0)))))
  24.             (distance p (setq nd (vlax-curve-getendpoint e)))
  25.          )
  26.        (progn
  27.          (setq p st)
  28.          (foreach d l
  29.            (if (setq ang (angle '(0.0 0.0 0.0)
  30.                                 (vlax-curve-getfirstderiv
  31.                                   e
  32.                                   (vlax-curve-getparamatpoint e (setq pt (vlax-curve-getpointatdist e (atof (car d)))))
  33.                                 )
  34.                          )
  35.                )
  36.              (setq lst
  37.                     (cons
  38.                       (list (polar pt (+ (/ pi 2.) ang) (atof (cadr d))) (polar pt (- ang (/ pi 2.)) (atof (caddr d))))
  39.                       lst
  40.                     )
  41.              )
  42.            )
  43.          )
  44.        )
  45.        (progn (setq len (vlax-curve-getdistatpoint e nd))
  46.               (foreach d l
  47.                 (if (setq
  48.                       ang (angle
  49.                             '(0.0 0.0 0.0)
  50.                             (vlax-curve-getfirstderiv
  51.                               e
  52.                               (vlax-curve-getparamatpoint e (setq pt (vlax-curve-getpointatdist e (- len (atof (car d))))))
  53.                             )
  54.                           )
  55.                     )
  56.                   (setq lst
  57.                          (cons
  58.                            (list (polar pt (+ (/ pi 2.) ang) (atof (cadr d))) (polar pt (- ang (/ pi 2.)) (atof (caddr d))))
  59.                            lst
  60.                          )
  61.                   )
  62.                 )
  63.               )
  64.        )
  65.      )
  66.      (if (and lst (> (length lst) 1))
  67.        (progn (defun _lw (pts)
  68.                 (entmakex (append (list '(0 . "LWPOLYLINE")
  69.                                         '(100 . "AcDbEntity")
  70.                                         '(100 . "AcDbPolyline")
  71.                                         (cons 90 (length lst))
  72.                                         '(70 . 0)
  73.                                   )
  74.                                   (mapcar '(lambda (x) (cons 10 x)) pts)
  75.                           )
  76.                 )
  77.               )
  78.               (mapcar '_lw (list (mapcar 'car lst) (mapcar 'cadr lst)))
  79.        )
  80.      )
  81.    )
  82.    (princ "\n Invalid file or Picked isn't on Polyline !!")
  83. )
  84. (princ)
  85. )(vl-load-com)

例子。图纸
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-6 00:24:03 | 显示全部楼层
我更新预览帖子
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 00:02 , Processed in 0.377365 second(s), 68 queries .

© 2020-2025 乐筑天下

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