明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1018|回复: 4

求修改一个选线拉伸的代码

[复制链接]
发表于 2020-10-22 12:35 | 显示全部楼层 |阅读模式
5明经币
本帖最后由 xj6019 于 2020-10-22 12:44 编辑

从论坛里面找到的代码,现在有如下的请求,希望有朋友可以帮实现一下:
选边拉伸的代码, 优化成  以所选边线的垂直方向进行拉伸(为了适应斜边的情况,此情况下输入的数值也是选线垂直方向的数值),并需要解决所选边线端点不在屏幕内的话端点连接位置不能执行,会断开或者不修剪的问题,有斜边的时候会错误识别被错误拉伸,尤其是三角形,总会有一个边的时候是错误的。现在上传附件不能用的可能性大,测试的时候可以画个三角形,每个边往内外先手动偏移个距离,然后偏移出来的线端点和三角形顶点相连,然后用代码选刚才偏移出来的线,进行偏移测试,三个边都试一下哦,因为现在的代码,其中一条边会出问题,拉伸的时候。
这个代码输入的拉伸数值是否可以记忆,需保留动态预览的效果。
整体代码中有其他可以优化的地方,也劳烦考虑的更合理一点,使代码整体变的更严谨一点,拜托了!


原帖地址如下
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=92753&extra=&highlight=%D4%F6%C7%BF%D2%BB%B5%E3%C0%AD%C9%EC%B9%A6%C4%DC&page=1
本帖最后由 yjr111 于 2012-3-30 23:51 编辑


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

[code="lisp] (defun c:qstretch(/ e pt vla_e p1 plst n anglst stretchplst )
  ;;;;;;;;;;;;;;;;选边;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (setq e(car(setq ent(entsel"\n选择要拉伸的矩形边")))
        pt(cadr ent)
        vla_e(vlax-ename->vla-object e)
        p1(vlax-curve-getclosestpointto e pt)
        )
  ;;;;;;;对多段线或直线有效;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (cond((= (vla-get-objectname vla_e) "AcDbPolyline")
        (setq plst (lst->3p
               (vlax-safearray->list(vlax-variant-value(vla-get-coordinates vla_e)))
               2
               )
              )
        )
       ((= (vla-get-objectname vla_e) "AcDb2dPolyline")
        (setq plst (lst->3p
               (vlax-safearray->list(vlax-variant-value(vla-get-coordinates vla_e)))
               3
               )
              )
        )
       ((= (vla-get-objectname vla_e) "AcDbLine")
        (setq plst (list(vlax-curve-getstartpoint e)
                        (vlax-curve-getendpoint e)
                   )
        )
       )
      )
  ;;;;;;;;;;根据角度相等找到选边时点击点的边的2个点,此方法并不严谨,可能会出错;;;;;;;;;;;;;;;;;;;
  (mapcar '(lambda(x) (setq anglst (cons(list(if (>= (angle p1 x)pi)(angle x p1)(angle p1 x)) x) anglst)))plst)
  (setq anglst (vl-sort anglst '(lambda(x y) (< (car x)(car y) ))))
  (while anglst
  (setq assocang (caar anglst) assocp (cadar anglst))
  (if(member(fixnum(caar anglst))(mapcar '(lambda(x)(fixnum (car x))) (setq anglst (cdr anglst))))
     (setq stretchplst(list assocp (cadar anglst)))
    )
   )
  
  (setq stretchplst
         (vl-sort stretchplst(function(lambda(x y)
           (if (equal (car x) (car y))(< (cadr x) (cadr y))(< (car x) (car y)))))))
  ;;;;;;;;;;;;;;;;;;;;;;;;stretch命令;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (vl-cmdf "_.stretch"
                (ssget "c" (list (- (car(car stretchplst)) 1e-3)(- (cadr(car stretchplst)) 1e-3))
                  (list (+(car(cadr stretchplst)) 1e-3)(+ (cadr(cadr stretchplst)) 1e-3)))
             "" p1 pause)
  (princ)
  )
;;;;;;函数:将点表num个一组重新组表,用于处理多段线顶点坐标;;;;;;;;;;;;;;;;;
(defun lst->3p (lst num / n lst_new1 lst_newpoint)
  (setq n 0)
  (mapcar
    (function
      (lambda (x)
        (setq lst_new1 (append lst_new1 (list x)))
        (if (= (rem (1+ n) num) 0)
          (progn
            (setq lst_newpoint (append (list lst_new1) lst_newpoint))
            (setq lst_new1 nil)
          )
        )
        (setq n (1+ n))
      )
    )
    lst
  )
lst_newpoint
)

(defun fixnum(bl)
      (setq bl (/(fix (* bl (expt 10.0 3)))(expt 10.0 3)))
  )[/code]

 楼主| 发表于 2020-11-2 08:40 | 显示全部楼层
一个老问题顶一下
回复

使用道具 举报

发表于 2020-11-23 20:20 | 显示全部楼层
本帖最后由 KO你 于 2020-11-23 20:23 编辑
xj6019 发表于 2020-11-2 08:40
一个老问题顶一下

记得E大师有出过直线和多段线交点位移的程序,我也在期待能有人把E大师的直线与多段线优化一下并用,布局与模型空间都可以实现的http://bbs.mjtd.com/thread-110012-1-1.html
回复

使用道具 举报

 楼主| 发表于 2020-11-23 20:33 | 显示全部楼层
KO你 发表于 2020-11-23 20:20
记得E大师有出过直线和多段线交点位移的程序,我也在期待能有人把E大师的直线与多段线优化一下并用,布局 ...

嗯,你贴的E大的代码我也在用,现在只能分情况,各自使用,也期待有一天,可以出现一个各情况都完美的代码
回复

使用道具 举报

发表于 2020-11-23 22:04 | 显示全部楼层
楼主可以试试这个,春蝉大神写的,,我一直在用,,http://bbs.mjtd.com/thread-182648-1-1.html
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 23:34 , Processed in 0.296611 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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