请教如何利用lisp 删或加属性项!!!谢谢!

请教如何利用lisp 删或加属性项!!!谢谢!,第1张

Lisp的表达式是一个原子(atom)或表(list),原子(atom)是一个字母序列,如abc;表是由零个或多个表达式组成的序列,表达式之间用空格分隔开,放入一对括号中,如: abc () (abc xyz) (a b (c) d) 最后一个表是由四个元素构成的,其中第三个元素本身也是一个表。 正如算数表达式1+1有值2一样,Lisp中的表达式也有值,如果表达式e得出值v,我们说e返回v。如果一个表达式是一个表,那么我们把表中的第一个元素叫做 *** 作符,其余的元素叫做自变量。 Lisp的7个公理(基本 *** 作符): (quote x)返回x,我们简记为'x (atom x)当x是一个原子或者空表时返回原子t,否则返回空表()。在Lisp中我们习惯用原子t表示真,而用空表()表示假。 >(atom 'a) t >(atom '(a b c)) () >(atom '()) t 现在我们有了第一个需要求出自变量值的 *** 作符,让我们来看看quote *** 作符的作用——通过引用(quote)一个表,我们避免它被求值。一个未被引用的表达式作为自变量,atom将其视为代码,例如: >(atom (atom 'a)) t 反之一个被引用的表仅仅被视为表 >(atom '(atom 'a)) () 引用看上去有些奇怪,因为你很难在其它语言中找到类似的概念,但正是这一特征构成了Lisp最为与众不同的特点——代码和数据使用相同的结构来表示,而我们用quote来区分它们。 (eq x y)当x和y的值相同或者同为空表时返回t,否则返回空表() >(eq 'a 'a) t >(eq 'a 'b) () >(eq '() '()) t (car x)要求x是一个表,它返回x中的第一个元素,例如: >(car '(a b)) a (cdr x)同样要求x是一个表,它返回x中除第一个元素之外的所有元素组成的表,例如: >(cdr '(a b c)) (b c) (cons x y)要求y是一个表,它返回一个表,这个表的第一个元素是x,其后是y中的所有元素,例如: >(cons 'a '(b c)) (a b c) >(cons 'a (cons 'b (cons 'c ()))) (a b c)

CAD中有些文字需要随着图纸的当前条件的变化自动变化,例如保存日期、打印日期、打印比例等等。CAD早期版本只是在扩展工具中提供了动态反应文字(rtext)功能,动态反应文字可以用CAD的Diesel表达式来定义动态文字,也可以动态链接文本文档,文本文档被编辑后,图纸中的文字会自动更新。

由于大多数设计人员对Diesel表达式不了解,因此这个功能会用的人不多,CAD高版本提供了字段(field)功能,这个功能预定义了一系列动态文字,设计人员只需在列表中选用即可,这样使用起来就简单多了。当然也支持高手们用Diesel表达式、LISP变量、系统变量来自定义动态文字。

一、直接插入字段

1、字段不仅可以单独插入,也可以在单行文字、多行文字、属性文字的值中插入字段。和其他文字一样,使用字段之前要设置好文字样式。单独插入字段的话,直接输入field命令,或者在菜单或工具面板中执行字段命令d出对话框,如图所示。

2、如果只是要插入预设好的字段 *** 作非常简单,直接在左侧列表中选择“ 字段名称 ”,在右侧列表中选择一个符合自己要求的“ 样例 ”,然后点“ 确定 ”按钮后在图面上确定位置即可。由于预设的字段比较多,为了更快找到自己需要的字段,可以现在“ 字段类别 ”中选择需要的类别,例如在类别中选择“ 打印 ”或“ 日期和时间 ”,下面列出的名称就少多了,选起来会更方便。

3、只左侧的字段名称中选择保存日期,在右侧的样例列表中选择一种我们需要的形式,然后单击确定按钮,关闭字段对话框,按提示在图面上确定字段插入的位置。

4、为了区别于 普通的文字 ,字段插入后可以看到灰色的背景。 双击字段, 可以d出多行文字编辑器,我们可以在字段的基础上添加其他文字

5、如果想看到字段变化的效果,我们可以尝试着修改一下系统时间,然后再保存一下图纸。

二、在多行文字或单行文字中插入字段

1、如果要把字段插入普通的文字中间,在写单行文字和多行文字时右键,右键中都会有“ 插入字段 ”,也可以按快捷键 CTRL+F ,多行文字编辑器的面板中也有插入字段的按钮。

三、属性文字中添加字段

1、如果你的图框用的是属性块,也可以在定义属性文字时插入字段,“ 属性定义 ”对话框的属性值的后面有一个“插入字段”的按钮,点此按钮可以在属性中插入字段,如图所示。

四、用字段标注面积或长度

1、字段不仅可以设置日期、比例,还可以提取对象的属性,如长度、面积、半径等,这些字段也会随图形的变化而自动变化。下面看一下如何用字段来标注一个圆的面积。绘制一个圆, 执行字段命令, 在字段类别中选择“ 对象 ”,单击选择对象按钮,拾取圆,在属性中选择面积,后面还可以设置数字的格式,如图所示。

2、单击确定按钮,关闭字段对话框,在图中单击确定字段的位置,如图所示。

3、选中圆, 拖动夹点, 改变圆的大小,然后输入 RE ,回车,更新字段,观察面积字段的变化,如图所示。

4、如果感兴趣,还可以尝试用字段标注对象的其他属性。

小结:

在字段对话框中提供了大量预设的字段,当我们选择一个字段的时候就可以看到对话框下面会显示“字段表达式”,如果感兴趣,可以研究一下。

不过我觉得目前预定义的字段对于大多数普通设计人员来说完全够用了。我对CAD编程方面也不太了解,无法给大家太多指导。后面从网上介绍动态反应文字的文章中Diesel表达式的文章中摘取两个例子,看看对大家有没有帮助。

注意事项:

以上技巧适用于AUTOCAD和浩辰CAD等类似CAD软件

一般有两个方案

第一个方案:用AutoLisp方案,首先用 取得图块这个图元,然后用 entnext 逐一找到属性块来找到其中length的属性,然后将它的值给找出来,然后进行运算,注意 entnext 的运用。这个很简单,你自己应该写吧。

第二个方案:用VisualLisp方案,注意vla-getattributes,vlax-variant-value,vlax-safeArray->list这几个函数的运用,以下为 VisualLisp的例子

(Defun C:Test ()

(setq en0 (car (entsel)))

此处请选有属性定义的图块

(setq vn0 (vlax-ename->vla-object en0))

(setq lstVar (vla-getattributes vn0))

(setq lstAttrs (vlax-safeArray->list (vlax-variant-value lstVar)))

(setq TextString nil)

(foreach attr lstAttrs

(setq TagString (vla-get-TagString attr))

(if (equal TagString "length") 此处为你想要的元素

(setq TextString (vla-get-TextString attr))

)

)

(if TextString

(princ (strcat "The content of length = " TextString))

(princ "没有找到length ")

)

(prin1)

)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11695769.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存