明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1721|回复: 3

能帮忙给翻译成vba吗?谢谢啦

[复制链接]
发表于 2004-5-14 16:40:00 | 显示全部楼层 |阅读模式
下面红色的部分 “TEXT”形式数据存储格式:
((-1. (0.“TEXT”)    ; 图元类型
 (8.“0”)      ; 图层名
 (10 8.0 6.0 0.0)  ; 文本的插入点
 (40.0.2)     ; 文本的高度
 (1.“R50”)    ; 文本值
 (50.0.0)     ; 旋转角度
 (41.1.0)     ;文本缩放比例因子
 (51.0.0)     ;文本倾斜角度
 (7.“STANDARD”)  ; 文本字型名
 (71.0)      ; 文本生成标志
 (72.0)      ;水平定位选项
 (73.0)      ;垂直定位选项
 (210 0.0 0.0 1.0)  ; 拉伸矢量
)
“DIMENSION”形式数据存储格式:
((-1. (0.“DIMENSION”)   ;图元类型
 (8.“0”)       ;图层名
 (2.“*D0”)      ;无名块名称
 (10 6.99385 7.05435 0.0)  ;尺寸样式的定义点
 (11 5.86265 7.05435 0.0)  ;尺寸标注文本的中点
 (12 0.0 0.0 0.0)  ;针对Baseline与Continue标注的插入点
 (70.0)    ;尺寸标注类型代码
 (1.“”)   ;由用户键入的尺寸标注文本值
 (13 4.73145 7.31522 0.0) ;线性型和角度型尺寸标注的定义点
 (14 6.79385 7.20652 0.0) ;线性型和角度型尺寸标注的定义点
 (15 0.0 0.0 0.0) ;直径型、半径型和角度型尺寸标注的定义点
 (16 0.0 0.0 0.0)  ;角度尺寸标注的尺寸弧线定义点
 (40.0.0)      ;引出线长度
 (50.0.0)      ;角度
 (51.0.0)      ;水平方向
 (52.0.0)      ;尺寸界线角度
 (53.0.0)      ;尺寸文本旋转角度
 (210 0.0 0.0 1.0)  ;拉伸矢量
 (3.“*UNNAMED”)  ;尺寸样式名
)
  由以上图元数据结构可知,对于“TEXT”形式,数据值是跟在组码1后面的组值.对于“DIMENSION”形式,则分为2种情况,一种情况是,在尺寸标注时用户键入了尺寸值,其数据值就是跟在组码1后面的组值;另一种情况是,在尺寸标注时用户确认了尺寸测量值,则组码1后面的组值为空(“”),其数据值以“无名块”的形式隐含在“DIMENSION”图元中.无名块的结构与一般的块结构不同,不能用查找“INSERT”图元的方法访问.
  提取用“DIMENSION”形式标注的尺寸数据的方法有3种.第1种方法为直接提取法,条件是标注的尺寸是由用户键入的,可采用直接提取组码1后面的组值获得数据.第2种方法为“炸开”提取法,先用“EXPLODE”命令,使“DIMENSION”形式标注的尺寸图元“炸开”,分裂成单个的图元,这时尺寸数据便成为“TEXT”形式的图元,然后再采用提取“TEXT”图元组码1后面的组值,而获得数据.第3种方法为访问无名块提取法,利用tlbserach函数(对于AutoCAD R12以后的版本还可以利用nentsel函数)获取进入无名块的通道,再利用entnext函数获取无名块中的各个子图元,从“TEXT”的子图元提取组码1后面的组值,而获得数据.
  第1种方法是有条件的提取法,有较大的局限性.第2种方法比较简便,而且可以与“TEXT”的标注方式统一处理.缺点是破坏了原“DIMENSION”标注的结构,而且“无名块”的“炸开”,将增大零件图的存储量.例如对一项普通的尺寸标注而言,“炸开”后,尺寸线、尺寸界线、箭头等都将成为独立的图元实体.采用第2种方法的最大不足是,“DIMENSION”中无名块的“炸开”将给以后的图形修改带来很大的麻烦.第3种方法编程较复杂,但保护了原“DIMENSION”标注的结构,尺寸数据仍然按无名块的结构方式储存,既提取了数据信息,又没增加存储量,是一个较好的方法.

3.3 ACAD上的实施
  AUTOCAD本身带有AUTOLISP用户开发工具,R11.0以后的版本还支持用C语言来开发,这为用户加入自己设计的功能提供了很好的条件.AUTOLISP具有很强的符号处理功能,下面就用它来开发获取非图形几何信息的功能.
  1)获取“TEXT”图元中的数值,其中namet为实体名
(setq ent(entget namet))      ;获取图元数据
(if(equal(cdr(assco 0 ent))“TEXT”);判别是否为文本
 (setq datum(cdr(assco 1 ent)));是文本则提取数据
)
  2)获取“DIMENSION”图元中的数值.利用tlbserach函数编制访问无名块提取法的程序段,这样在R10以上的版本中都可以运行.
