找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2850|回复: 13

[多段线] 偏移多段线的一段--思路简单明了--资源共享,反对收币!

[复制链接]

已领礼包: 41个

财富等级: 招财进宝

发表于 2013-11-27 16:14:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
  1. (defun getvp (p0 p1 p2 / r12 r0 p3)    ; 求垂点
  2.   (setq r12 (angle p1 p2)
  3.         r0 (+ r12 (angtof "90"))
  4.         p3 (polar p0 r0 1.0)
  5.   )
  6.   (inters
  7.     p1
  8.     p2
  9.     p0
  10.     p3
  11.     nil
  12.   )
  13. )


  14. (defun getep (obj / p1 p p2)               ; 求端点,obj由(entsel)取得
  15.   (setq ename (car obj)
  16.         p0 (cadr obj)
  17.   )
  18.   (setq p1 (osnap p0 "end")
  19.         p (osnap p0 "mid")
  20.         p2 (mapcar
  21.              '(lambda (x y)
  22.                 (- (* 2 x) y)
  23.               )
  24.              p
  25.              p1
  26.            )
  27.   )
  28.   (list p1 p2)
  29. )


  30. ;偏移多义线的一段,也可偏移直线,不用判断。其他类型,由于本人实际工作中用不着,没有考虑,有需要的可以予以改编,思路类似。
  31. (defun c:fxpy ()
  32.   (or
  33.     dis1_oo
  34.     (setq dis1_oo 1000)
  35.   )
  36.   (princ (strcat "\n指定偏移距离<" (rtos dis1_oo) ">:"))
  37.   (setq dis2_oo (getdist))
  38.   (if dis2_oo
  39.     (setq dis1_oo dis2_oo)
  40.     (setq dis2_oo dis1_oo)
  41.   )
  42.   (while (setq obj (entsel "\n选择要偏移的对象:"))
  43.     (setq p (getpoint "\n指定点以确定偏移所在一侧:"))
  44.     (setq p1 (car (getep obj))
  45.           p2 (cadr (getep obj))
  46.     )                                       ; 求端点
  47.     (setq p0 (getvp p p1 p2))               ; 求垂点
  48.     (setq ang (angle p0 p)
  49.           p3 (polar p1 ang dis2_oo)
  50.           p4 (polar p2 ang dis2_oo)
  51.     )
  52.     (setq ent (entget (car obj)))
  53.     (setq ys (if (assoc 62 ent)
  54.                (cdr (assoc 62 ent))
  55.                256
  56.              )
  57.           xx (if (assoc 6 ent)
  58.                (cdr (assoc 6 ent))
  59.                "bylayer"
  60.              )
  61.           bl (if (assoc 48 ent)
  62.                (cdr (assoc 48 ent))
  63.                1
  64.              )
  65.           kd (if (assoc 40 ent)
  66.                (cdr (assoc 40 ent))
  67.              )
  68.           ty (cdr (assoc 0 ent))
  69.     )
  70.     (if (= ty "LINE")
  71.       (entmake (list '(0 . "LINE") (cons 10 p3) (cons 11 p4) (cons 62 ys)
  72.                      (cons 6 xx) (cons 48 bl)
  73.                )
  74.       )
  75.       (entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '
  76.                      (100 . "AcDbPolyline") (cons 90 2) (cons 10 p3)
  77.                      (cons 10 p4) (cons 62 ys) (cons 6 xx) (cons 48 bl)
  78.                      (cons 43 kd)
  79.                )
  80.       )
  81.     )
  82.   )
  83.   (princ)
  84. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-27 18:15:13 | 显示全部楼层
支持一个  
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-27 21:13:59 | 显示全部楼层
本帖最后由 st788796 于 2013-11-27 22:18 编辑

