找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: st788796

[矩形] 矩形线拉伸

 火.. [复制链接]

已领礼包: 344个

财富等级: 日进斗金

发表于 2014-1-6 14:41:27 | 显示全部楼层
;;利用xdrx_entity_getStretchPoint和xdrx_entity_moveStretchPoint 函数编写
  1. ;;By Gu_xl
  2. (defun c:tt  (/  E PT PAR PAR1 PAR2 PAR0  P0 P1 P2 LOOP CORNER GR  CURPT
  3.         PERPT V PTS)
  4.   (if (and
  5.   (setq e (entsel "\n选择多段线:"))
  6.   (setq pt (cadr e)
  7.         e   (car e))
  8.   (WCMATCH (cdr (assoc 0 (entget e))) "*POLYLINE")
  9.   )
  10.     (progn
  11.       (setq pt  (vlax-curve-getclosestpointto e pt)
  12.       par  (vlax-curve-getParamAtPoint e pt)
  13.       )
  14.       (if (<= (- par (fix par)) 0.2)
  15.   (progn
  16.     (setq  par1 (fix par)
  17.     par2 (1+ par1)
  18.     )
  19.     (if (equal par2 (fix (vlax-curve-getEndParam e)))
  20.       (setq par2 0))
  21.     (if (> par1 0)
  22.       (setq par0 (1- par1))
  23.       (setq par0 (1- (fix (vlax-curve-getEndParam e))))
  24.       )
  25.     (setq  p0     (vlax-curve-getPointAtParam e par0)
  26.     p1     (vlax-curve-getPointAtParam e par1)
  27.     p2     (vlax-curve-getPointAtParam e par2)
  28.     loop   t
  29.     corner t
  30.     )
  31.     )
  32.   (if (>= (- par (fix par)) 0.8)
  33.     (progn
  34.       (setq par0 (fix par)
  35.       par1 (1+ par0)
  36.       )
  37.       (if  (equal par1 (fix (vlax-curve-getEndParam e)))
  38.         (setq par1 0))
  39.       (setq par2 (1+ par1))
  40.       (if  (equal par2 (fix (vlax-curve-getEndParam e)))
  41.         (setq par2 0))
  42.       (setq p0   (vlax-curve-getPointAtParam e par0)
  43.       p1   (vlax-curve-getPointAtParam e par1)
  44.       p2   (vlax-curve-getPointAtParam e par2)
  45.       loop   t
  46.       corner t
  47.       )
  48.       )
  49.     (progn
  50.       (setq
  51.         par0   (fix (vlax-curve-getParamAtPoint e pt))
  52.         par1   (1+ par0)
  53.         p0     (vlax-curve-getPointAtParam e par0)
  54.         p1     (vlax-curve-getPointAtParam e par1)
  55.         loop   t
  56.         corner nil
  57.         )
  58.       )
  59.     )
  60.   )
  61.       (if corner
  62.   (progn
  63.     (while loop
  64.       (setq gr (grread t 15))
  65.       (if  (= 5 (car gr))
  66.         (progn
  67.     (setq curpt (trans (cadr gr) 1 0))
  68.     (setq
  69.       perpt  (gxl-ProjectPointToLine curpt p0 p1))
  70.     (if (not (equal curpt perpt 0.01))
  71.       (progn
  72.         (setq v (mapcar '- curpt perpt))
  73.         (xdrx_entity_moveStretchPoint
  74.           e
  75.           v
  76.           par0
  77.           par1)

  78.         )
  79.       )
  80.     (setq
  81.       perpt  (gxl-ProjectPointToLine curpt p1 p2))
  82.     (if (not (equal curpt perpt 0.01))
  83.       (progn
  84.         (setq v (mapcar '- curpt perpt))
  85.         (xdrx_entity_moveStretchPoint
  86.           e
  87.           v
  88.           par1
  89.           par2)

  90.         )
  91.       )
  92.     (setq pts (xdrx_entity_getStretchPoint e)
  93.           p0  (nth par0 pts)
  94.           p1  (nth par1 pts)
  95.           p2  (nth par2 pts)
  96.           )

  97.     )
  98.         (setq loop nil)
  99.         )
  100.       )
  101.     )
  102.   (progn
  103.     (while loop
  104.       (setq gr (grread t 15))
  105.       (if  (= 5 (car gr))
  106.         (progn
  107.     (setq curpt (trans (cadr gr) 1 0))
  108.     (setq
  109.       perpt  (gxl-ProjectPointToLine curpt p0 p1))
  110.     (if (not (equal curpt perpt 0.01))
  111.       (progn
  112.         (setq v (mapcar '- curpt perpt))
  113.         (xdrx_entity_moveStretchPoint
  114.           e
  115.           v
  116.           par0
  117.           par1)
  118.         (setq pts (xdrx_entity_getStretchPoint e)
  119.         p0  (nth par0 pts)
  120.         p1  (nth par1 pts)
  121.         )
  122.         )
  123.       )
  124.     )
  125.         (setq loop nil)
  126.         )
  127.       )
  128.     )
  129.   )

  130.       )
  131.     )

  132.   (princ)
  133.   )
  134. (defun gxl-ProjectPointToLine  (pt p1 p2 / norm)
  135.   (setq  norm (mapcar '- p2 p1)
  136.   p1   (trans p1 0 norm)
  137.   pt   (trans pt 0 norm)
  138.   )
  139.   (trans (list (car p1) (cadr p1) (caddr pt)) norm 0)
  140.   )


点评

有BUG,如果矩形是斜交坐标轴的,则选左下那条边时,函数出错无法运行  发表于 2014-1-6 17:55
固版主,您之前写过一个逃孔的程序,能帮忙再改一改吗?http://bbs.xdcad.net/thread-672352-1-1.html 万分感谢!  发表于 2014-1-6 15:42
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-1-6 14:48:32 来自手机 | 显示全部楼层
牢固 发表于 2014-1-6 14:41
;;利用xdrx_entity_getStretchPoint和xdrx_entity_moveStretchPoint 函数编写

越来越喜欢pointmonitor了,可以捕捉,可以输入距离

点评

是XDRX_SSJIG函数吧!不知道为什么最新版API这个函数为啥没有了!  详情 回复 发表于 2014-1-6 18:41
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

发表于 2014-1-6 15:29:44 | 显示全部楼层
可是牢固版主上面的程序这两个都不可以呀

点评

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

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2014-1-6 16:45:07 来自手机 | 显示全部楼层
liuyj 发表于 2014-1-6 15:29
可是牢固版主上面的程序这两个都不可以呀

什么意思?

点评

就是捕捉和输入距离好像都不行,我在cad2006下试的。在cad2010下没问题  详情 回复 发表于 2014-1-6 21:57
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

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

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2014-1-6 18:41:26 | 显示全部楼层
st788796 发表于 2014-1-6 14:48
越来越喜欢pointmonitor了,可以捕捉,可以输入距离

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-1-6 18:54:18 来自手机 | 显示全部楼层
牢固 发表于 2014-1-6 18:41
是XDRX_SSJIG函数吧!不知道为什么最新版API这个函数为啥没有了!

不是这个,pointmonitor可以用回调函数,代替grread,飞鸟写的

点评

点监视打开后,可是一直在后台运行啊!直到关闭点监视!不适合替代grread!用SSJIG函数替代grread,ssjig功能强大!  详情 回复 发表于 2014-1-6 19:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2014-1-6 19:17:52 | 显示全部楼层
st788796 发表于 2014-1-6 18:54
不是这个,pointmonitor可以用回调函数,代替grread,飞鸟写的

点监视打开后,可是一直在后台运行啊!直到关闭点监视!不适合替代grread!用SSJIG函数替代grread,ssjig功能强大!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-1-6 19:25:27 来自手机 | 显示全部楼层
牢固 发表于 2014-1-6 19:17
点监视打开后,可是一直在后台运行啊!直到关闭点监视!不适合替代grread!用SSJIG函数替代grread,ssjig功 ...

喜欢简单用法的函数,复杂SSJIG还没用过:)

点评

请给个pointmonitor替代grread函数的示例吧![/backcolor]  详情 回复 发表于 2014-1-6 19:32
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2014-1-6 19:32:05 | 显示全部楼层
st788796 发表于 2014-1-6 19:25
喜欢简单用法的函数,复杂SSJIG还没用过

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

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

发表于 2014-1-6 21:57:53 | 显示全部楼层

就是捕捉和输入距离好像都不行,我在cad2006下试的。在cad2010下没问题

点评

当然不可以了!用GRREAD就需要加强版的grread才可以!换成SSJIG函数替代GRREAD就能捕捉和输入距离了!  详情 回复 发表于 2014-1-6 22:10
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2014-1-6 22:10:52 | 显示全部楼层
liuyj 发表于 2014-1-6 21:57
就是捕捉和输入距离好像都不行,我在cad2006下试的。在cad2010下没问题

当然不可以了!用GRREAD就需要加强版的grread才可以!换成SSJIG函数替代GRREAD就能捕捉和输入距离了!

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

使用道具 举报

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

使用道具 举报

已领礼包: 315个

财富等级: 日进斗金

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 19:56 , Processed in 0.537387 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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