明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 899|回复: 7

[提问] 文字原位转180度的程序。改为90度

[复制链接]
发表于 2015-9-29 14:56 | 显示全部楼层 |阅读模式
(defun c:gfz (/  cmn osn  ss i n ssn ssndata ssnsty pt ptmin ptmax cenpt
        *error* msg)
  (defun *error* (msg)
    (if
      (wcmatch msg "; 错误:,函数被取消")
       (progn
   (setvar 'cmdecho cmn)
   (setvar 'osmode osn)
   (princ)
       )
       (princ msg)
    )
  )
  (setq cmn (getvar 'cmdecho))
  (setq osn (getvar 'osmode))
  (setvar 'cmdecho 0)
  (setvar 'osmode 0)
  (princ"\n选择要原地反转的对象:")
  (setq ss (ssget ))
  (setq i 0)
  (setq n (sslength ss))
  (repeat n
    (setq ssn (vlax-ename->vla-object (ssname ss i)))
    (vla-GetBoundingBox ssn 'ptmax 'ptmin)
    (setq pt (mapcar '(lambda (a b) (/ (+ a b) 2))
         (vlax-safearray->list ptmax)
         (vlax-safearray->list ptmin)
       )
    )
    (vlax-invoke-method
      ssn
      'rotate
      (vlax-3d-point pt)
      pi
    )
    (setq i (1+ i))
  )
  (command "ucs" "")
  (setvar 'cmdecho cmn)
  (setvar 'osmode osn)
  (princ "\n命令:GFZ")
  (princ)
)

这是一个可以把文字原位转180度的程序,我想改为转90度,把pi改为(* pi 0.5)不行,请高手帮帮忙
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2015-9-29 15:06 | 显示全部楼层
可以转
1
检查修改后有没有重加载
2
检查原文字是否本身是90度
因为程序不是原角度+90
而是强制角度=90
3
(ssget)加对象过滤
 楼主| 发表于 2015-9-29 15:22 | 显示全部楼层
masterlong 发表于 2015-9-29 15:06
可以转
1
检查修改后有没有重加载

1,2都查了。没有问题,程序执行后的提示是:实参太多
3,不会,麻烦详细说说
发表于 2015-9-29 15:39 | 显示全部楼层
(ssget '((0 . "text")))
ssget函数更多的用法
需要你自己学习
建议下个《AutoLisp Vlisp 函数.chm》
实参太多的错误
没办法帮你
因为我这里运行没问题
发表于 2015-9-29 21:27 | 显示全部楼层
  1. (defun c:tt ()
  2.   (setvar 'osmode 0)
  3.   (princ "\n选择要原地反转的对象: ")
  4.   (setq ss (ssget '((0 . "text")))
  5.         i  -1
  6.   )
  7.   (repeat (sslength ss)
  8.     (setq ob (vlax-ename->vla-object (ssname ss (setq i (1+ i)))))
  9.     (vla-GetBoundingBox ob 'ptmax 'ptmin)
  10.     (setq pt (mapcar '(lambda (a b) (/ (+ a b) 2))
  11.                      (vlax-safearray->list ptmax)
  12.                      (vlax-safearray->list ptmin)
  13.              )
  14.           pt (vlax-3d-point pt)
  15.     )
  16.     (vlax-invoke-method ob 'rotate pt (* pi 0.5))
  17.   )
  18.   (princ)
  19. )
发表于 2015-9-30 07:35 | 显示全部楼层
;;;旋转文字图块
(defun c:xzwz(/ x k s n m en r)
  (vl-load-com)
  (setq x(getangle"\n输入需要旋转的角度<归0>:"))
  (if(null x)(setq x 0 k nil) (setq k t))
  (while
(setq s(ssget'((0 . "INSERT,text,mtext"))))
  (if s
    (progn
      (setq n(sslength s)m 0)
      (while(< m n)
        (setq en(ssname s m)
              m(1+ m))
        (if k(setq r (+ (cdr(assoc 50 (entget en))) x))(setq r x))
        (vla-put-Rotation (vlax-ename->vla-object en) r)
        )))
)
  (princ)
  )
 楼主| 发表于 2015-9-30 08:00 | 显示全部楼层
谢谢楼上的朋友。
 楼主| 发表于 2015-9-30 09:39 | 显示全部楼层
香田里浪人 发表于 2015-9-30 07:35
;;;旋转文字图块
(defun c:xzwz(/ x k s n m en r)
  (vl-load-com)

这个程序再完善一下跟好,就是自动记住上次确定的转动角度,这样就不用每次都要再输入转动角度了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 22:13 , Processed in 0.203110 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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