复杂形态钢结构设计培训班

首页 结构设计-公众号 AutoCAD中实现自定义视角标注文字

AutoCAD中实现自定义视角标注文字

转自:结构设计-公众号


一、引言

熟悉RhinoSketchUp的朋友,应该会留意到他们在文字显示方面的独特之处。

Rhino中,无论进行怎样的三维旋转,标注的文字始终朝向使用者,并不会随标注物件转动而转动。

SketchUp中,可以在“编辑组件”定义时,勾选“总是面对视窗”选项,从而达到物件随视角转动的效果(跟上述Rhino的显示效果类似)。

那么,在AutoCAD中能否实现类似的显示效果?这种显示功能又有何用处呢?

犀牛标注的文字始终与视窗平面保持一致

经小编研究,发现通过AutoLISP可实现在某一自定义视角下(三维空间)的文字标注,但还未能实现类似Rhino那样跟随视角转动的效果。
若能实现在三维空间中任意一个视角下的文字标注,这对于复杂空间结构的施工图绘制已经有很大的帮助。这也是小编研究这个东西的原因,画图狗🐶,大家懂的!
以下两个短视频是通过编写AutoLISP代码绘制构件节点编号的效果展现。

第一个视频是对某单层网壳屋盖的节点编号标注。从视频中可以看到,所有节点编号基本是与网壳曲面贴合标注,且所有文字平面的法向是一致的(统一指向我们所需的自定义视角)。


单层网壳结构的节点编号标注效果

第二个视频对屋面支撑和倾向钢柱的节点编号标注。在这个例子中,只要我们选择好一个合适的视角平面,就可以使多个空间交错放置的构件绘制在同一张图纸上。

屋面支撑、倾向钢柱的节点编号标注效果

上面例子有两个共通点:1、构件均为三维空间放置(与实际施工构件位置、计算模型线模保持一致);2、大部分构件不在同一个空间平面中。通过AutoLISP可对具有类似特点的复杂空间结构进行较好的文字标注,减轻绘制施工图的工作量。
本文介绍的自编AutoLISP小程序,只需绘图者进行三维旋转到一个合适的视角后(一般以文字平面与视窗平面基本一致,且文字无重叠),就可以将当前视角的平面定义为UCS的XY平面,然后由AutoLISP代码执行在当前UCS的XY平面上标注文字了。
AutoCAD中的文字属于二维图元,且仅需提供插入点即可定位。如需对二维的文字图元进行三维空间旋转,使其置于我们所需的某一空间平面内,这个操作其实是十分困难,甚至很难实现(大家可以尝试一下)。
特别地,对于某些复杂空间结构施工图的节点编号标注、构件截面标注等,单靠手工画图是难以完成大量的标注工作。为此,小编写了上面演示的AutoLISP小程序,实现自定义视角的文字标注。

二、AutoCAD中的各种坐标系统

在介绍代码之前,有一些基本概念需要我们先了解的。大家熟知AutoCAD中的WCS和UCS这两个坐标系统,但其实还有其它的坐标系统。

● 通用坐标系统(WCS)
这是参考坐标系统,其他所有的坐标系统都是相对于此坐标系统来定义。WCS 也是唯一不能改变的坐标系统。
● 用户坐标系统(UCS)

用户坐标系统是一个工作坐标系统。它是由用户自行设定的坐标系统,使绘图编辑工作变得更容易。

● 对像坐标系统(OCS)

对像坐标系统又称为图元坐标系统,它用于描述图元在三维空间中的位置。由 AutoLISP的entget 函数返回得到的点坐标值,就是处于该坐标系统。

● 显示坐标系统(DCS)

显示坐标系统是图片在显示前所转换的坐标系统。此坐标系统的原点为标的点,而Z轴为观测方向。所以,在 DCS 中的图像永远都是平面视图。

● 图纸空间显示坐标系统(PSDCS)

该坐标系统只是用于在图纸空间和活动模型空间视区之间进行点的转换。它基本上是一种二维的转换。

与文字标注有关的,主要是对象坐标系统OCS(Object Coordinate System),接下来主要介绍它。

三、对象坐标系统

对象坐标系统的“对象”是指AutoCAD或DXF文件中的图元对象。不同类型的图元,通过属于自身对象坐标系统的点来描述其在三维空间中的具体位置。

对象坐标系统OCS具有以下特性:

(1)OCS的原点与WCS原点是重合的。

(2)对于同一个Z轴的方向矢量,只有一个OCS。即若两个OCS定义的Z轴方向矢量是相同,则这两个OCS为同一个坐标系统。

(3)OCS的X轴和Y轴的方向由AutoCAD 内部的任意轴算法确定(这里不涉及到该算法,暂不介绍)。

不同类型图元对应的坐标系统如下表所示。某些图元的OCS与WCS是相同的。

由对象坐标系统的定义和特性可知,对于文字类的图元,只需确定其OCS的Z轴方向矢量插入点,然后转换到WCS中,即可确定该文字图元在三维空间中的位置与放置方向。那不同坐标系统之间是怎么转换呢?

四、不同坐标系统之间的转换

