明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 518|回复: 2

[讨论] 一个上下左右平移文字的程序

[复制链接]
发表于 2023-5-31 10:02 | 显示全部楼层 |阅读模式
我用过外源码改成了 上下 和 左右 两个平移的程序,现在想合成一个,但是cond这个东西不好弄,越搞越糊涂

向大家请教一下,该如何完善!
  1. (defun c:MoveIt (/ ss d dir ang i e rot)

  2.       (setq ss (ssget ":L" '((0 . "TEXT,MTEXT"))))
  3.       (setq d (getdist "\nSpecify offset distance: "))
  4.       (initget "L R U D")
  5.       (setq dir
  6.                      (cond
  7.                         (getkword "\nChoose direction [上下左右] <右/R>:")
  8.                         (if (NULL dir) (setq dir "R")
  9.                          )     
  10.                      (t dir)         
  11.                      )
  12.        )
  13.       (cond     ((= dir "U")  (setq ang (/ pi 2) ))
  14.                     ((= dir "R")  (setq ang  0))
  15.                     ((= dir "D")  (setq ang (* 3 (/ pi 2)) ) )
  16.                     ((= dir "L")  (setq ang pi))         
  17.       )
  18.       
  19.      (repeat (setq i (sslength ss))
  20.        (setq e (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
  21.        (setq rot (vlax-get e 'Rotation) ip (vlax-get e 'InsertionPoint))
  22.        (Vlax-put e 'InsertionPoint (polar ip (+ ang rot) d)
  23.        )
  24.      )
  25.     (princ)
  26. )

发表于 2023-5-31 10:50 | 显示全部楼层
(defun c:MoveIt (/ ang d dir e i ip rot ss)
        (setq ss (ssget "" '((0 . "TEXT,MTEXT"))))
        (setq d (getdist "\nSpecify offset distance: "))
        (while d
                (initget "L R U D")
                (setq dir (getkword "\nChoose direction [上(U)/下(D)/左(L)/右(R)] <右/R>:"))
                (if (NULL dir) (setq dir "R"))
                (cond     ((= dir "U")  (setq ang (/ pi 2) ))
                        ((= dir "R")  (setq ang  0))
                        ((= dir "D")  (setq ang (* 3 (/ pi 2)) ) )
                        ((= dir "L")  (setq ang pi))
                )
                (repeat (setq i (sslength ss))
                        (setq e (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
                        (setq rot (vlax-get e 'Rotation) ip (vlax-get e 'InsertionPoint))
                        (Vlax-put e 'InsertionPoint (polar ip (+ ang rot) d)
                        )
                ))
        (princ)
)

弄明白就是很简单的
 楼主| 发表于 2023-5-31 11:24 | 显示全部楼层
start4444 发表于 2023-5-31 10:50
(defun c:MoveIt (/ ang d dir e i ip rot ss)
        (setq ss (ssget "" '((0 . "TEXT,MTEXT"))))
        (setq d ...

谢谢楼上的兄弟,又学习了while和cond!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-30 21:03 , Processed in 0.278858 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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