找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1940|回复: 14

[求助] 求助伸缩齐线的程序?

[复制链接]
发表于 2013-9-30 00:12:04 | 显示全部楼层 |阅读模式

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

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

×
怎么能处理如下图所示,白线(图层B)伸缩到红线(图层A)上,超出部分都为直线,
且可设定一个值,在这个值范围可伸缩到红线。
就是画线时可能调整后造成超出线和不足线,进行处理。
处理前: 1.jpg
处理后:
2.jpg


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

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-9-30 00:16:34 | 显示全部楼层
是不是超出的部分,也按限定值处理呢?

点评

在限定值内,把线头拉到(伸缩到)红线上就是。  详情 回复 发表于 2013-9-30 00:18
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-30 00:18:37 | 显示全部楼层
newer 发表于 2013-9-30 00:16
是不是超出的部分,也按限定值处理呢?

在限定值内,把线头拉到(伸缩到)红线上就是。

点评

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-9-30 00:26:26 | 显示全部楼层
soly2006 发表于 2013-9-30 00:18
在限定值内,把线头拉到(伸缩到)红线上就是。

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-9-30 00:29:07 | 显示全部楼层
你贴个测试的DWG上来吧。

点评

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

使用道具 举报

 楼主| 发表于 2013-9-30 00:49:48 | 显示全部楼层
newer 发表于 2013-9-30 00:29
你贴个测试的DWG上来吧。

测试文件
请点击此处下载

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

您的用户组是:游客

文件名称:2121221.rar 
下载次数:8  文件大小:5.89 KB 
下载权限: 不限 以上  [免费赚D豆]



点评

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-9-30 17:47:45 | 显示全部楼层

