明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2402|回复: 12

[提问] 请问这个双向偏移,能否加个循环?

[复制链接]
发表于 2019-12-30 12:59:29 | 显示全部楼层 |阅读模式
2明经币
如果不加循环的话,量多了,使用起来,就不是很方便了,还请老师帮忙看看
(defun c:TT1()
(setvar "CMDECHO" 0)
(if *move* (setq Newmove (getreal (strcat  "\n请输入偏移距离:<" (rtos *move* 2 2) ">:") ) )
(setq Newmove (getreal "\n请输入偏移距离:"))
)
(if (null Newmove) (setq Newmove *move*) (setq *move* Newmove))
(if (ssget '((0 . "Arc,Circle,Ellipse,*Line")))
    (vlax-for o (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))
      (mapcar '(lambda (x)(vla-offset o x)) (list Newmove (- Newmove)))
    )
  )
(setvar "CMDECHO" 1)
(princ)
)


最佳答案

查看完整内容

(defun c:TT1 (/ newmove) (setvar "CMDECHO" 0) (if *move* (setq Newmove (getreal (strcat "\n请输入偏移距离::"))) (setq Newmove (getreal "\n请输入偏移距离:")) ) (if (null Newmove) (setq Newmove *move*) (setq *move* Newmove) ) (while (ssget '((0 . "Arc,Circle,Ellipse,*Line"))) (vlax-for o (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))) ...
发表于 2019-12-30 12:59:30 | 显示全部楼层
(defun c:TT1 (/ newmove)
        (setvar "CMDECHO" 0)
        (if *move*
                (setq Newmove (getreal (strcat  "\n请输入偏移距离:<" (rtos *move* 2 2) ">:")))
                (setq Newmove (getreal "\n请输入偏移距离:"))
        )
        (if (null Newmove)
                (setq Newmove *move*)
                (setq *move* Newmove)
        )
        (while (ssget '((0 . "Arc,Circle,Ellipse,*Line")))
    (vlax-for o (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))
      (mapcar '(lambda (x)
                                                                 (vla-offset o x)
                                                         )
                                (list Newmove (- Newmove))
                        )
    )
  )
        (setvar "CMDECHO" 1)
        (princ)
)

评分

参与人数 1明经币 +1 收起 理由
linheyuanpcb + 1 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2019-12-30 13:17:01 | 显示全部楼层
taoyi0727 发表于 2019-12-30 12:59
(defun c:TT1 (/ newmove)
        (setvar "CMDECHO" 0)
        (if *move*

厉害,搞定了
回复

使用道具 举报

发表于 2019-12-31 13:51:52 | 显示全部楼层
taoyi0727 发表于 2019-12-30 12:59
(defun c:TT1 (/ newmove)
        (setvar "CMDECHO" 0)
        (if *move*

2020下测试 乱码
回复

使用道具 举报

发表于 2019-12-31 14:19:25 | 显示全部楼层


可以用呀!上面动图就是用2020试的

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2020-1-1 13:38:36 | 显示全部楼层
taoyi0727 发表于 2019-12-31 14:19
可以用呀!上面动图就是用2020试的

不清楚怎么回事
我系统是WIN10 X64 1909


本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2020-1-1 13:51:13 | 显示全部楼层
xotoo 发表于 2020-1-1 13:38
不清楚怎么回事
我系统是WIN10 X64 1909

可能你电话系统或是CAD  的版本问题 你用的不是简体中文
只是猜测哈
回复

使用道具 举报

发表于 2022-11-13 19:51:55 | 显示全部楼层
taoyi0727 发表于 2019-12-30 12:59
(defun c:TT1 (/ newmove)
        (setvar "CMDECHO" 0)
        (if *move*

u撤回多了,就会出错,选择对象:  ; 错误: Automation 错误。 调用方法 Clear (接口 IAcadSelectionSet) 失败
回复

使用道具 举报

发表于 2022-11-19 08:29:00 | 显示全部楼层
能修改偏移后的颜色就更好了
回复

使用道具 举报

发表于 2022-11-19 08:30:35 | 显示全部楼层
双向批量偏移py


(defun c:plpy (/ CLOCKWISEP OFFSET KD SS N EN kd0)
   (defun CLOCKWISEP (en / lw minp MaxP lst)
     (setq lw (vlax-ename->vla-object en))
     (vla-GetBoundingBox lw 'MinP 'MaxP)
     (setq
       minp (vlax-safearray->list minp)
       MaxP (vlax-safearray->list MaxP)
       lst  (mapcar
              (function
                (lambda (x)
                  (vlax-curve-getParamAtPoint
                    lw
                    (vlax-curve-getClosestPointTo lw x)
                    )
                  )
                )
              (list minp
                    (list (car minp) (cadr MaxP))
                    MaxP
                    (list (car MaxP) (cadr minp))
                    )
              )
       )
     (if (or
           (<= (car lst) (cadr lst) (caddr lst) (cadddr lst))
           (<= (cadr lst) (caddr lst) (cadddr lst) (car lst))
           (<= (caddr lst) (cadddr lst) (car lst) (cadr lst))
           (<= (cadddr lst) (car lst) (cadr lst) (caddr lst))
           )
       t
       )
     )
   (initget 7 "W N S  ")
   (setq kd0 (getkword "\n[向外偏移W/向内偏移N/双向偏移S]<W>"))
   (if (= "" kd0)
     (setq kd0 "W")
     )
   (initget 6)
   (setq offset (getreal "\n[输入偏移距离]<50>"))
   (if (null offset)
     (setq offset 50)
     )
   (initget 7 "Y N  ")
   (setq kd (getkword "\n[删除源对象<Y>/不删除源对象<N>]<N>:"))
   (if (= kd "")
     (setq kd "N")
     )
   (while (setq ss (ssget '((0 . "*polyline,arc,circle"))))
     (repeat (setq n (sslength ss))
       (setq en (ssname ss (setq n (1- n))))
       (cond
         ((or (= "ARC" (cdr (assoc 0 (entget en))))
              (= "CIRCLE" (cdr (assoc 0 (entget en))))
              )
          (cond ((= kd0 "W")
                 (vla-offset (vlax-ename->vla-object en) offset)
                 (vla-put-Color (vlax-ename->vla-object (entlast)) 1)
                 )
                ((= kd0 "N")
                 (vla-offset (vlax-ename->vla-object en) (- offset))
                 (vla-put-Color (vlax-ename->vla-object (entlast)) 1)
                 )
                (t
                 (vla-offset (vlax-ename->vla-object en) offset)
                 (vla-put-Color (vlax-ename->vla-object (entlast)) 1)
                 (vla-offset (vlax-ename->vla-object en) (- offset))
                 (vla-put-Color (vlax-ename->vla-object (entlast)) 1)
                 )
                )
          )
         (t
          (cond ((= kd0 "W")
                 (if (CLOCKWISEP en)
                   (vla-offset (vlax-ename->vla-object en) (- offset))
                   (vla-offset (vlax-ename->vla-object en) offset)
                   )
                   (vla-put-Color (vlax-ename->vla-object (entlast)) 4)
                 )
                ((= kd0 "N")
                 (if (CLOCKWISEP en)
                   (vla-offset (vlax-ename->vla-object en) offset)
                   (vla-offset (vlax-ename->vla-object en) (- offset))
                   )
                   (vla-put-Color (vlax-ename->vla-object (entlast)) 1)
                 )
                (t
                 (vla-offset (vlax-ename->vla-object en) offset)
                 (vla-put-Color (vlax-ename->vla-object (entlast)) 1)
                 (vla-offset (vlax-ename->vla-object en) (- offset))
                 (vla-put-Color (vlax-ename->vla-object (entlast)) 4)
                 )
                )
          )
         )
       (if (= kd "Y")
         (entdel en)
         )
       )
     )
   (princ)
   )
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 04:42 , Processed in 0.222580 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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