API这样写
  1. (defun c:tt (/ d e p typ arc dis e1 index info key ln pcen pts radius)
  2.   (defun offsetLine (e p tf / e1 d sp ep)
  3.     (setq sp (xdrx_curve_getstartpoint e)
  4.           ep (xdrx_curve_getendpoint e)
  5.           d  (xdrx_point_dist2line p sp ep)
  6.           e1 (xdrx_curve_getoffsetcurves
  7.                e
  8.                (if (minusp d)
  9.                  (- (getvar "offsetdist"))
  10.                  (getvar "offsetdist")
  11.                )
  12.              )
  13.     )
  14.     (if        (minusp        (* (xdrx_point_dist2line
  15.                      (xdrx_curve_getstartpoint (ssname e1 0))
  16.                      sp
  17.                      ep
  18.                    )
  19.                    d
  20.                 )
  21.         );_判断是否异向
  22.       (xdrx_entity_mirror e1 (list sp ep) t)
  23.     )
  24.     (xdrx_entity_setpropertiesfrom e1 e)
  25.     (if        tf
  26.       (xdrx_entity_delete e)
  27.     )
  28.   )
  29.   (if (setq
  30.         d (getdist
  31.             (strcat "\n偏移距离<" (rtos (getvar "offsetdist")) ">: ")
  32.           )
  33.       )
  34.     (setvar "offsetdist" d)
  35.     (setq d (getvar "offsetdist"))
  36.   )
  37.   (if (minusp (getvar "offsetdist"))
  38.     (progn
  39.       (princ "\n默认距离1000!")
  40.       (setvar "offsetdist" 1000.)
  41.     )
  42.   )
  43.   (while (and
  44.            (setq e (xdrx_entsel "\n拾取Line或Pline线段: " '((0 . "Line,Lwpolyline"))))
  45.            (setq p (getpoint "\n偏移方向: "))
  46.          )
  47.     (progn
  48.       (setq typ (xdrx_getpropertyvalue (car e) "IsA"))
  49.       (if (= typ "AcDbLine")
  50.         (setq e1 (offsetline (car e) p nil))
  51.         (progn
  52.           (setq        key (xdrx_polyline_segtype
  53.                       (car e)
  54.                       (setq index
  55.                              (fix (apply 'xdrx_curve_getparamatpoint e))
  56.                       )
  57.                     )
  58.           )
  59.           (and
  60.             (= key "kLine")
  61.             (setq pts (xdrx_polyline_getlinesegat (car e) index)
  62.                   ln  (xdrx_line_make pts)
  63.             )
  64.             (offsetline (ssname ln 0) p t)
  65.           )
  66.           (and (= key "kArc")
  67.                ;;( T (42260.6 17638.3 0.0) 5260.35 6.09389 1.66863)
  68.                ;;逆时针T、顺指针NIL
  69.                (setq info (xdrx_polyline_getarcsegat (car e) index)
  70.                      pcen (cadr info)
  71.                      radius (caddr info)
  72.                      dis  (distance p pcen)
  73.                )
  74.                (if (< dis radius)
  75.                  (setq dis (- radius (getvar "offsetdist")))
  76.                  (setq dis (+ radius (getvar "offsetdist")))
  77.                )
  78.                ;;(xdrx_arc_make <圆心> <半径> <起始角> <终止角>)
  79.                (setq arc (apply        'xdrx_arc_make
  80.                                 (if (car info)
  81.                                   (list        pcen
  82.                                         dis
  83.                                         (nth 3 info)
  84.                                         (last info)
  85.                                   )
  86.                                   (list        pcen
  87.                                         dis
  88.                                         (last info)
  89.                                         (nth 3 info)
  90.                                   )
  91.                                 )
  92.                          )
  93.                )
  94.                (xdrx_entity_setpropertiesfrom arc (car e))
  95.           )
  96.         )
  97.       )
  98.     )
  99.   )
  100.   (princ)
  101. )

点评

用了好多特殊函数,都不是系统本来就有的,对于一个不怎么熟悉这些特殊函数的读者而言,读起来确实有点费劲。看来,要想看懂,额外还得学习很多函数啊。 不过,刻苦钻研的这种精神倒挺让人敬佩的。  详情 回复 发表于 2013-11-27 21:48
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

 楼主| 发表于 2013-11-27 21:48:28 | 显示全部楼层

用了好多特殊函数,都不是系统本来就有的,对于一个不怎么熟悉这些特殊函数的读者而言,读起来确实有点费劲。看来,要想看懂你的程序,额外还得学习很多函数啊。
不过,刻苦钻研的这种精神倒挺让人敬佩的。
另外,顺便问一下,API 是什么意思?


点评

这些都是 ARX 定义的函数,也是 Autodesk 自家东西  详情 回复 发表于 2013-11-27 21:49
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-27 21:49:59 | 显示全部楼层
958620832 发表于 2013-11-27 21:48
用了好多特殊函数,都不是系统本来就有的,对于一个不怎么熟悉这些特殊函数的读者而言,读起来确实有点费 ...

这些都是 ARX 定义的函数,也是 Autodesk 自家东西
多加载一个 ARX 而已

点评

一个什么ARX文件,这些函数,我怎么从没看过?  详情 回复 发表于 2013-11-27 21:53
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

 楼主| 发表于 2013-11-27 21:53:56 | 显示全部楼层
st788796 发表于 2013-11-27 21:49
这些都是 ARX 定义的函数,也是 Autodesk 自家东西
多加载一个 ARX 而已

一个什么ARX文件,这些函数,我怎么从没看过?

点评

在这个论坛混老大 XdRxAPI 都不知道! http://bbs.xdcad.net/thread-668896-1-1.html  详情 回复 发表于 2013-11-27 22:00
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-27 22:00:39 | 显示全部楼层
958620832 发表于 2013-11-27 21:53
一个什么ARX文件,这些函数,我怎么从没看过?

在这个论坛混老大 XdRxAPI 都不知道!{:soso_e114:}
http://bbs.xdcad.net/thread-668896-1-1.html
segoff.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-4-16 10:15:05 | 显示全部楼层
感谢分享,好程序,很实用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 117个

财富等级: 日进斗金

发表于 2014-4-18 14:12:36 | 显示全部楼层
支持一个  
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 282个

财富等级: 日进斗金

发表于 2014-4-23 17:48:08 | 显示全部楼层
感谢7楼附上示例文件!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2017-6-19 00:48:22 来自手机 | 显示全部楼层
很早就想要这样的一个功能了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 96个

财富等级: 招财进宝

发表于 2017-6-19 08:01:37 | 显示全部楼层
支持共享,呵呵
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-9-5 22:46:26 | 显示全部楼层
太强大了,谢谢!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 47个

财富等级: 招财进宝

发表于 2019-11-17 20:54:33 | 显示全部楼层
这个功能对于野外调绘图形房角纠正非常实用,省的做辅助线了,很好,赞一个!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-22 03:17 , Processed in 0.202533 second(s), 62 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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