明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3250|回复: 14

[基础] 批量轉文字角度。大家看看能還能完美一下

  [复制链接]
发表于 2010-7-28 12:41 | 显示全部楼层 |阅读模式

大家好,曾在明经网上找到一个这样的程序,文字各旋转180度,但不批批量选择,或上一次选择

那位高人给改进一下,就是能批量选择,让所选择的文字各自都转一个角度,比如"A"是35度  "B"是87度  "C"是130度 "D"是150度 "E"是220度

选择A,B,C,D,E,转入30度,然后A,B,C,D,E,各自转了30度,这样A就是65度,B是107度"C"是160度 "D"是180度 "E"是250度

那位高手看一下能否改一下

 

(defun C:zz()
  (setq oldosmode (getvar "osmode"))
  (setvar "osmode" 0)
  (princ "\n请选择要旋转的单行文字!!!")
  (setq en (car (entsel)))
  (setvar "cmdecho" 0)
  (setq en1 (entget en))
  (setq tym (cdr (assoc 0 en1)))
  (if ( = tym "TEXT")
    (progn
      (setq dd (cdr (assoc 10 en1)))
      (setq jd (cdr (assoc 50 en1)))
      (setq ysjd1 (cdr (textbox en1)))
      (setq ysjd (car ysjd1))
      (setq x (car ysjd))
      (setq y (cadr ysjd))
      (setq a (atan (/ y x)))
      (setq jd1 (+ jd a))
      (setq jl (/ (sqrt (+ (* x x) (* y y))) 2))
      (setq xy (polar dd jd1 jl))
      (command "rotate" en "" xy "180"  );   180  即需要旋转的角度,可以进行修改。
     )
    )
  (if (/= tym "TEXT")
    (progn
      (princ "\n选择的不是单行文字!!!")
      (setvar "osmode" oldosmode)
      (setvar "cmdecho" 1)
      (princ)
      (exit)
    ) 
  ) 
  (setvar "osmode" oldosmode)
  (setvar "cmdecho" 1)
  (princ)
)

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-9-5 10:55 | 显示全部楼层
不错的小程序!简洁明了!
发表于 2010-7-28 16:30 | 显示全部楼层
  1. (defun C:zz ()
  2. (setq oldosmode (getvar "osmode"))
  3. (setvar "osmode" 0)
  4. (princ "\n请选择要旋转的单行文字!!!")
  5. (setq ss (ssget '((0 . "TEXT"))))
  6. (setvar "cmdecho" 0)
  7. (if (/= ss nil)
  8. (progn
  9. (setq ang (getangle "\n请输入旋转角度:"))
  10. (setq ang (/ (* ang 180) pi))
  11. (print ang)
  12. (setq num    (sslength ss)
  13.      n    0
  14. )
  15. (while (< n num)
  16.     (setq en (ssname ss n)
  17.      en1 (entget en)
  18.      dd (cdr (assoc 10 en1))
  19.      jd (cdr (assoc 50 en1))
  20.      ysjd1 (cdr (textbox en1))
  21.      ysjd (car ysjd1)
  22.      x     (car ysjd)
  23.      y     (cadr ysjd)
  24.      a     (atan (/ y x))
  25.      jd1 (+ jd a)
  26.      jl (/ (sqrt (+ (* x x) (* y y))) 2)
  27.      xy (polar dd jd1 jl)
  28.     )
  29.     (command "rotate" en "" xy ang)
  30.                     ; 180 即需要旋转的角度,可以进行修改。
  31.     (setq n (1+ n))
  32. )
  33. )
  34. )
  35. (setvar "osmode" oldosmode)
  36. (setvar "cmdecho" 1)
  37. (princ)
  38. )
 楼主| 发表于 2010-7-29 13:01 | 显示全部楼层

哦,谢谢二楼楼主,要得,能用了,谢谢二楼楼主.请问怎么称呼格下

发表于 2010-8-1 16:35 | 显示全部楼层
是不是也可以增加对多行文本也有效呢?
发表于 2010-8-1 21:43 | 显示全部楼层

(setq ss (ssget '((0 . "TEXT"))))

在这句后边加上

(setq ss1 (ssget '((0 . "MTEXT"))))

(command "_select" ss ss1 "")

(setq ss (ssget "P")

应该就可以同时支持单行文字和多多行文字了

发表于 2010-8-1 22:58 | 显示全部楼层

将(ssget '((0 . "TEXT")))改成(ssget '((0 . "*TEXT")))就可以了。

发表于 2010-8-2 08:13 | 显示全部楼层

错误: 参数类型错误: numberp: nil,

改了之后只是不过滤掉多行文本,会出现上面提示的错误!

 楼主| 发表于 2010-8-2 12:26 | 显示全部楼层

5楼的试了,错误

6楼的也试了.出现

命令:  ZZ
请选择要旋转的单行文字!!!
选择对象: 指定对角点: 找到 16 个
选择对象:
请输入旋转角度:20
20.0 ; 错误: 参数类型错误: numberp: nil
命令:

发表于 2010-8-2 15:05 | 显示全部楼层
  1. (DEFUN C:ZZ ()
  2. (SETQ OLDOSMODE (GETVAR "OSMODE"))
  3. (SETVAR "OSMODE" 0)
  4. (PRINC "\N请选择要旋转的单行文字!!!")
  5. (SETQ SS (SSGET '((0 . "*TEXT"))))
  6. (SETVAR "CMDECHO" 0)
  7. (IF (/= SS NIL)
  8. (PROGN
  9. (SETQ ANG (GETANGLE "\请输入旋转角度:"))
  10. (SETQ ANG (/ (* ANG 180) PI))
  11. (SETQ NUM    (SSLENGTH SS)
  12.      N    0
  13. )
  14. (WHILE (< N NUM)
  15.     (SETQ EN (SSNAME SS N)
  16.      EN1 (ENTGET EN)
  17.      DD (CDR (ASSOC 10 EN1))
  18.      JD (CDR (ASSOC 50 EN1))
  19.      MINPOINT (VLAX-MAKE-VARIANT)
  20.      MAXPOINT (VLAX-MAKE-VARIANT)
  21.      ENT (VLAX-ENAME->VLA-OBJECT EN)
  22.     )
  23.     (VLA-GETBOUNDINGBOX ENT 'MINPOINT 'MAXPOINT)
  24.     (SETQ MINEXT (VLAX-SAFEARRAY->LIST MINPOINT)
  25.      MAXEXT (VLAX-SAFEARRAY->LIST MAXPOINT)
  26.      X     (CAR MINEXT)
  27.      Y     (CADR MINEXT)
  28.      X1 (CAR MAXEXT)
  29.      Y1 (CADR MAXEXT)
  30.      XY (LIST (/(+ X1 X) 2) (/ (+ Y1 Y) 2))
  31.     )
  32.     (COMMAND "ROTATE" EN "" XY ANG)
  33.                     ; 180 即需要旋转的角度,可以进行修改。
  34.     (SETQ N (1+ N))
  35. )
  36. )
  37. )
  38. (SETVAR "OSMODE" OLDOSMODE)
  39. (SETVAR "CMDECHO" 1)
  40. (PRINC)
  41. )
复制代码
问题出在textbox函数 自己调试一下不都解决了 别总是等别人动手
发表于 2010-8-2 19:23 | 显示全部楼层

旋转之后多行文字插入点会变化路过来看看!

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

本版积分规则

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

GMT+8, 2024-5-5 07:48 , Processed in 0.288081 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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