明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9069|回复: 33

增强一点拉伸功能

    [复制链接]
发表于 2012-3-30 23:46:29 | 显示全部楼层 |阅读模式
本帖最后由 yjr111 于 2012-3-30 23:51 编辑

有时候拉伸物体不好选择,最好选择一条边即可拉伸,实际遇到也很多
hgf876的帖子http://bbs.mjtd.com/thread-92145-1-1.html 拉伸功能非常强大,也非常好用,可惜不能动态,晚上兴起,利用stretch命令自己写了一个,好像也能用,特发一贴,有兴趣的哥哥姐姐弟弟妹妹可以下载玩玩。。。

  1. (defun c:qstretch(/ e pt vla_e p1 plst n anglst stretchplst )
  2.   ;;;;;;;;;;;;;;;;选边;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  3.   (setq e(car(setq ent(entsel"\n选择要拉伸的矩形边")))
  4.         pt(cadr ent)
  5.         vla_e(vlax-ename->vla-object e)
  6.         p1(vlax-curve-getclosestpointto e pt)
  7.         )
  8.   ;;;;;;;对多段线或直线有效;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  9.   (cond((= (vla-get-objectname vla_e) "AcDbPolyline")
  10.         (setq plst (lst->3p
  11.                (vlax-safearray->list(vlax-variant-value(vla-get-coordinates vla_e)))
  12.                2
  13.                )
  14.               )
  15.         )
  16.        ((= (vla-get-objectname vla_e) "AcDb2dPolyline")
  17.         (setq plst (lst->3p
  18.                (vlax-safearray->list(vlax-variant-value(vla-get-coordinates vla_e)))
  19.                3
  20.                )
  21.               )
  22.         )
  23.        ((= (vla-get-objectname vla_e) "AcDbLine")
  24.         (setq plst (list(vlax-curve-getstartpoint e)
  25.                         (vlax-curve-getendpoint e)
  26.                    )
  27.         )
  28.        )
  29.       )
  30.   ;;;;;;;;;;根据角度相等找到选边时点击点的边的2个点,此方法并不严谨,可能会出错;;;;;;;;;;;;;;;;;;;
  31.   (mapcar '(lambda(x) (setq anglst (cons(list(if (>= (angle p1 x)pi)(angle x p1)(angle p1 x)) x) anglst)))plst)
  32.   (setq anglst (vl-sort anglst '(lambda(x y) (< (car x)(car y) ))))
  33.   (while anglst
  34.   (setq assocang (caar anglst) assocp (cadar anglst))
  35.   (if(member(fixnum(caar anglst))(mapcar '(lambda(x)(fixnum (car x))) (setq anglst (cdr anglst))))
  36.      (setq stretchplst(list assocp (cadar anglst)))
  37.     )
  38.    )
  39.   
  40.   (setq stretchplst
  41.          (vl-sort stretchplst(function(lambda(x y)
  42.            (if (equal (car x) (car y))(< (cadr x) (cadr y))(< (car x) (car y)))))))
  43.   ;;;;;;;;;;;;;;;;;;;;;;;;stretch命令;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  44.   (vl-cmdf "_.stretch"
  45.                 (ssget "c" (list (- (car(car stretchplst)) 1e-3)(- (cadr(car stretchplst)) 1e-3))
  46.                   (list (+(car(cadr stretchplst)) 1e-3)(+ (cadr(cadr stretchplst)) 1e-3)))
  47.              "" p1 pause)
  48.   (princ)
  49.   )
  50. ;;;;;;函数:将点表num个一组重新组表,用于处理多段线顶点坐标;;;;;;;;;;;;;;;;;
  51. (defun lst->3p (lst num / n lst_new1 lst_newpoint)
  52.   (setq n 0)
  53.   (mapcar
  54.     (function
  55.       (lambda (x)
  56.         (setq lst_new1 (append lst_new1 (list x)))
  57.         (if (= (rem (1+ n) num) 0)
  58.           (progn
  59.             (setq lst_newpoint (append (list lst_new1) lst_newpoint))
  60.             (setq lst_new1 nil)
  61.           )
  62.         )
  63.         (setq n (1+ n))
  64.       )
  65.     )
  66.     lst
  67.   )
  68. lst_newpoint
  69. )

  70. (defun fixnum(bl)
  71.       (setq bl (/(fix (* bl (expt 10.0 3)))(expt 10.0 3)))
  72.   )


评分

参与人数 2明经币 +3 收起 理由
669423907 + 1 很给力!
Gu_xl + 2 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-1-6 12:00:16 | 显示全部楼层
有倒角和圆角的就不行,可以改一下吗?

本帖子中包含更多资源

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

x
发表于 2018-1-5 17:35:51 | 显示全部楼层
本帖最后由 GNJLISP 于 2018-1-6 12:01 编辑


有倒角和圆角的就不行,可以改一下吗?

本帖子中包含更多资源

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

x
发表于 2012-3-31 02:52:06 | 显示全部楼层
楼主的程序可以输入距离,大家可以试用了!挺不错的
发表于 2012-3-31 08:20:24 | 显示全部楼层
我在05CAD操作,显示:
“选择要拉伸的矩形边
必须选择一个交叉窗口或交叉多边形来拉伸。”
是什么原因呢

点评

ssget "c" p1 p2 就是交叉选择,我这里试用了好多次没发现你说的问题,请发图说明  发表于 2012-3-31 09:29
发表于 2012-3-31 08:27:22 | 显示全部楼层
可以动态显示两条相邻边的长度吗,谢谢
发表于 2012-3-31 09:04:47 | 显示全部楼层
876的  是arx的  有版本限制!
发表于 2012-3-31 12:35:42 | 显示全部楼层
G版都出手了,想必是好程序,
发表于 2012-3-31 12:48:27 | 显示全部楼层
yjr111 大师的高作,很好用!
发表于 2012-3-31 16:06:38 | 显示全部楼层
两者效果不同,hgf876 的拉伸有点类似scale命令局部比例放大的效果,
这个是stretch的拉伸功能。
选择好后按空格,出现拉伸到外面的情况。

点评

请注意帖子的标题,只是加强一点而已,stretch命令也会有这个情况发生  发表于 2012-3-31 16:51
发表于 2012-3-31 16:09:29 | 显示全部楼层
选择好后按空格,出现拉伸到外面的情况。用的是line线,在cad2011中。
发表于 2012-3-31 16:11:26 | 显示全部楼层
下载试用一下,谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 13:22 , Processed in 0.196857 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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