明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 品茗新秀

[已解答] 求点选矩形,点上边,向上复制;点右边,向右复制;点下边,向下复制

[复制链接]
发表于 2014-4-11 15:03 | 显示全部楼层
本帖最后由 q3_2006 于 2014-4-11 15:05 编辑

来个好理解的版本....
  1. (defun ebox (e / pa pb)
  2.          (Vlax-Invoke-Method (Vlax-Ename->Vla-Object e ) 'GetBoundingBox 'pa 'pb )
  3.              (setq pa (trans (vlax-safearray->list pa) 0 1)
  4.                    pb (trans (vlax-safearray->list pb) 0 1)
  5.              )
  6.              (list pa pb)
  7. )
  8. (defun mid (p1 p2) (mapcar '* '(0.5 0.5 0.5) (mapcar '+ p1 p2)))
  9. (defun c:tt ( / box d e h n p p1 p2 pc w)
  10.         (setvar "osmode" 2)
  11.         (while (setq p (getpoint "\n以点取边为阵列方向:"))
  12.                 (setq e (ssname (ssget "c" p p '((0 . "LWPOLYLINE"))) 0)
  13.                 n (getint "\n数量:")
  14.                 d (getdist "\n间距:")
  15.                 box (ebox e)
  16.                 p1 (car box)
  17.                 p2 (cadr box)
  18.                 pc (mid p1 p2)
  19.         )
  20.         (mapcar 'set '(w h) (mapcar '- p2 p1))
  21.         (cond
  22.                 ((and (> (car p) (car pc)) (equal (cadr p) (cadr pc))) (vl-cmdf "-array" e "" "r" 1 n (+ d w)))
  23.                 ((and (< (car p) (car pc)) (equal (cadr p) (cadr pc))) (vl-cmdf "-array" e "" "r" 1 n (* -1 (+ d w))))
  24.                 ((and (equal (car p) (car pc)) (> (cadr p) (cadr pc))) (vl-cmdf "-array" e "" "r" n 1 (+ d h)))
  25.                 (t (vl-cmdf "-array" e "" "r" n 1 (* -1 (+ d h))))
  26.         )
  27. )
  28. )

评分

参与人数 1明经币 +1 收起 理由
品茗新秀 + 1 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-4-11 15:40 | 显示全部楼层
q3_2006 发表于 2014-4-11 15:03
来个好理解的版本....

确实不错,如果矩形内有图元,也能一起复制就好了
回复

使用道具 举报

发表于 2014-4-11 15:44 | 显示全部楼层
品茗新秀 发表于 2014-4-11 15:40
确实不错,如果矩形内有图元,也能一起复制就好了

当然可以...问题是你没要求呀....
回复

使用道具 举报

发表于 2014-4-11 16:01 | 显示全部楼层
q3_2006 发表于 2014-4-11 15:03
来个好理解的版本....

很不错的程序,谢谢

点评

已经支付。应该的  发表于 2014-4-11 16:26
回复

使用道具 举报

发表于 2014-4-11 16:12 | 显示全部楼层
q3_2006 写的不错,应该支付了。
回复

使用道具 举报

 楼主| 发表于 2014-4-11 16:21 | 显示全部楼层
本帖最后由 品茗新秀 于 2014-4-11 16:26 编辑
q3_2006 发表于 2014-4-11 15:03
来个好理解的版本....

如果个数采用右键一次,增加一个的方式,就更理想了。

如果点选方式用entsel就好了
回复

使用道具 举报

发表于 2014-4-11 18:04 | 显示全部楼层
再悬赏呀,q3_2006接着干!
回复

使用道具 举报

发表于 2014-4-11 18:29 | 显示全部楼层
品茗新秀 发表于 2014-4-11 16:21
如果个数采用右键一次,增加一个的方式,就更理想了。

如果点选方式用entsel就好了
  1. (defun c:tt ( / ang box d e h i j k m p p1 p2 pc ss w)
  2.         (setvar "osmode" 0)
  3.         (or (setq e (car (entsel "\n选取外框:"))) (exit))
  4.         (setq d (getdist "\n间距<输入或量取>:")
  5.                 i 0
  6.                 j i
  7.                 k i
  8.                 m i
  9.                 box (ebox e)
  10.                 p1 (car box)
  11.                 p2 (cadr box)
  12.                 ss (ssget "c" p1 p2)
  13.                 pc (mid p1 p2)
  14.         )
  15.         (mapcar 'set '(w h) (mapcar '- p2 p1))
  16.         (while (and (setq p (getpoint "\n点取复制方向:"))
  17.         (setq ang (angle pc p))
  18.         )
  19.                 (cond
  20.                         ((or (> (* 0.25 pi) ang 0 ) (= 0 ang) (> (* 2 pi) ang (* 1.75 pi)))
  21.                         (vl-cmdf "copy" ss "" pc (polar pc 0 (* (+ w d) (setq i (1+ i))))))
  22.                         ((equal ang (* 0.5 pi) (* 0.25 pi)) (vl-cmdf "copy" ss "" pc (polar pc (* 0.5 pi) (* (+ h d) (setq j (1+ j))))))
  23.                         ((equal ang pi (* 0.25 pi)) (vl-cmdf "copy" ss "" pc (polar pc pi (* (+ w d) (setq k (1+ k))))))
  24.                         ((equal ang (* 1.5 pi) (* 0.25 pi)) (vl-cmdf "copy" ss "" pc (polar pc (* 1.5 pi) (* (+ h d) (setq m (1+ m))))))
  25.                         (t (exit))
  26.                 )
  27. )
  28. )
  29. (defun ebox (e / pa pb)
  30.          (Vlax-Invoke-Method (Vlax-Ename->Vla-Object e ) 'GetBoundingBox 'pa 'pb )
  31.              (setq pa (trans (vlax-safearray->list pa) 0 1)
  32.                    pb (trans (vlax-safearray->list pb) 0 1)
  33.              )
  34.              (list pa pb)
  35. )
  36. (defun mid (p1 p2) (mapcar '* '(0.5 0.5 0.5) (mapcar '+ p1 p2)))

点评

太震撼了,如果右键一次,增加一个的方式更佳,而不是左键  发表于 2014-4-11 18:46
回复

使用道具 举报

发表于 2014-4-11 18:49 | 显示全部楼层
q3_2006 发表于 2014-4-11 18:29

那就不能四方向增加了.....我现在可以四个方向复制....
回复

使用道具 举报

发表于 2014-4-12 08:37 | 显示全部楼层
太完美了谢谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 18:40 , Processed in 0.241663 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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