(setq ent(car(entsel)));选择尺寸标注图元,并获得图元名
(setq entt(entget ent‘(“ACAD”)));获得图元定义表
(setq named(cdr(assoc 2 entt)));获取无名块的块名
(setq head(tblsearch“BLOCK”named));取出块头信息
(setq entname(cdr(assoc -2 head)));取出块中第一个子图元名
(while(/=entname nil)    若有子图元则继续
 (setq ent(entget entname));取出块中子图元的定义表
 (if(equal(cdr(assco 0 ent))“TEXT”);判别是否为文本子图元
 (progn;若为文本子图元则继续
   (setq datuml(cdr(assco 1 ent)));提取文本数值(尺寸数值)
 (setq entname(entnext entname));取出下一个子图元名
   (setq ent(entget entname));取出子图元的定义表
   (if(equal(cdr(assco 0 ent))“TEXT”);判别是否为文本子图元
   (progn    ;若为文本子图元则继续
     (setq datum2(cdr(assco 1 ent)));提取文本数值(下偏差)
     (setq entname(entnext entname));再取出下一个子图元名
     (setq ent(entget entname));取出子图元的定义表
     (if(equal(cdr(assco 0 ent))“TEXT”);是否为文本子图元
     (setq datum3(cdr(assco 1 ent)));是,则提取文本数值(上偏差)
     )        ;提取上偏差结束
    )          ;提取下偏差结束
   )          ;提取尺寸数值结束
 (setq entname(entnext entname));取出下一个子图元名)
发表于 2004-5-14 20:57:00 | 显示全部楼层
 楼主| 发表于 2004-5-15 13:27:00 | 显示全部楼层
不一样啊


谢谢啦..


       

发表于 2004-5-19 11:15:00 | 显示全部楼层
你到底要甚麼?? (defun C:TT ()
(setq ENT (vlax-ename->vla-object (car (entsel))))
(setq DATUML (vla-get-measurement ENT)
DATUM2 (- (vla-get-tolerancelowerlimit ENT))
DATUM3 (vla-get-toleranceupperlimit ENT)
)
) ;|
Sub TT()
Dim ENTOBJ As AcadObject
Dim basePnt As Variant
Dim DATUML As Double
Dim DATUM2 As Double
Dim DATUM3 As Double
On Error Resume Next
ThisDrawing.Utility.GetEntity ENTOBJ, basePnt, "請選取一個物件"
DATUML = ENTOBJ.Measurement
DATUM2 = -1 * ENTOBJ.ToleranceLowerLimit
DATUM3 = ENTOBJ.ToleranceUpperLimit
MsgBox "尺寸=" & DATUML & " 上偏差=" & DATUM3 & "下偏差=" & DATUM2
End Sub
|;
;|
(setq ENT (car (entsel)))
(setq ENTT (entget ENT '("ACAD")))
(SETQ ENTT3 (CADR (ASSOC -3 ENTT)))
(SETQ DATUML (CDR (ASSOC 42 ENTT)))
(SETQ DATUM2 (CDADR(MEMBER (CONS 1070 47) ENTT3)))
(SETQ DATUM3 (- (CDADR(MEMBER (CONS 1070 48) ENTT3))))
(SETQ TOL_FLAG (MEMBER (CONS 1070 71) ENTT3));公差號
|;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-6 09:43 , Processed in 0.148015 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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