找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2764|回复: 15

[求助] 关于面域局部边界偏移思路

[复制链接]

已领礼包: 2个

财富等级: 恭喜发财

发表于 2018-7-25 16:30:57 | 显示全部楼层 |阅读模式

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

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

×
如附件所述,求编程思路,谢谢!
新建位图图像.jpg

Drawing1.zip

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

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

已领礼包: 2476个

财富等级: 金玉满堂

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2018-7-25 20:07:47 | 显示全部楼层
本帖最后由 Lispboy 于 2018-7-25 20:10 编辑

REGION-OFFSET.gif

注释都帮你写了,生成的蓝色线是你说的相贴的,根据它上线偏移。

  1. (defun c:tt ()
  2.   (if (and (setq dist (getreal "\n偏移距离:"))
  3.            (setq e1 (car (xdrx_entsel "\n第一个REGION<退出>:" '((0 . "REGION")))))
  4.            (setq e2 (car (xdrx_entsel "\n第一个REGION<退出>:" '((0 . "REGION")))))
  5.       )
  6.     (progn (xdrx_begin)
  7.            (xdrx_setvar "retentlist" 1) ;;设置API变量,生成实体函数返回实体表而非选择集
  8.            (setq r1 (xdrx_entity_copy e1);;复制两个REGION
  9.                  r1 (entlast)
  10.                  r2 (xdrx_entity_copy e2)
  11.                  r2 (entlast)
  12.            )
  13.            (setq ss (xdrx_get_subtract r1 r2));;面域R1减去R2
  14.            (setq crvs (xdrx_region->curve ss 0));;得到的REGION转曲线表,参数0,返回到最简单曲线,本例是LINE
  15.            (setq crvs-2 (xdrx_region->curve e2 t);; REGION 2 曲线表(没参数0-2返回LWPOLYLINE),参数T,表示复制生成,不删除原REGION
  16.                  el     nil
  17.            )
  18.       ;;下面MAPCAR循环,判断新生成的LINE哪些和两个LWPOLYLINE有重叠部分,不重叠的删除,留下重叠部分。
  19.            (mapcar '(lambda (x)
  20.                       (setq g1 (xdge::constructor x))
  21.                       (setq ents nil)
  22.                       (mapcar '(lambda (y)
  23.                                  (setq g2            (xdge::constructor y)
  24.                                        crv-crv-int3d (xdge::constructor "kCurveCurveint3d" g2 g1);;构建AcGeCurveCurveInt3d曲线求交对象
  25.                                  )
  26.                                  (if (> (xdge::getpropertyvalue crv-crv-int3d "numoverlaps") 0);;如果重叠部分大于0,保存到表中,GE实体。
  27.                                    (setq el (cons g2 el))
  28.                                  )
  29.                                )
  30.                               crvs
  31.                       )
  32.                     )
  33.                    crvs-2
  34.            )
  35.            (xdrx_entity_delete crvs-2 crvs);;删除生成的多段线
  36.            (setq ss (xdge::entity:make el));;重叠部分GE实体生成数据库实体曲线
  37.            (xdrx_entity_setproperty ss "color" 5)  ;;重叠部分颜色设置成蓝色,如果不需要,可以删除SS
  38.            (setq xdir (cadr (xdrx_entity_getecs (car ss)));;得到重叠部分曲线的X方向向量,从第一个得到
  39.                  box  (xdrx_entity_box ss xdir);;求X方向上的BOX盒子
  40.                  ss   (mapcar '(lambda (x)
  41.                                  (setq pts   (xdrx_getpropertyvalue x "vertices");;遍历,LINE顶点表
  42.                                        dist1 (abs (xdrx_point_dist2line (car box) (car pts) (cadr pts)));;求盒子左下点到该直线距离
  43.                                  )
  44.                                  (if (equal dist1 0.0 1e-5)
  45.                                    (setq dist1 0.0)
  46.                                  )
  47.                                  (list dist1 x)
  48.                                )
  49.                               ss
  50.                       )
  51.                  ss   (xd::list:groupbyindex ss 0.1);;根据距离分组曲线
  52.                  ss   (vl-sort ss '(lambda (x y) (< (car x) (car y))));;排序,从下到上的LINE对
  53.                  ss   (mapcar 'cdr ss);;去掉距离,返回LINE对表
  54.            )
  55.            (setq i 0);;下面循环,偶数下偏移,奇数上偏移
  56.            (foreach n ss
  57.              (if (= (rem i 2) 0)
  58.                (setq dist1 (- dist))
  59.                (setq dist1 dist)
  60.              )
  61.              (setq ss1 (xdrx_curve_offset n dist1))
  62.              (xdrx_entity_setproperty ss1 "color" 7)
  63.              (setq i (1+ i))
  64.            )
  65.            (xdrx_end)
  66.     )
  67.   )
  68.   (princ)
  69. )

点评

谢谢!API的,需要时间消化! 当面域有圆时,偏移的方向有点乱!另外,图三才是所要的结果,只是偏移还不够!  详情 回复 发表于 2018-7-26 10:52
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 568个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2018-7-26 10:52:42 | 显示全部楼层
Lispboy 发表于 2018-7-25 20:07
注释都帮你写了,生成的蓝色线是你说的相贴的,根据它上线偏移。

谢谢!API的,需要时间消化!

当面域有圆时,偏移的方向有点乱!另外,图三才是所要的结果,只是偏移还不够!

点评

还有圆的? 把可能有的组合,都贴下图,和发的DWG吧。 API的OFFSET,方向是固定的, 1、对封闭的曲线,正值永远往面积大的方向偏移,负值往偏移小的方向偏移。 2、对不封闭的曲线,正值永远往Y变大的方向(左  详情 回复 发表于 2018-7-26 14:06
你要的图三,不就是求差后的面域边界直接OFFSET吗,如果那样就更简单了,代码会更短  详情 回复 发表于 2018-7-26 11:45
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-7-26 11:45:54 | 显示全部楼层
taner 发表于 2018-7-26 10:52
谢谢!API的,需要时间消化!

当面域有圆时,偏移的方向有点乱!另外,图三才是所要的结果,只是偏移还不够!

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2018-7-26 13:19:33 | 显示全部楼层
taner 发表于 2018-7-26 10:52
谢谢!API的,需要时间消化!

当面域有圆时,偏移的方向有点乱!另外,图三才是所要的结果,只是偏移还不够!

你要想得到偏移后那个小矩形,就不用找相贴的了

直接把求差后得到的 多段线,从下往上排序。 然后根据奇数,修改相贴那边的两个顶点,可以修改顶点,也可以用xdrx_entity_movestretchpoint 拉伸那两个顶点。

点评

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-7-26 14:06:43 | 显示全部楼层
taner 发表于 2018-7-26 10:52
谢谢!API的,需要时间消化!

当面域有圆时,偏移的方向有点乱!另外,图三才是所要的结果,只是偏移还不够!

还有圆的?
把可能有的组合,都贴下图,和发的DWG吧。

API的OFFSET,方向是固定的,
1、对封闭的曲线,正值永远往面积大的方向偏移,负值往偏移小的方向偏移。
2、对不封闭的曲线,正值永远往Y变大的方向(左上)偏移,负值往Y变小(右下)的方向偏移。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2018-7-26 14:40:51 | 显示全部楼层
本帖最后由 taner 于 2018-7-26 14:51 编辑
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:Drawing2.zip 
下载次数:3  文件大小:20.79 KB 
下载权限: 不限 以上  [免费赚D豆]



Lispboy 发表于 2018-7-26 13:19
你要想得到偏移后那个小矩形,就不用找相贴的了

直接把求差后得到的 多段线,从下往上排序。 然后根据 ...

换了一个稍复杂的图,实际情况比这复杂得多!

更复杂.zip

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

点评

问题让你弄复杂了, 你直接把第二个REGION往大了偏移,偏移后的和第一个差就是你要的结果了。 以前你想的打散了后,找到贴和的,就不好找往大往小了。 [attachimg]79050[/attachimg]  详情 回复 发表于 2018-7-26 16:36
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-7-26 16:36:22 | 显示全部楼层
taner 发表于 2018-7-26 14:40
换了一个稍复杂的图,实际情况比这复杂得多!

问题让你弄复杂了,

你直接把第二个REGION往大了偏移,偏移后的和第一个差就是你要的结果了。

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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2018-7-26 17:11:40 来自手机 | 显示全部楼层
第二个region有圈套圈的情形,内圈要向小的方向偏,处理起来还是蛮复杂的

来自: 微社区

点评

API的REGION是有完备的拓扑关系处理的,可以方便求出每个圈的关系,哪个外圈,哪个奇数圈,哪个偶数圈.... 去看下下面这个帖子: http://bbs.xdcad.net/thread-715868-1-1.html 就是让REGION,奇数和偶数偏移  详情 回复 发表于 2018-7-26 17:37
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-7-26 17:37:03 | 显示全部楼层
taner 发表于 2018-7-26 17:11
第二个region有圈套圈的情形,内圈要向小的方向偏,处理起来还是蛮复杂的

API的REGION是有完备的拓扑关系处理的,可以方便求出每个圈的关系,哪个外圈,哪个奇数圈,哪个偶数圈....

去看下下面这个帖子:  http://bbs.xdcad.net/thread-715868-1-1.html

就是让REGION,奇数和偶数偏移的方向不一样。
下面偏移曲线,偶数层外偏,奇数层内偏


                               
登录/注册后可看大图


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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2018-7-26 23:26:11 | 显示全部楼层
  1. (defun test1 (ss dst / e e1 ge inx laste layer lst mps n sset topo)
  2.   (setq laste (th-get-laste))
  3.   (setq mps (xdrx_mpolygon_make ss))
  4.   (setq topo (xdrx_get_topology mps t))
  5.   (setq lst (xd::list:flat-point topo))
  6.   (foreach n lst
  7.     (setq layer (car n)
  8.           inx (cadr n)
  9.           ge (xdrx_getpropertyvalue mps "getloopat" inx)
  10.           e (xdge::entity:make ge)
  11.           e1 (if (= (rem layer 2) 0)
  12.                (xdrx_curve_getoffsetcurves e dst)
  13.                (xdrx_curve_getoffsetcurves e (- dst))
  14.              )
  15.     )
  16.     (xdge::free ge)
  17.     (xdrx_entity_delete e)
  18.   )
  19.   (xdrx_entity_delete mps)
  20.   (setq sset (th-ss-aftere laste))
  21.   (setq mps (xdrx_mpolygon_make sset))
  22.   (xdrx_mpolygon->region mps)
  23. )


在LISPBOY的基础上改了一下,基本能满足我的要求了.另外,用了两个自定义函数,API有没有对应的?

点评

获得新建实体选择集? (xdrx_setmark) ...... (setq ss (xdrx_getss)) 获得中间新生成的实体选择集。  详情 回复 发表于 2018-7-27 00:56
哪两个自定义函数?他们做什么的? 不说出来,怎么知道有没有对应的呢?  详情 回复 发表于 2018-7-27 00:54
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-7-27 00:54:42 | 显示全部楼层
taner 发表于 2018-7-26 23:26
在LISPBOY的基础上改了一下,基本能满足我的要求了.另外,用了两个自定义函数,API有没有对应的?

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-20 12:34 , Processed in 0.516027 second(s), 71 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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