明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4424|回复: 5

[求助]编一个增强型align命令

[复制链接]
发表于 2007-1-25 23:48:00 | 显示全部楼层 |阅读模式
cad自带的align命令在输入目标点时要么点取屏幕上某一点,要么用键盘输入坐标,能否编一个可以点取图上坐标数据进行align的增强型命令,里面的坐标数据可能是text,也可能是块,也可能是组,前面一般带有前缀“X=”或“X ”,“Y=”或“Y ”等字样,请注意测量坐标系统中的X、Y和屏幕上的X、Y是反的,对那些没前缀的可以由程序提示设计输入是X还是Y ,坐标标注方式见附件

本帖子中包含更多资源

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

x
发表于 2007-1-26 10:06:00 | 显示全部楼层
未測試的
  1. (DEFUN C:TEST (/ ALB ALB1 ALB2 ALB3 ALB4 ALEN ALPOINTL DXF NB TEXT VE1 XB XT1 YT1)
  2.   (SETQ ALEN(ENTSEL"\n選對齊對象:"))
  3.   (SETQ ALB1(CAR(ENTSEL"\n對齊第一點:"))
  4. ALB2(CAR(ENTSEL"\n對齊第二點:"))
  5. ALB3(CAR(ENTSEL"\n對齊第三點:"))
  6. ALB4(CAR(ENTSEL"\n對齊第四點:")))
  7.   (IF(AND ALB1 ALB2 ALB3 ALB4)
  8.     (PROGN
  9.       
  10.       (SETQ ALPOINTL NIL ALB(LIST ALB1 ALB2 ALB3 ALB4))
  11.    (FOREACH E1 ALB;(SETQ E1 ALB1)Q
  12.      (SETQ XB NIL TEXT NIL VE1(VLAX-ENAME->VLA-OBJECT E1))
  13.      (SETQ NB(VLAX-VLA-OBJECT->ENAME(VLA-COPY VE1)))
  14.      (COMMAND ".EXPLODE" NB)
  15.      (while(setq NB(entnext NB))
  16.        (SETQ DXF(ENTGET NB))
  17.        (IF(EQ(CDR(ASSOC 0 DXF))"TEXT")
  18.   (SETQ TEXT(CONS (CDR(ASSOC 1 DXF))TEXT)))
  19.        (SETQ XB(CONS NB XB)))
  20.      (FOREACH E1 XB(ENTDEL E1))
  21.      (IF TEXT
  22.        (PROGN
  23.        (FOREACH T1 TEXT;(SETQ T1(CAR TEXT))
  24.   (IF(wcmatch T1 "X*")
  25.     (PROGN(SETQ XT1(VL-STRING-TRIM "X"T1))
  26.       (IF(wcmatch XT1 "=*")(SETQ XT1(VL-STRING-TRIM "="XT1)))
  27.       (SETQ XT1(ATOF XT1))))
  28.   (IF(wcmatch T1 "Y*")
  29.     (PROGN(SETQ YT1(VL-STRING-TRIM "Y"T1))
  30.       (IF(wcmatch YT1 "=*")(SETQ YT1(VL-STRING-TRIM "="YT1)))
  31.       (SETQ YT1(ATOF YT1)))))
  32.        (SETQ ALPOINTL(CONS(LIST XT1 YT1)ALPOINTL))))
  33.      )
  34.      ;; align
  35. (command ".ALIGN" ALEN "" (CAR ALPOINTL)(CADR ALPOINTL)(CADDR ALPOINTL)(CADDDR ALPOINTL) "" "y")
  36.   ))
  37.      
  38.    (PRINC)
  39. )
 楼主| 发表于 2007-1-26 12:58:00 | 显示全部楼层
你编错了,源点,也就是第一和第二点是从图中点取具体坐标(不是数据)
运行结果如下:選對齊對象:
對齊第一點:
對齊第二點:
對齊第三點:
對齊第四點:; 错误: no function definition: VLA-OBJECT->ENAME

发表于 2007-1-28 19:55:00 | 显示全部楼层

;增强型align V1.0 by sailorcwx 2007.01
;目前只支持包含XY信息的图块,其余的以后增加

(defun c:al1 (/ YH_ALSELECT YH_POINT1 YH_POINT2 YH_POINT3 YH_POINT4)
  (setq YH_alselect (ssget)
 YH_point1 (YH_getpoint nil "第一个源点")
 YH_point2 (YH_getpoint YH_point1 "第一个目标点")
 YH_point3 (YH_getpoint nil "第二个源点")
 YH_point4 (YH_getpoint YH_point3 "第二个目标点")
 )
  (command "ALIGN" YH_alselect "" YH_point1 YH_point2 YH_point3 YH_point4 "")
  (princ)
  )
(defun YH_getpoint (YH_lastpoint YH_info / YH_BLOCKDATA YH_POINT YH_POINTX YH_POINTY YH_UCSBLOCK)
  (if (not YH_lastpoint)
    (setq YH_point (getpoint (strcat "\n选择" YH_info "或选择一个坐标数据:")))
    (setq YH_point (getpoint YH_lastpoint (strcat "\n选择" YH_info "或选择一个坐标数据:")))
    )
  (if (not YH_point)
    (progn
      (setq YH_ucsblock (tblobjname "block" (cdr (assoc 2 (entget (car (entsel "\n选择坐标数据:")))))))
      (setq YH_pointX nil YH_pointY nil)
      (while (setq YH_ucsblock (entnext YH_ucsblock))
 (setq YH_blockdata (entget YH_ucsblock))
 (if (= (cdr (assoc 0 YH_blockdata)) "TEXT")
   (progn
     (if (= (substr (cdr (assoc 1 YH_blockdata)) 1 1) "X") (setq YH_pointX (substr (cdr (assoc 1 YH_blockdata)) 3)))
     (if (= (substr (cdr (assoc 1 YH_blockdata)) 1 1) "Y") (setq YH_pointY (substr (cdr (assoc 1 YH_blockdata)) 3)))
     )
   )
 )
      (if (and YH_pointX YH_pointY) (setq YH_point (list (atof YH_pointY) (atof YH_pointX))))
      )
    )
 YH_point
  )

 楼主| 发表于 2007-2-15 09:24:00 | 显示全部楼层
本帖最后由 作者 于 2007-2-15 9:37:40 编辑

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=58121
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=58120这两个贴子也是我发的,去顶一下
发表于 2008-5-15 14:25:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-27 23:20 , Processed in 0.192262 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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