明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 飞鹰158

批量文字中心对齐圆芯的程序

  [复制链接]
发表于 2012-9-11 08:18 | 显示全部楼层
本帖最后由 smartstar 于 2012-9-11 08:23 编辑

试试这个符合你的要求不

  1. ;;; -----------------------------------------------------------------;   
  2. (defun c:ARK_TTC (/ std-sslist movetocenter)
  3.   (command "_undo" "_be")
  4.   (setting)
  5.   (defun std-sslist (ss / n lst)
  6.     (if        (eq 'pickset (type ss))
  7.       (repeat (setq n (fix (sslength ss))) ; fixed   
  8.         (setq lst (cons (ssname ss (setq n (1- n))) lst))
  9.       )
  10.     )
  11.   )
  12.   (defun movetocenter (/         a           x             txtobj
  13.                        center_circle           outline   b
  14.                        bobject         objss           res             midpoint
  15.                       )
  16.     (setq a (ssget '((0 . "circle"))))
  17.     (setq a (std-sslist a))
  18.     (foreach x a
  19.       (setq txtobj nil)
  20.       (setq pub x)
  21.       (setq center_circle (assoc 10 (entget x)))

  22.       (setq outline (objectpoint (entget x)))

  23.       (setq b (ssget "_cp" outline '((0 . "TEXT"))))
  24.       (setq bobject (ssname b 0))
  25.       (setq objss (vlax-ename->vla-object bobject))
  26.       (setq res (xyval1 objss))
  27.       (setq midpoint (midp (list (nth 0 res) (nth 1 res))
  28.                            (list
  29.                              (nth 2 res)
  30.                              (nth 3 res)
  31.                            )
  32.                      )
  33.       )
  34.       (setq midpoint (trans midpoint 0 1)
  35.             c_pt     (trans (cdr center_circle) 0 1)
  36.       )
  37.       (command "move" bobject "" midpoint c_pt)
  38.     )
  39.   )
  40.   (movetocenter)
  41.   (resetting)
  42.   (command "_undo" "_e")
  43. )
  44. ;;; the subrountine is write by qjchen to get selection by circle   
  45. ;;; and lwpolyline   
  46. (defun objectpoint (obj / name ori i r w_pl_lst wlist)
  47.   (setq        wlist nil
  48.         ptlist nil
  49.   )
  50.   (setq name (cdr (assoc 0 obj)))
  51.   (cond
  52.     ((= name "CIRCLE")
  53.      (setq ori (cdr (assoc 10 obj)))
  54.      (setq r (cdr (assoc 40 obj)))
  55.      (setq i 0)
  56.      (repeat 30
  57.        (setq wlist (append
  58.                      wlist
  59.                      (list (polar ori (* 2 pi (/ i 30.0)) r))
  60.                    )
  61.        )
  62.        (setq i (1+ i))
  63.      )
  64.     )
  65.     ((= name "LWPOLYLINE")
  66.      (defun w_pl_lst (ent / pt_list)
  67.        (foreach        x ent
  68.          (if (= (car x) 10)
  69.            (setq pt_list (append
  70.                            (list (cdr x))
  71.                            pt_list
  72.                          )
  73.            )
  74.          )
  75.        )
  76.        pt_list
  77.      )
  78.      (setq wlist (w_pl_lst obj))
  79.     )
  80.   )
  81.   (setq num (length wlist))
  82.   (setq n 0)
  83.   (repeat num
  84.     (setq pt (list (trans (nth n wlist) 0 1)))
  85.     (setq ptlist (append ptlist pt))
  86.     (setq n (1+ n))
  87.   )
  88.   ptlist
  89. )
  90. ;;; _ end of xyval   
  91. ;;; ---The following codes are copy From Tony Hotchkiss at cadalyst   
  92. ;;; Get the boundingbox of one object   
  93. (defun xyval1 (obj / minpt maxpt topy bottmy leftx rightx)
  94.   (vla-GetBoundingBox obj 'minpt 'maxpt)
  95.   (setq        pt1    (vlax-safearray->list minpt)
  96.         pt2    (vlax-safearray->list maxpt)
  97.         topy   (cadr pt2)
  98.         bottmy (cadr pt1)
  99.         leftx  (car pt1)
  100.         rightx (car pt2)
  101.   )                                        ; _ end of setq   
  102.   (list leftx bottmy rightx topy)
  103. )
  104. ;;; The error function   
  105. (defun err (s)
  106.   (if (= s "Function cancelled")
  107.     (princ "nALIGNIT - cancelled: ")
  108.     (progn
  109.       (princ "nALIGNIT - Error: ")
  110.       (princ s)
  111.       (terpri)
  112.     )                                        ; _ end of progn   
  113.   )                                        ; _ end of if
  114.   (resetting)
  115.   (princ "SYSTEM VARIABLES have been resetn")
  116.   (princ)
  117. )
  118. ;;; err   
  119. ;;; setting and resetting the system variables   
  120. (defun setv (systvar newval / x)
  121.   (setq x (read (strcat systvar "1")))
  122.   (set x (getvar systvar))
  123.   (setvar systvar newval)
  124. )
  125. ;;; setv   
  126. (defun setting ()
  127.   (setq oerr *error*)
  128.   (setq *error* err)
  129.   (setv "BLIPMODE" 0)
  130.   (setv "CMDECHO" 0)
  131.   (setv "OSMODE" 0)
  132. )
  133. ;;; setting   
  134. (defun rsetv (systvar)
  135.   (setq x (read (strcat systvar "1")))
  136.   (setvar systvar (eval x))
  137. )
  138. ;;; rsetv   
  139. (defun resetting ()
  140.   (rsetv "BLIPMODE")
  141.   (rsetv "CMDECHO")
  142.   (rsetv "OSMODE")
  143.   (setq *error* oerr)
  144. )
  145. ;;; -------------------------------------------------------   
  146. (defun midp (p1 p2)
  147.   (mapcar
  148.     '(lambda (x)
  149.        (/ x 2.)
  150.      )
  151.     (mapcar
  152.       '+
  153.       p1
  154.       p2
  155.     )
  156.   )
  157. )
  158. ;;; The following code taken From Mr.Tony Hotchkiss at Cadalyst   
  159. (defun err (s)
  160.   (if (= s "Function cancelled")
  161.     (princ "nregion clean - cancelled: ")
  162.     (progn
  163.       (princ "nregion clean - Error: ")
  164.       (princ s)
  165.       (terpri)
  166.     )                                        ; _ end of progn   
  167.   )                                        ; _ end of if
  168.   (resetting)
  169.   (princ "SYSTEM VARIABLES have been resetn")
  170.   (princ)
  171. )
  172. ;;; err   
  173. ;;; setting and resetting the system variables   
  174. (defun setv (systvar newval / x)
  175.   (setq x (read (strcat systvar "1")))
  176.   (set x (getvar systvar))
  177.   (setvar systvar newval)
  178. )
  179. ;;; setv   
  180. (defun setting ()
  181.   (setq oerr *error*)
  182.   (setq *error* err)
  183.   (setv "BLIPMODE" 0)
  184.   (setv "CMDECHO" 0)
  185.   (setv "OSMODE" 0)
  186. )
  187. ;;; setting   
  188. (defun rsetv (systvar)
  189.   (setq x (read (strcat systvar "1")))
  190.   (setvar systvar (eval x))
  191. )
  192. ;;; rsetv   
  193. (defun resetting ()
  194.   (rsetv "BLIPMODE")
  195.   (rsetv "CMDECHO")
  196.   (rsetv "OSMODE")
  197.   (setq *error* oerr)
  198. )

点评

不一样的思路,但是使用框选的的方式是否稳定呢...另速度快不...  发表于 2012-9-11 20:50
发表于 2012-9-11 09:14 | 显示全部楼层
能否改完文字插入点与型心对齐呢?
发表于 2012-9-11 12:45 | 显示全部楼层
这个东西不复杂,开放一下源码吧
发表于 2012-9-11 14:25 | 显示全部楼层
本帖最后由 阳光动力 于 2012-9-11 14:25 编辑

无论如何也要支持下
发表于 2012-12-4 14:27 | 显示全部楼层
要每个实体过一遍看哪个离点最近
发表于 2012-12-4 21:39 | 显示全部楼层

本帖子中包含更多资源

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

x
发表于 2012-12-5 00:35 | 显示全部楼层
光是圆倒简单,关键移到圆心并正中对正有什么作用。我也经常把别人的图纸这样改过,不过对正方式改为左对齐,我是为了使用Cad自带的数据提取功能。
发表于 2012-12-5 21:42 | 显示全部楼层
关注中
发表于 2013-6-27 01:02 | 显示全部楼层
感谢分享实用的工具
发表于 2013-6-27 07:33 | 显示全部楼层

程序用途: 批量文字对齐相邻圆


使用说明:

        本程序使用VC++编写,支持在AutoCAD2010~2012版本上运行,请直接在CAD中加载ScmTxApCir.arx文件即可用.


CAD命令: tac









我的是2005,没有用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-18 20:15 , Processed in 0.148251 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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