明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1959|回复: 9

[求助]这种过滤条件比较多的文字操作如何实现?

[复制链接]
发表于 2007-2-4 16:03 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2007-2-4 16:04:56 编辑

很想有实现以下功能的LISP程序:
选择一块图(有很多对象),自动过滤只剩以下对象(单行文字,图层TEXT,字高300,旋转角度90,不包含@),将过滤所得的对象全部向右移动某个长度如400。

因为过滤条件比较多,不知如何实现,请指教。

发表于 2007-2-4 17:07 | 显示全部楼层

(ssget (list '(-4 . "<AND")
               '(0 . "text")
               '(8 . "图层TEXT")
               '(40 . 300.0)
               (cons 50 (/ pi 2.0))
             '(-4 . "AND>")
        )
)

不包含"@"有点难, 用 '(-4 . "/=") 好像也不行

我用下面的方法可以选择椭圆弧,而排除椭圆(供你参考)

(ssget '((-4 . "<AND")(0 . "ellipse")(-4 . "/=")(41 . 0.0)(-4 . "AND>")))

发表于 2007-2-4 20:23 | 显示全部楼层

不包含"@"

===>
(1 . "~*`@*")

发表于 2007-2-5 09:00 | 显示全部楼层

这样就行:

(SSGET (LIST
 '(0 . "TEXT")
 '(8 . "TEXT")
 '(40 . 300.0)
 (CONS 50 (/ PI 2))
 '(1 . "~*\`@*")
))

 楼主| 发表于 2007-2-5 10:04 | 显示全部楼层

多谢版主和上面两位伸出援手(多来梦??),可是上面两位的代码我试验了几次都不行,所以没有回应;版主的代码可以了。哈哈,幸福啊,再次感谢!

另外我找了DXF组码的参考资料,可是 "~*\`@*" 的资料应该在下面资料的那一章呢?我一直找不到,因为我还想知道过滤“必须包含@的字符串”的代码如何表示。我是菜鸟,请各位再次帮忙。

 

  AutoCAD 2000 DXF参考修正
  第一章 DXF 格式
  认识本参考
  对象和图元的组码
  组码值类型
  按数字次序排列的图元组码
  第二章 HEADER 区域
  HEADER 区域组码
  第三章 CLASSES 区域
  CLASS区域组码
  第四章 TABLES 区域
  符号表组码
  符号表组码
  APPID
  BLOCK_RECORD
  DIMSTYLE
  LAYER
  LTYPE
  STYLE
  UCS
  VIEW
  VPORT
  第五章 BLOCKS 区域
  BLOCKS 区域组码
  BLOCK
  ENDBLK
  第六章 ENTITIES 区域
  图形对象的公用组码
  3DFACE
  3DSOLID
  ACAD_PROXY_ENTITY
  ARC
  ARCALIGNEDTEXT
  ATTDEF
  ATTRIB
  BODY
  CIRCLE
  DIMENSION
  ELLIPSE
  HATCH
  IMAGE
  INSERT
  LEADER
  LINE
  LWPOLYLINE
  MLINE
  MTEXT
  OLEFRAME
  OLE2FRAME
  POINT
  POLYLINE
  RAY
  REGION
  RTEXT
  SEQEND
  SHAPE
  SOLID
  SPLINE
  TEXT
  TOLERANCE
  TRACE
  VERTEX
  VIEWPORT
  WIPEOUT
  XLINE
  第七章 OBJECTS 区域
  OBJECT 区域组码
  公用对象组码
  ACAD_PROXY_OBJECT
  ACDBDICTIONARYWDFLT
  ACDBPLACEHOLDER
  DICTIONARY
  DICTIONARYVAR
  DIMASSOC
  GROUP
  IDBUFFER
  IMAGEDEF
  IMAGEDEF_REACTOR
  LAYER_INDEX
  LAYOUT
  MLINESTYLE
  OBJECT_PTR
  PLOTSETTINGS
  RASTERVARIABLES
  SPATIAL_INDEX
  SPATIAL_FILTER
  SORTENTSTABLE
  XRECORD
  第八章 THUMBNAILIMAGE 区域
  THUMBNAILIMAGE 区域组码
  附录 A 图形交换文件格式
  ASCII DXF 文件
  基本DXF文件结构
  DXF文件中的组码
  DXF文件中的头部组码
  DXF文件中的类组码
  DXF文件中的符号表组码
  DXF文件中的图块组码
  DXF文件中的图元组码
  DXF文件中的对象组码
  编写 DXF 接口程序
  二进制 DXF 文件
  幻灯片文件
  旧的幻灯片表头
  幻灯片库文件格式
  附录B 深入DXF
  数据库对象
  Persistent Inter-Object 引用句柄
  子类标记
  扩展词典和 Persistent Reactors
  扩展数据
  对象坐标系统 (OCS)
  任意轴算法

发表于 2007-2-5 11:54 | 显示全部楼层
看看watch函数
 楼主| 发表于 2007-2-5 12:44 | 显示全部楼层

楼上的说错了吧,应该是wcmatch函数才对。不过也谢了,有你提示才能找出来。

过滤“必须包含@的字符串”的代码这个就可以了:"*\`@*"

不过这个“`”有点不太理解,函数说明上说:可跳过特殊字符 (按照顺序读入下一个字符),那么@应该属于特殊字符啊,加了它应该会把@跳过,怎么反而要加呢?

发表于 2007-2-5 15:10 | 显示全部楼层

不好意思,难得糊涂

`@=@

@ = 单个字母

 楼主| 发表于 2007-2-6 08:32 | 显示全部楼层

我知道了,有这个功能本来是为了能使被通配符占用的字符能表示出来,可是通配符在以后的版本可能增加,所以干脆所有的字符要表示全部都加个`以保持兼容性。这个我能理解了,因为C语言中是用反斜线(\)的。

可是既然有`了,那还需要反斜线(\)干什么用?应该和`功能一样啊。可是函数说明的范例里面竟然两个都用上了:
(wcmatch "Name" "*`\\*")

发表于 2007-2-6 09:02 | 显示全部楼层
呵呵,\符号是给LISP给用来做转义符的,所以要输入\就必须用两个来代替。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-18 06:23 , Processed in 0.177447 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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