试试这个,运行环境xdapi
  1. (defun c:tt (/ getnearestpt ext_trim ss sa sb d e pts ptl1 ptl2 sp ep)
  2.   (defun getnearestpt (e p pts fuzz / op ip d1 d2)
  3.     (foreach x pts
  4.       (if (vlax-curve-getparamatpoint e x)
  5.     (if ip
  6.       (if (< (abs (xdrx_curve_getdistatpoint e p x)) d1)
  7.         (setq ip x
  8.           d1 (abs (xdrx_curve_getdistatpoint e p x))
  9.         )
  10.       )
  11.       (if (< (abs (xdrx_curve_getdistatpoint e p x)) fuzz)
  12.         (setq ip x
  13.           d1 (abs (xdrx_curve_getdistatpoint e p x))
  14.         )
  15.       )
  16.     ) ;_ on curve
  17.     (if op
  18.       (if (< (distance x p) d2)
  19.         (setq op x
  20.           d2 (distance x p)
  21.         )
  22.       )
  23.       (if (< (setq d2 (distance x p)) fuzz)
  24.         (setq op x
  25.           d2 (distance x p)
  26.         )
  27.       )
  28.     ) ;_extend point
  29.       )
  30.     )
  31.     (if    (and ip op)
  32.       (if (< (distance p op)
  33.          (xdrx_curve_getdistatpoint e p ip)
  34.       )
  35.     (list op)
  36.     (list ip)
  37.       )
  38.       (vl-remove nil (list ip op))
  39.     )
  40.   )
  41.   (defun ext_trim (e p pts fuzz mod / e1)
  42.     (if    (vlax-curve-getparamatpoint e (car pts)) ;_ on curve
  43.       (if (setq e1 (xdrx_pickset->ents (xdrx_curve_break e (car pts)))) ;_返回新曲线集
  44.     (if mod ;_ Near endpoint
  45.       (entdel (car e1))
  46.       (if
  47.         (< (vlax-curve-getdistatparam e (vlax-curve-getendparam e))
  48.            fuzz
  49.         )
  50.          (progn
  51.            (xdrx_object_swapid e (car e1)) ;_Near Startpoint
  52.            (entdel (car e1))
  53.          )
  54.          (entdel (car e1)) ;_Near endpoint
  55.       )
  56.     )
  57.       )
  58.       (xdrx_entity_movestretchpoint
  59.     e
  60.     (mapcar '- (car pts) p)
  61.     (vl-position p (xdrx_entity_getstretchpoint e))
  62.       ) ;_extend point
  63.     )
  64.   )
  65.   ;;Main
  66.   (if (and (progn (prompt "\n选择边界...")
  67.           (setq sb (ssget '((0 . "*polyline"))))
  68.        )
  69.        (progn (prompt "\n选择裁剪延伸曲线....")
  70.           (setq sa (ssget))
  71.        ) ;_ extend or trim
  72.        (setq d (getdist "\nFuzz dist: "))
  73.       )
  74.     (progn
  75.       (xdrx_setsstodb sa 0)
  76.       (while (setq e (xdrx_getentdata 0))
  77.     (if (or    (not (vlax-curve-isclosed e))
  78.         (not (equal (vlax-curve-getstartpoint e)
  79.                 (vlax-curve-getendpoint e)
  80.                 1e-5
  81.              )
  82.         )
  83.         )
  84.       (progn
  85.         (setq sp  (vlax-curve-getstartpoint e)
  86.           ep  (vlax-curve-getendpoint e)
  87.           pts (xdrx_curve_getinters e sb 1)
  88.         )
  89.         (if    (not (vl-member-if
  90.                '(lambda    (x)
  91.               (equal ep x 1e-6)
  92.             )
  93.                pts
  94.              )
  95.         )
  96.           (setq ptl1 (getnearestpt e sp pts d))
  97.         ) ;_  Near point of Startpoint
  98.         (if    (not (vl-member-if
  99.                '(lambda    (x)
  100.               (equal sp x 1e-6)
  101.             )
  102.                pts
  103.              )
  104.         )
  105.           (setq ptl2 (getnearestpt e ep pts d)) ;_ Near point of Endpoint
  106.         )
  107.         (if    ptl2
  108.           (ext_trim e ep ptl2 d t)
  109.         )
  110.         (if    ptl1
  111.           (ext_trim e sp ptl1 d nil)
  112.         )
  113.       )
  114.     )
  115.       )
  116.     )
  117.   )
  118.   (princ)
  119. )


点评

xdrx_curve_getdistatpoint给定两点时距离有正负,函数中要用abs brkcurve对可以加个参数区分起点和终点  详情 回复 发表于 2013-10-1 06:03
测试了下,没成,有些条件可能没考虑全 [attachimg]5559[/attachimg]  详情 回复 发表于 2013-9-30 20:04

评分

参与人数 1D豆 +5 收起 理由
炫翔 + 5 技术引导讨论和指点奖!

查看全部评分

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

使用道具 举报

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-9-30 20:04:51 | 显示全部楼层
eachy 发表于 2013-9-30 17:47
试试这个,运行环境xdapi

测试了下,没成,有些条件可能没考虑全

tt.gif

点评

代码已修改,这次应该可以了 原来想用xdrx_points_sortoncurve 后来发现这个函数有限制,抽空把测试另贴  详情 回复 发表于 2013-10-1 09:47
break 后会产生新曲线,自断开点至原曲线尾端为新曲线 是删除原曲线还是删除新曲线由长度确定,不过应该保持原曲线,不然在用另一端的点处理时没有原实体会报错 用 lengthen 命令实体是不变的  详情 回复 发表于 2013-10-1 01:40
换个 Lisp 版试试 **** 本内容被作者隐藏 ****  详情 回复 发表于 2013-9-30 20:48
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-9-30 20:48:59 | 显示全部楼层
newer 发表于 2013-9-30 20:04
测试了下,没成,有些条件可能没考虑全

换个 Lisp 版试试
游客,本帖隐藏的内容需要积分高于 30 才可浏览,您当前积分为 0

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-1 01:40:52 | 显示全部楼层
newer 发表于 2013-9-30 20:04
测试了下,没成,有些条件可能没考虑全

break 后会产生新曲线,自断开点至原曲线尾端为新曲线
是删除原曲线还是删除新曲线由长度确定,不过应该保持原曲线,不然在用另一端的点处理时没有原实体会报错
用 lengthen 命令实体是不变的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-10-1 06:03:02 来自手机 | 显示全部楼层
eachy 发表于 2013-9-30 17:47
试试这个,运行环境xdapi


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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-10-1 09:47:41 | 显示全部楼层
newer 发表于 2013-9-30 20:04
测试了下,没成,有些条件可能没考虑全

代码已修改,这次应该可以了
原来想用xdrx_points_sortoncurve 后来发现这个函数有限制,抽空把测试另贴
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-8 15:46:35 | 显示全部楼层
本帖最后由 soly2006 于 2013-10-8 15:59 编辑

还是不行啊,"错误: 参数值错误: AcDbCurve 2126518880"

点评

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-10-8 18:04:07 | 显示全部楼层
soly2006 发表于 2013-10-8 15:46
还是不行啊,"错误: 参数值错误: AcDbCurve 2126518880"

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 06:22 , Processed in 0.518389 second(s), 75 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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