找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: q3_2006

[求助] 带孤岛判断的批量偏移

[复制链接]

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2013-10-28 18:00:01 | 显示全部楼层
st788796 发表于 2013-10-28 17:49
一层的就不用写那么复杂了
分好组,组内最大外偏,里面都是内偏
要少N多判断,效率高很多了

一定有奇偶判断的。。因为最里面一层。。。不一定内偏哟。。。

点评

填充偏移方法最好。。因为所有的岛一定是向外偏。。这个是一定的。。。  详情 回复 发表于 2013-10-28 18:03
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2013-10-28 18:03:18 | 显示全部楼层
q3_2006 发表于 2013-10-28 18:00
一定有奇偶判断的。。因为最里面一层。。。不一定内偏哟。。。

填充偏移方法最好。。因为所有的岛一定是向外偏。。这个是一定的。。。

点评

填充还有偏移?要好好看看了,如果这样就简单了  详情 回复 发表于 2013-10-28 18:07
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-28 18:07:44 来自手机 | 显示全部楼层
本帖最后由 st788796 于 2013-10-28 18:09 编辑
q3_2006 发表于 2013-10-28 18:03
填充偏移方法最好。。因为所有的岛一定是向外偏。。这个是一定的。。。


填充还有偏移?要好好看看了,如果这样就简单了,填充生成边界即可,只单独处理最外的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 61个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 1757个

财富等级: 堆金积玉

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-29 08:38:16 | 显示全部楼层
本帖最后由 st788796 于 2013-10-29 08:55 编辑
q3_2006 发表于 2013-10-28 16:31
这是E大的。。处理得很好。。。

这个里面没有交叉情况,只需要用 Xdrx_curve_intersect 判断,不需要 CurveInCurve 函数的,下面是修改后的程序
  1. (defun c:tt (/ OffsetCurve curveInCurve GroupToOne d ss el lst)
  2.   (defun OffsetCurve (e d / lastent)
  3.     (setq lastent (entlast))
  4.     (vl-catch-all-apply
  5.       '(lambda () (vla-offset (vlax-ename->vla-object e) d))
  6.     ) ;_防止间隙过小
  7.     (if (not (equal (entlast) lastent))
  8.       (xdrx_setpropertyvalue (entlast) "Color" 4)
  9.     )
  10.   )
  11.   ;;批量处理时分组
  12.   (defun GroupToOne (lst / ll tf)
  13.     (setq ll (list (list (car lst))))
  14.     (while (setq lst (cdr lst))
  15.       (setq ll
  16.       (mapcar '(lambda (x / l)
  17.    (if (xdrx_curve_intersect (car lst) (last x))
  18.      (setq l  (cons (car lst) x)
  19.     tf t
  20.      )
  21.    )
  22.    (if l
  23.      l
  24.      x
  25.    )
  26.         )
  27.        ll
  28.       )
  29.       )
  30.       (if (not tf)
  31. (setq ll (cons (list (car lst)) ll))
  32.       )
  33.       (setq tf nil)
  34.     )
  35.     ll
  36.   )
  37.   (if (and (or (setq
  38.    d (getdist (strcat "\nSpace dist<"
  39.         (rtos (getvar "offsetdist") 2 3)
  40.         ">: "
  41.        )
  42.      )
  43.         )
  44.         (and (or (null d) (minusp (getvar "offsetdist")))
  45.       (setq d 1.5)
  46.         )
  47.         (setq d (getvar "offsetdist"))
  48.     )
  49.     (setvar "offsetdist" d)
  50.     (setq ss (ssget '((-4 . "<or")
  51.         (0 . "circle")
  52.         (0 . "*polyline")
  53.         (-4 . "&=")
  54.         (70 . 1)
  55.         (-4 . "or>")
  56.        )
  57.       )
  58.     )
  59.       )
  60.     (progn
  61.       (XD::Begin)
  62.       (xdrx_document_ucsoff)
  63.       ;;(xdrx_curve_removedup ss) ;_消重
  64.       (setq el (xdrx_pickset->ents ss))
  65.       (mapcar '(lambda (e)
  66.    (if (= (xdrx_getpropertyvalue e "IsA") "AcDbPolyline")
  67.      (progn
  68.        ;;(xdrx_polyline_compress e) ;_消除重点
  69.        (and (minusp (apply 'xdrx_points_area
  70.       (xdrx_entity_getstretchpoint e)
  71.       )
  72.      )
  73.      (xdrx_curve_reverse e) ;_统一逆时针
  74.        )
  75.      )
  76.    )
  77.         )
  78.        el
  79.       )
  80.       (setq el (vl-sort el
  81.     '(lambda (e1 e2)
  82.        (> (car (xdrx_getarea e1))
  83.           (car (xdrx_getarea e2))
  84.        )
  85.      )
  86.   ) ;_按面积大小排序
  87.      lst (GroupToOne el)
  88.       )
  89.       ;;(xdrx_undostart)
  90.       (mapcar
  91. '(lambda (x / b c tf l ll)
  92.     (cond
  93.       ((= (length x) 1)
  94.        (OffsetCurve (car x) d)
  95.       )
  96.       ((= (length x) 2)
  97.        (OffsetCurve (car x) (- d))
  98.        (OffsetCurve (cadr x) d)
  99.       )
  100.       (t
  101.         (OffsetCurve (last x) d)
  102.         (while x
  103.    (setq c (car x)
  104.          b (cdr x)
  105.    )
  106.    (while b
  107.      (if (xdrx_curve_intersect c (car b))
  108.        (setq l (cons c l))
  109.      )
  110.      (setq b (cdr b))
  111.    )
  112.    (setq x  (cdr x)
  113.          ll (cons l ll)
  114.          l  nil
  115.    )
  116.         ) ;_组内是面积由小到大
  117.         (mapcar '(lambda (a)
  118.      (if (zerop (rem (1- (length a)) 2))
  119.        (OffsetCurve (last a) (- d))
  120.        (OffsetCurve (last a) d)
  121.      )
  122.    )
  123.          (vl-remove nil ll)
  124.         )
  125.       ) ;_ t分组后由内向外
  126.     ) ;_end cond
  127.   ) ;_ end lambda
  128. lst
  129.       ) ;_mapcar
  130.       ;;(xdrx_undoend)
  131.       (xdrx_document_ucson)
  132.       (XD::End)
  133.     )
  134.   )
  135.   (princ)
  136. )

