明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1198|回复: 5

[提问] 麻烦帮忙在这个代码加一个循环

[复制链接]
发表于 2024-3-30 09:52:55 | 显示全部楼层 |阅读模式
本帖最后由 e719 于 2024-3-30 09:57 编辑

我加了一个,它循环时吧前面加的框也加进去了,麻烦各位大神帮我加一个,最好把外形做个整数和把距离变成默认的。谢谢~
  1. (defun c:wk (/ ss i l1 l2 ll ur os d)
  2.   (defun *MYERR* (MSG)
  3. (setvar "CMDECHO" CMD_OLD)
  4. (setvar "OSMODE" OS_OLD)
  5. (setq *ERROR* *OLDERR*)
  6. (if (= MSG "完美退出。谢谢使用。")
  7.      (princ (strcat "\\n>>>" MSG))
  8.      (princ "\n>>>虽然中途退出了,对象捕捉已经被恢复。")
  9. )
  10. (princ)
  11.     )
  12.     (setq *OLDERR* *ERROR*
  13.    *ERROR*  *MYERR*
  14.    OS_OLD   (getvar "OSMODE")
  15.    CMD_OLD  (getvar "CMDECHO")
  16.     )
  17. (setvar "CMDECHO" 0);_关闭命令提示
  18. (Setq osmode_bak (getvar "osmode"));_记录捕捉
  19. (Setvar "osmode" 0);_关闭捕捉

  20. (if *Scale* (setq d (getreal (strcat  "\n偏距<" (rtos *Scale* 2 2) ">:") ) )  (setq d (getreal  "\n偏

  21. 距:")))
  22. (if (null d) (setq d *Scale*) (setq *Scale*  d ))

  23. (setq ss (ssget))
  24.   (repeat (setq i (sslength ss))
  25.     (vla-getboundingbox
  26.       (vlax-ename->vla-object (ssname ss (setq i (1- i))))
  27.       'll
  28.       'ur
  29.     )
  30.     (setq l1 (cons (vlax-safearray->list ll) l1)
  31.           l2 (cons (vlax-safearray->list ur) l2)
  32.     )
  33.   )
  34.   (mapcar 'set
  35.           (list 'll 'ur)
  36.           (mapcar '(lambda (a b) (apply 'mapcar (cons a b)))
  37.                   '(min max)
  38.                   (list l1 l2)
  39.           )
  40.   )
  41.   (command
  42.     "rectang"
  43.     (trans (polar ll (* pi 1.25) (setq d (sqrt (+ (* d d) (* d d)))))
  44.            0
  45.            1
  46.     )
  47.     (trans (polar ur (* pi 0.25) d) 0 1)
  48.   )

  49. (command "CHPROP" "L" "" "LA" "PS_W" "");指定图层
  50. (Setvar "osmode" osmode_bak);_还原捕捉


  51. (setvar "CMDECHO" 1);_打开命令提示


  52.   (princ)
  53. )

发表于 2024-3-30 19:06:58 | 显示全部楼层
e719 发表于 2024-3-30 16:41
十分感谢,
不过不是很完美。
1,整数后是偏中心的我需要的是四边等距的


(defun c:wk (/ *error* cmd_old d d1 ename ent i l1 l2 ll ss ur)
  (defun *error* (msg)
                (setvar "cmdecho" cmd_old)
                (princ)
        )
        (setq cmd_old  (getvar "cmdecho"))
        (setvar "cmdecho" 0);_关闭命令提示
        (setq d 10)
        (while (setq ss (ssget '((8 . "~WK"))))
                (setq l1 nil)
                (setq l2 nil)
                (repeat (setq i (sslength ss))
                        (vla-getboundingbox (vlax-ename->vla-object (ssname ss (setq i (1- i)))) 'll 'ur)
                        (setq
                                l1 (cons (vlax-safearray->list ll) l1)
                                l2 (cons (vlax-safearray->list ur) l2)
                        )
                )
                (mapcar 'set (list 'll 'ur) (mapcar '(lambda (a b) (apply 'mapcar (cons a b))) '(min max) (list l1 l2)))
                (setq ll (list (- (car ll) d) (- (cadr ll) d)))
                (setq ur (list (+ (car ur) d) (+ (cadr ur) d)))
                (command
                        "rectang"
                        "non"
                        (trans ll 0 1)
                        "non"
                        (trans ur 0 1)
                )
                (setq ent (entget (setq ename (entlast))))
                (setq ent (subst (cons 8 "WK") (assoc 8 ent) ent))
                (entmod ent)
                (setvar "cmdecho" cmd_old)
        )
        (princ)
)

点评

真挺好用的,能不能外形长宽取整数,尾数为0.5或0,感谢!  发表于 2024-3-31 18:24

评分

参与人数 1明经币 +1 收起 理由
e719 + 1 很给力!够用了

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2024-3-30 13:11:59 | 显示全部楼层
本帖最后由 飞雪神光 于 2024-3-30 13:14 编辑


(defun c:wk (/ *error* cmd_old d d1 ename ent i l1 l2 ll ss ur)
  (defun *error* (msg)
                (setvar "cmdecho" cmd_old)
                (princ)
        )
        (setq cmd_old  (getvar "cmdecho"))
        (setvar "cmdecho" 0);_关闭命令提示
        (setq d 10)
        (while (setq ss (ssget '((8 . "~WK"))))
                (repeat (setq i (sslength ss))
                        (vla-getboundingbox (vlax-ename->vla-object (ssname ss (setq i (1- i)))) 'll 'ur)
                        (setq
                                l1 (cons (vlax-safearray->list ll) l1)
                                l2 (cons (vlax-safearray->list ur) l2)
                        )
                )
                (mapcar 'set (list 'll 'ur) (mapcar '(lambda (a b) (apply 'mapcar (cons a b))) '(min max) (list l1 l2)))
                (setq ll (list (fix (car ll)) (fix (cadr ll))))
                (setq ur (list (fix (car ur)) (fix (cadr ur))))
                (command
                        "rectang"
                        "non"
                        (trans (polar ll (* pi 1.25) (setq d1 (sqrt (+ (* d d) (* d d))))) 0 1)
                        "non"
                        (trans (polar ur (* pi 0.25) d1) 0 1)
                )
                (setq ent (entget (setq ename (entlast))))
                (setq ent (subst (cons 8 "WK") (assoc 8 ent) ent))
                (entmod ent)
                (setvar "cmdecho" cmd_old)
        )
        (princ)
)

评分

参与人数 1明经币 +1 收起 理由
e719 + 1 感谢帮忙

查看全部评分

 楼主| 发表于 2024-3-30 16:41:06 | 显示全部楼层
飞雪神光 发表于 2024-3-30 13:11
(defun c:wk (/ *error* cmd_old d d1 ename ent i l1 l2 ll ss ur)
  (defun *error* (msg)
                (setvar ...

十分感谢,
不过不是很完美。
1,整数后是偏中心的我需要的是四边等距的


2,不是我想要的理想效果.

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-11-25 20:51 , Processed in 0.193946 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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