明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4039|回复: 15

求助:改多段线方向!

  [复制链接]
发表于 2005-11-29 14:34:00 | 显示全部楼层 |阅读模式

求助:那位高手帮我编个小程序,在cad2004里改多段线方向。我们是做地形图的,线型朝向都有规定,画反了只能重新画一遍,太不方便了,非常感谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2018-5-18 18:01:49 | 显示全部楼层
本帖最后由 zzl9105 于 2018-5-18 18:04 编辑
mandala 发表于 2012-11-5 14:11
上边这个lsp,将圆反向后其实成了多义线。如果你要求严格,按此多义线重新entmake一个圆即可。不过我也是做 ...

统一反向和统一一个方向,还是有区别的,有工具可以实现统一一个方向的么,比如统一顺时针方向,或者逆时针方向。谢谢
发表于 2022-9-27 15:49:01 | 显示全部楼层
meflying 发表于 2005-11-29 18:46
(defun c:Rev(/ pl ents i m ptlst ptlst2 item)  (setq pl (car (entsel "选择Pline...")))  (s ...

感谢飞哥...
发表于 2020-11-4 10:12:49 | 显示全部楼层
反向的对圆弧好像还是不行。如果带上圆弧的多段线也是不能了,高手可以试一下
发表于 2005-11-29 18:46:00 | 显示全部楼层
(defun c:Rev(/ pl ents i m ptlst ptlst2 item)
  (setq pl (car (entsel "选择Pline...")))
  (setq ents (entget pl))
  (setq i 0)
  (setq ptlst (reverse (member (assoc 10 ents) ents)))
  (setq ptlst (cdr (member (assoc 10 ptlst) ptlst)))
  (repeat (/ (length ptlst) 4)
    (setq ptlst2 (append ptlst2 (list (list (nth i ptlst) (nth (+ i 1) ptlst) (nth (+ i 2) ptlst) (nth (+ i 3) ptlst)))))
    (setq i (+ i 4))
  )
  (setq ptlst2 (mapcar '(lambda(x) (subst (cons 42 (- (cdr (assoc 42 x)))) (assoc 42 x) x)) ptlst2))
  (setq ptlst2 (apply 'append ptlst2))
  (setq i 0 m t ptlst nil)
  (while m
    (setq item (nth i (reverse ents)))
    (setq ptlst (append ptlst (list item)))
    (if (= (car item) 10) (setq m nil))
    (setq i (1+ i))
  )
  (setq ptlst (reverse (subst (cons 42 (- (cdr (assoc 42 ptlst)))) (assoc 42 ptlst) ptlst)))
  (setq ptlst2 (cons (car ptlst) ptlst2))
  (setq ptlst2 (append ptlst2 (cdr ptlst)))
  (setq i 0 m (vl-position (assoc 10 ents) ents) ptlst nil)
  (repeat m
    (setq ptlst (append ptlst (list (nth i ents))))
    (setq i (1+ i))
  ) 
  (command "_.undo" "be")
  (entmod (append ptlst ptlst2))
  (command "_.undo" "e")
)
发表于 2005-11-29 20:49:00 | 显示全部楼层

reply

工作中编的线反向工具:

不过是AutoCAD2004版本的.

命令: ASDK_REDIRECTION

可以编写lisp批量处理,

(command "ASDK_REDIRECTION" ename)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2005-11-30 08:32:00 | 显示全部楼层

高手就是高手,实在太感谢了,两个都很好用,第二个就是命令太长了点。各送两为一朵鲜花以表感谢。

明经真是我学习的好地方!!!

 楼主| 发表于 2005-11-30 14:08:00 | 显示全部楼层

二楼楼主,为什么二维多段线不能改方向,二维多段线和多段线有什么不一样,两者之间能不能互相转换(以及批量转换)。

 楼主| 发表于 2005-12-4 14:39:00 | 显示全部楼层

王咣生大哥,你这个工具很好用,就是命令能不能改简单点。谢谢

发表于 2012-11-3 23:17:34 | 显示全部楼层
冒昧的问下圆弧可以直接改变方向么?
发表于 2012-11-4 09:16:35 | 显示全部楼层
没能理解,;能否图示
发表于 2012-11-5 14:08:36 | 显示全部楼层

纯alisp的“统统反向”:

本帖最后由 mandala 于 2012-11-5 14:14 编辑
  1. ;;pline、line、spline、arc、circle,统统反向:

  2. (defun C:fx (/ ENT ENT1 Q Q2 cp r)
  3.   (prompt "将各种线型反向……")
  4.   (print)
  5.   (setq os (getvar "osmode"))
  6.   (setvar "osmode" 0)
  7.   (setq ENT (entget (setq ENT1 (car (entsel)))))
  8.   (cond
  9.     ((= (cdr (assoc 0 ENT)) "LWPOLYLINE") (reverseLwp ent1))
  10.     ((= (cdr (assoc 0 ENT)) "LINE")
  11.      (setq Q  (cons 10 (cdr (assoc 11 ent)))
  12.      Q2 (cons 11 (cdr (assoc 10 ent)))
  13.      ) ;_ 结束setq
  14.      (setq ent (subst Q (assoc 10 ent) ent)
  15.      ent (subst Q2 (assoc 11 ent) ent)
  16.      ) ;_ 结束setq
  17.      (entmod ent)
  18.     )
  19.     ((= (cdr (assoc 0 ENT)) "SPLINE")
  20.      (command "SPLINEDIT" ENT1 "E" "")
  21.     )
  22.     ((= (cdr (assoc 0 ENT)) "ARC")
  23.      (command "pedit" ent1 "y" "")
  24.      (setq ent1 (entlast))
  25.      (reverseLwp ent1)
  26.     )
  27.     ((= (cdr (assoc 0 ENT)) "CIRCLE")
  28.      (setq cp (cdr (assoc 10 ent))
  29.      r  (cdr (assoc 40 ent))
  30.      ) ;_ 结束setq
  31.      (entmake
  32.        (setq lst (list
  33.        '(0 . "LWPOLYLINE")
  34.        '(100 . "AcDbEntity")
  35.        '(67 . 0)
  36.        '(410 . "Model")
  37.        '(100 . "AcDbPolyline")
  38.        '(90 . 2)
  39.        '(70 . 129)
  40.        (cons 10 (polar cp 0 r))
  41.        '(40 . 0)
  42.        '(41 . 0)
  43.        '(42 . -1)
  44.        (cons 10 (polar cp pi r))
  45.        '(40 . 0)
  46.        '(41 . 0)
  47.        '(42 . -1)
  48.      )      ;list
  49.        )        ;setq
  50.      )          ;entmake
  51.      (command "_matchprop" ENT1 (entlast) "")
  52.      (entdel ENT1)
  53.     )
  54.     (t (prompt "\n这个东西不能反转。"))
  55.   ) ;_ 结束cond
  56.   (setvar "osmode" os)
  57.   (princ)
  58. ) ;_ 结束defun


  59. ;;;子程序:pline顶点逆序

  60. (defun reverseLwp (ent1 / a pl how li1 li2 li3)
  61.   (setq  pl  (entget ent1 '("*"))
  62.   how nil
  63.   ) ;_ 结束setq
  64.   (foreach an pl
  65.     (if  (setq a (member (car an) '(10 40 41 42)))
  66.       (setq how t)
  67.     ) ;_ 结束if
  68.     (cond ((not how) (setq li1 (cons an li1)))
  69.     ((and how a)
  70.      (cond ((= (car an) 40) (setq an (cons 41 (cdr an))))
  71.      ((= (car an) 41) (setq an (cons 40 (cdr an))))
  72.      ((= (car an) 42) (setq an (cons 42 (- 0 (cdr an)))))
  73.      (t an)
  74.      ) ;_ 结束cond
  75.      (setq li2 (cons an li2))
  76.     )
  77.     ((and how (not a)) (setq li3 (cons an li3)))
  78.     ) ;_ 结束cond
  79.   ) ;_ 结束foreach
  80.   (entmod
  81.     (append
  82.       (reverse li1)
  83.       (append (cdddr li2) (list (car li2) (cadr li2) (caddr li2)))
  84.       (reverse li3)
  85.     ) ;_ 结束append
  86.   ) ;_ 结束entmod
  87. ) ;_ 结束defun

发表于 2012-11-5 14:11:28 | 显示全部楼层
本帖最后由 mandala 于 2012-11-5 14:12 编辑

上边这个lsp,将圆反向后其实成了多义线。如果你要求严格,按此多义线重新entmake一个圆即可。不过我也是做地形图的,似乎圆或多义线,关系不大。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-23 03:14 , Processed in 0.194316 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表