偏移部分仅直线型 PLINE 可以用 api
  1. (defun OffsetCurve (e d / lastent)
  2.     (setq lastent (entlast))
  3.     (if (and (= (xdrx_getpropertyvalue e "IsA") "AcDbPolyline")
  4.       (not (xdrx_polyline_hasbulges e))
  5. )
  6.       (progn
  7. (setq pts (XD::Pnts:Close (xdrx_entity_getstretchpoint e)))
  8. (apply 'xdrx_polyline_make
  9.         (cons 't (apply 'xdrx_points_offset (cons d pts)))
  10. )
  11.       )
  12.       (vl-catch-all-apply
  13. '(lambda () (vla-offset (vlax-ename->vla-object e) d))
  14.       ) ;_防止间隙过小
  15.     )
  16.     (if (not (equal (entlast) lastent))
  17.       (xdrx_setpropertyvalue (entlast) "Color" 4)
  18.     )
  19.   )

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

使用道具 举报

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

使用道具 举报

已领礼包: 68个

财富等级: 招财进宝

发表于 2015-12-19 09:02:12 | 显示全部楼层
q3_2006 发表于 2013-10-28 16:31
这是E大的。。处理得很好。。。

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

使用道具 举报

已领礼包: 1336个

财富等级: 财源广进

发表于 2017-5-16 19:57:09 | 显示全部楼层
看看有啥子好东东!

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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2018-6-26 17:32:55 | 显示全部楼层
如图中有详细说明,哪位高人出手一下,谢谢!
regionoffset.jpg

regionoffset.zip

45.1 KB, 下载次数: 4, 下载积分: D豆 -1 , 活跃度 1

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 25个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 47个

财富等级: 招财进宝

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

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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