找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 587|回复: 0

[求助] [求助]:写了一个标注批量相关的lisp,还有些问题,请大家帮帮忙!!

[复制链接]
发表于 2004-5-27 19:12:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
由于利用ET中的工具chspace把以前在模型空间的标注转至图纸空间,但是这样一来标注原先有关联的都没有了。因为图纸空间的标注要是和模型空间的对象没有了关联也就失去了意义。所有就要利用dimreassociate命令重新关联。但是这个太麻烦了。
故我写了一个程序来批量关联(注意:前提是转移以前的是有关联的,而且转移后两个空间的没有动过)

但是现在还有个问题就是半径和直径在用dimreassociate命令的时候要选取对象,本来我可以利用箭头的顶点选取的,但是因为不再一个空间,对象始终在标注下面,这样一来总选的是标注,cad就说没有选择到相应的对象。所以我利用角度让其偏转了一些。这样在一定的情况下可以做了,但是存在的两个问题。1、是当图形放的很小的时候同样选择不上。2、有可能偏转到对象以外了,这就更选择不上了。

我附上程序大家给点意见:
[PHP]
;批量关联
(defun c:gl()
  (setq ss (ssget '((0 . "DIMENSION"))))  
  (setq i 0)
  (repeat (sslength ss)
    (setq en (ssname ss i))
    (setq en_data (entget en))
    (setq pt1 (cdr (assoc 13 en_data))
          pt2 (cdr (assoc 14 en_data))
          pt3 (cdr (assoc 15 en_data))
          pt4 (cdr (assoc 10 en_data))
          new_pt_data (cdr (assoc 16 en_data))
          kind (cdr (assoc 70 en_data)))
    (cond ((= kind 34)
           (progn
             (setq ang1 (angle pt1 pt2)
                   dd1 (distance pt1 pt2)
                   pt_cen_12 (polar pt1 ang1 (/ dd1 4))
                   ang2 (angle pt3 pt4)
                   dd2 (distance pt3 pt4)
                   pt_cen_34 (polar pt3 ang2 (/ dd2 4)))                  
             (command "dimreassociate" en "" pt_cen_12 pt_cen_34)
             (setq en_data (entget en))
             (setq old_text (assoc 16 en_data))
             (setq new_text (cons 16 new_pt_data))
             (setq en_data (subst new_text old_text en_data))
             (entmod en_data)
             );progn
           )
          ((= kind 37)
           (command "dimreassociate" en "" "cen" pt1 pt1 pt2))
          ((= kind 164)
           (progn
             (setq os (getvar "osmode"))
             (setvar "osmode" 0)
             (setq ang (angle pt4 pt3))
             (setq ptt (polar pt4 (+ ang (/ pi 100)) (distance pt4 pt3)))
             (command "dimreassociate" en "" ptt "")
             (setvar "osmode" os)
             );progn
           )
          ((= kind 163)
           (progn
             (setq os (getvar "osmode"))
             (setvar "osmode" 0)
             (setq ang (angle pt4 pt3))
             (setq ptt (polar (polar pt4 ang (/ (distance pt4 pt3) 2)) (+ ang (/ pi 100)) (/ (distance pt4 pt3) 2)))
             (command "dimreassociate" en "" ptt "")
             (setvar "osmode" os)
             );progn
           )
          ((= kind 38)
           (command "dimreassociate" en "" pt1))
          (t (command "dimreassociate" en "" pt1 pt2)))
    (command "dimstyle" "a" en "")
    (setq i (+ i 1))
    )
  (command "dimregen")
  )
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-27 06:54 , Processed in 0.269439 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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