明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3110|回复: 12

如何把一段折线(pline)展开成相同延长度的直线(pline)?

[复制链接]
发表于 2012-6-13 15:55:06 | 显示全部楼层 |阅读模式
补充图片说明.并附CAD图,不知有没有类似的lsp?求大招.

本帖子中包含更多资源

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

x

点评

通过计算线长直接画条线行吗?  发表于 2012-6-13 20:46
发表于 2022-7-18 19:31:54 | 显示全部楼层
  1. (defun makepl(arg);;arg==>(list pts 闭合标志 全局宽度 线宽 图层 颜色 厚度 线型)pts以后可省略
  2.       (entmakex(append(mapcar'cons'(0 100 100 43 370 8 62 39 6)(append'("LWPOLYLINE""AcDbEntity""AcDbPolyline")(cddr arg)))
  3.                       (cons(cons 90(length(car arg)))(cons(cons 70(if(cadr arg)(cadr arg)0))(mapcar'(lambda(x)(cons 10 x))(car arg)))))))
  4. (defun c:tt(/ e p l)
  5.   (while(and(setq l nil e(car(entsel"选择需要展开的曲线")))
  6.       (setq n(VL-CATCH-ALL-APPLY'vlax-curve-getendparam(list e)))
  7.       (setq p(getpoint"指定展开线起点:")))
  8.       (cond((WCMATCH(cdr(assoc 0(entget e)))"*POLYLINE")
  9.             (while(setq p(vlax-curve-getdistatparam e n))
  10.               (setq l(cons(polar p 0(vlax-curve-getdistatparam e n))l)n(1- n)))
  11.             (makepl(List l)))
  12.            (t(makepl(list(list p(polar p 0(-(vlax-curve-getdistatparam e(vlax-curve-getendparam e))(vlax-curve-getdistatparam e(vlax-curve-getstartparam e)))))))))))
发表于 2022-7-18 00:09:41 | 显示全部楼层
langjs 发表于 2012-6-14 09:12
对LWPOLYLINE和POLYLINE都有效

大神,这个代码可以给定一个高度,再连接上下每条线段的端点吗
 楼主| 发表于 2012-6-13 20:07:42 | 显示全部楼层
展开线啊.没有人关注吗?顶上
发表于 2012-6-13 21:28:42 | 显示全部楼层
(defun c:aa (/ d ent lst name p0 p1 p2 pt1 pt2 pt3 ss txt x)
  (defun dim (pt1 pt2 / d p0 txt)
    (setq d (distance pt1 pt2) txt (rtos d) p2 (polar p1 0.0 d)  p0 (polar p1 0.0 (* 0.5 d)))
    (entmake (list '(0 . "LINE") (cons 62 3) (cons 10 p1) (cons 11 p2)))
    (entmake (list '(0 . "TEXT") (cons 62 2) (cons 10 p0) (cons 40 300) (cons 1 txt) '(41 . 0.8) '(72 . 1) ;字高300
                   (cons 11 p0) '(73 . 0)  ) )
    (setq p1 p2)
  )
  (setvar "cmdecho" 0)
  (vl-load-com)
  (setq ss (ssget ":E:S" '((0 . "LWPOLYLINE"))))
  (setq p1 (getpoint "指定基点")  name (ssname ss 0) ent (entget name) lst nil )
  (foreach x ent
    (if (= (car x) 10) (setq lst (cons (cdr x) lst)))
  )
  (setq lst (reverse lst) pt1 nil pt2 nil )
  (foreach x lst
    (if (null pt1)(setq pt1 x pt3 x )(setq pt2 x))
    (if pt2 (progn (dim pt1 pt2) (setq pt1 pt2)))
  )
  (if (= 1 (cdr (assoc 70 ent))) (dim pt2 pt3))
  (princ)
)
 楼主| 发表于 2012-6-13 22:42:17 | 显示全部楼层
谢谢楼上的..只对LWPOLYLINE有效..如果是POLYLINE就要自己先(CONVERTPOLY)转换了..万分感谢!!
 楼主| 发表于 2012-6-13 22:51:53 | 显示全部楼层
可以,有了线变成pline也是很容易的事.楼下已完成,试用过有效,感谢.
发表于 2012-6-14 09:12:56 | 显示全部楼层
alex0007 发表于 2012-6-13 22:42
谢谢楼上的..只对LWPOLYLINE有效..如果是POLYLINE就要自己先(CONVERTPOLY)转换了..万分感谢!!

对LWPOLYLINE和POLYLINE都有效


(defun c:aa ( / d ent j n name p0 p1 p2 pt1 pt2 pt3 ptslist ss txt vtxlst x)
  (defun dim (pt1 pt2 / d p0 txt)
    (setq d (distance pt1 pt2) txt (rtos d) p2 (polar p1 0.0 d) p0 (polar p1 0.0 (* 0.5 d)) )
    (entmake (list '(0 . "LINE") (cons 62 3) (cons 10 p1) (cons 11 p2)))
    (entmake (list '(0 . "TEXT") (cons 62 2) (cons 10 p0) (cons 40 300) (cons 1 txt) '(41 . 0.8) '(72 . 1) ; 字高300
                   (cons 11 p0) '(73 . 0)) )
    (setq p1 p2)
  )
  (setvar "cmdecho" 0)
  (vl-load-com)
  (setq ss (ssget ":E:S" '((0 . "LWPOLYLINE,POLYLINE"))))
  (setq p1 (getpoint "指定基点")  name (ssname ss 0)  ent (entget name)  ptslist nil  j 0 )
  (if (= "LWPOLYLINE" (cdr (assoc 0 ent)))  (setq n 2)  (setq n 3))
  (setq vtxlst (vlax-safearray->list (vlax-variant-value (vlax-get-property (vlax-ename->vla-object name) 'coordinates))))
  (repeat (/ (length vtxlst) n)
    (setq ptslist(append ptslist (list (list (nth j vtxlst) (nth (1+ j) vtxlst) (if (= n 3)(nth (+ 2 j) vtxlst)  0.0 )))))
    (setq j (+ j n))
  )
  (setq pt1 nil pt2 nil )
  (foreach x ptslist
    (if (null pt1) (setq pt1 x  pt3 x ) (setq pt2 x))
    (if pt2 (progn (dim pt1 pt2) (setq pt1 pt2)))
  )
  (if (= 1 (cdr (assoc 70 ent))) (dim pt2 pt3))
  (princ)
)

评分

参与人数 1明经币 +1 收起 理由
flytoday + 1 很给力!

查看全部评分

发表于 2012-6-14 09:51:22 | 显示全部楼层
这个非常好。。希望增加弧线也能展开。让程序最完美~
发表于 2012-6-14 10:06:51 | 显示全部楼层

希望展开后断点插入一直线~~

本帖子中包含更多资源

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

x

点评

层层加码,要求多多。  发表于 2012-6-14 10:33
发表于 2012-6-14 10:58:46 | 显示全部楼层
flytoday 发表于 2012-6-14 10:06
希望展开后断点插入一直线~~

6楼的程序稍稍加了几句

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
flytoday + 1 很给力!

查看全部评分

发表于 2019-8-5 22:23:35 | 显示全部楼层
楼上的文件,不能下载!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-24 04:21 , Processed in 0.194421 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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