明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6473|回复: 20

编程申请:以组合图元中心旋转并缩放

  [复制链接]
发表于 2013-1-6 15:09 | 显示全部楼层 |阅读模式
1明经币
本帖最后由 半听可乐 于 2013-1-6 15:22 编辑

设备专业套建筑专业底图时,有些建筑图上的文字等图元角度跟本专业图面布置不符(各专业出图比例、图面角度、字体大小设置不同导致),一个个调整十分麻烦,有没有什么办法将那些零散的组合图元以其中心(或者自己指定)同时旋转并缩放?一次框选,处处旋转并缩放,各组合图元之间相对位置不改变!感觉要实现这功能很不简单,余钱有限,悉数奉上,权当给各位高手出挑战题(主要是现在需要当紧

相关链接
xiaxiang(沙发回复) http://bbs.mjtd.com/thread-90258-1-1.html
chpmould 写的“快速相同实体组合选择
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=91651&page=1#pid502513
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

(setq pts (acet-geom-textbox (entget ee) 0.0) ==> (setq pts (Corners: ee) ;;; ========================================================================== (defun Corners: (Entity^ / Ang~ Corners@ Dist~ EntList@ Ins Pt Pt1 Pt2 Pt3 Pt4) (setq EntList@ (entget Entity^) Corners@ (textbox EntList@) Ang~ (cdr (assoc 50 EntList@)) Ins (cdr (assoc 10 EntList@)) ...

点评

仅就你提供的样图个例来说,要实现旋转非常容易!选择文本,根据每个文本的范围再选择Solid,然后旋转即可!  发表于 2013-1-7 11:25
发表于 2013-1-6 15:09 | 显示全部楼层
本帖最后由 Andyhon 于 2013-1-7 16:11 编辑

(setq pts (acet-geom-textbox (entget ee) 0.0)
==>
(setq pts (Corners: ee)

;;; ==========================================================================
(defun Corners: (Entity^ / Ang~ Corners@ Dist~ EntList@ Ins Pt Pt1 Pt2 Pt3 Pt4)
    (setq EntList@ (entget Entity^)
          Corners@ (textbox EntList@)
          Ang~ (cdr (assoc 50 EntList@))
          Ins (cdr (assoc 10 EntList@))
          Pt (mapcar '+ (car Corners@) Ins)
          Pt1 (polar Ins (+ Ang~ (angle Ins Pt)) (distance Ins Pt))
          Pt (mapcar '+ (cadr Corners@) Ins)
          Pt3 (polar Ins (+ Ang~ (angle Ins Pt)) (distance Ins Pt))
          Dist~ (* (distance (car Corners@) (cadr Corners@)) (cos (- (angle Pt1 Pt3) Ang~)))
          Pt2 (polar Pt1 Ang~ Dist~)
          Pt4 (polar Pt3 Ang~ (- Dist~))
    );setq
    (list Pt1 Pt2 Pt3 Pt4)
  );defun Corners:
  
  
节录自 Text-Box.Lsp
;|
    Program Name: Text-Box.lsp [Text-Box R2]
    Created By:   Terry Miller (Email: terrycadd@yahoo.com)
                  (URL: http://web2.airmail.net/terrycad)
    Date Created: 9-19-97
|;

回复

使用道具 举报

发表于 2013-1-6 16:05 | 显示全部楼层
图中的图元为块,那么就很好编了
(以块的插入点原位旋转和缩放即可)
回复

使用道具 举报

发表于 2013-1-6 16:06 | 显示全部楼层
貌似yjr111的http://bbs.mjtd.com/thread-91905-1-1.html这篇帖子和你要求的基本能符合,楼主看看
回复

使用道具 举报

发表于 2013-1-6 16:22 | 显示全部楼层
单个组合中心缩放旋转很容易,若要是批量执行,恐怕比较难,难点在程序如何在你选择的一堆图元里自动实现分组,如果没有一些特定条件来限制,恐怕很难实现!

点评

我不懂编程,但是有个思路不知是否正确,思路一:框选一堆图元---程序判断相邻图元的最大外框范围----程序将最大外框范围相同的组合图元进行分组;思路二:框选组合标本---程序记住标本内容(或者最大外框范围)--…  发表于 2013-1-6 17:32
回复

使用道具 举报

发表于 2013-1-6 16:28 | 显示全部楼层
本帖最后由 Andyhon 于 2013-1-6 19:54 编辑

(defun c:test ()
   (setvar 'CmdEcho 0)
   (command "Layer" "on" "*" "")
   
   ;; (setq ss (ssget "X" '((0 . "TEXT"))))
   (setq ss (ssget '((0 . "TEXT")))
         nn (sslength ss)
         vv -47.36056824356047
        fac (/ 1.25 3)
   )
   (While (setq ee (ssname ss (setq nn (1- nn))))
     (setq pts (acet-geom-textbox (entget ee) 0.0)        ; ET function
            pt (car pts)
            p5 (mapcar (function (lambda (a b) (/ (+ a b) 2))) pt (cadr pts))
           ee1 (ssget "f" (list pt (polar pt 0.5 4000)))
     )
     (command "Rotate" ee ee1 "" p5 vv)
     (command "Scale" "P" "" p5 fac)
   )
   (setvar 'CmdEcho 1)
)
回复

使用道具 举报

 楼主| 发表于 2013-1-6 17:27 | 显示全部楼层
Andyhon 发表于 2013-1-6 16:28
(defun c:test ()
   (setvar 'CmdEcho 0)
   (command "Layer" "on" "*" "")

长老,程序运行没反应?
回复

使用道具 举报

发表于 2013-1-6 17:59 | 显示全部楼层


Ok here

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2013-1-6 19:48 | 显示全部楼层
Andyhon 发表于 2013-1-6 17:59
Ok here

谢谢长老,目前问题是解决了,但我希望标本兼治,难道是CAD版本原因?
回复

使用道具 举报

发表于 2013-1-6 22:45 | 显示全部楼层
半听可乐 发表于 2013-1-6 19:48
谢谢长老,目前问题是解决了,但我希望标本兼治,难道是CAD版本原因?

cad要装有ET,试试
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 21:44 , Processed in 0.201478 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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