AutoCAD不同坐标系之间的转换,最常用的就是在命令栏输入“WCS”或者“UCS”。但如果你输入“OCS”,不好意思了!AutoCAD是没有这个命令的。这是因为OCS属于AutoCAD内部定义的一种坐标系统。如果要对OCS转换的话,就需要使用到LISP的trans函数了。

语法:trans pt from to [disp])

● 参数pt:三维实数列表。当disp为nil或不存在时,pt表示点坐标。当disp为T时,pt表示三维位移量。

● 参数from:pt所处于的原坐标系统。

● 参数to:把pt转换到新的坐标系统。

● from和to:整数参数,取值范围0~3。它们分别代表不同坐标系统,其中0代表WCS、1代表UCS、2代表DCS、3代表PSDCS。

● 参数disp:可选参数,控制pt代表坐标值or位移量。

根据AutoLISP函数手册说明,from与to仅能在0~3之间取值,但这里面并没包含OCS。那怎么对文字的OCS与其它坐标系统进行转换呢?经在官方论坛AutoLISP板块里搜索相关信息后,发现from和to还可以是一个三维实数列表,用于表示OCS的Z轴方向

五、自定义视角标注文字代码

在了解了AutoCAD不同坐标系统和转换函数后,接着就介绍实现“自定义视角标注文字”的具体步骤与代码。
这程序代码执行需注意两个前提条件
1、运行前必须处于WCS坐标系统。
2、文字的插入点必须是WCS坐标系统

实现步骤大致可以分为以下四步:

Step1:定义所需的UCS坐标系统
结合标注物的空间放置和分布情况,选定合适的视角,然后定义UCS的X轴和Y轴(与常规UCS定义相同)。

Step2:将UCS的Z轴转换到WCS坐标系统中

该转换用于后续生成文字图元时,指定其所在平面的法线,即使文字的平面与所指定的视角平面一致。
Step3:对文字插入点坐标值进行转换
该转换用于后续生成文字图元时,指定其在OCS坐标系统中的定位坐标。
Step4:以群代码形式生成文字图元
主要采用entmake函数生成文字图元。具体群代码的含义可详AutoLISP中的对象属性列表与群码表

具体代码和注释如下:

;;文字标准前必须处于WCS系统,且文字插入点的原坐标也需要是WCS下的值。;;Step1:定义所需的UCS坐标系统(setq OriginNew (getpoint "n点取新坐标原点:"))(while (not OriginNew)(setq OriginNew (getpoint "n点取新坐标原点:")))(setq Xnew (getpoint "n点取新坐标X轴上的点:"))(while (not Xnew)(setq Xnew (getpoint "n点取新坐标X轴上的点:")))(setq YY (getpoint "n点取新坐标XY平面上的点:"))(while (not YY)(setq YY (getpoint "n点取新坐标XY平面上的点:")))(command "ucs" "3p" OriginNew Xnew YY)

;;Step2:将当前UCS的Z轴转换到WCS中(setq OCS_Zdir (trans (list 0 0 1) 1 0))

;;Step3:对文字插入点进行转换(setq Origin_coord (list Mark_x Mark_y Mark_z)) ;;Mark_x,Mark_y,Mark_z为文字插入点在WCS中的三维坐标值(setq UCS_coord (trans Origin_coord 0 1)) ;;将文字插入点的坐标值由WCS坐标转换到UCS坐标中。(setq Draw_coord_OCS (trans UCS_coord 1 OCS_Zdir)) ;;将文字插入点的坐标值由UCS坐标转换到OCS坐标中,其中OCS的Z轴为自定义的UCSZ轴。

;;Step4:采用群代码的方式生成文字图元(entmake (list (cons 0 "TEXT") (cons 100 "AcDbText") (cons 1 Mark_text) (cons 7 FontName) (cons 8 "JointNum") (cons 10 Draw_coord_OCS) (cons 11 Draw_coord_OCS) (cons 40 TS) (cons 41 WidthFac) (cons 50 AngText) (cons 72 1) (cons 73 2) (cons 210 OCS_Zdir) ));;其中一些变量解释如下:;;变量Mark_text是字符串变量,用于存储需要标注的文字内容;;变量FontName是字符串变量,用于存储标注文字样式的信息;;"JointNum"为字符串,表示文字所在的图层名称;;变量TS、WidthFac、AngText均为实数型变量,分别表示文字的高度、宽带因子和平面转角;;(cons 210 OCS_Zdir)表示文字的拉伸方向(亦即文字所在平面的法向)为自定义UCS的Z轴方向

The End

来源:Nikko结构空间,作者:Nikko Ho,如有侵权请联系我们。


转自:结构设计-公众号

公众号:MyStructure

“转自:结构设计-公众号”公众号,致力于推广建筑结构新理论、新技术、新工艺、新材料及大量工程实例,介绍建筑结构知识和行业资讯,搭建一个建筑结构行业交流的平台。

  

本文来自网络,不代表钢构人的立场,转载请注明出处。搜索工程类文章,就用钢构人网站。 https://www.ganggouren.com/2022/03/ebff63fbdc/
上一篇
下一篇

作者: ganggouren

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

联系我们

17717621528

在线咨询: QQ交谈

邮箱: 1356745727@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部