找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 990|回复: 4

[编程申请]:匆忙间忘了,请教一个初级问题

[复制链接]
发表于 2002-1-31 11:46:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
当我绘制了一些实体后,如何把他们归入选择集中?用ssget "P"不行。有何办法?
因为工作关系。编程也是断端断续续的,很多初级问题,老是要搞不清楚。大家别笑话啊:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-1-31 11:54:42 | 显示全部楼层
4.6.2  在程序中,对象选择集组建和对象的响应
(1)用户指定对象
适用于对用户指定的对象,进行编辑处理的应用程序中,选择集组建。
(While (Progn (PrinC "\n选择要处理的图形对象...")
                       (Not (SetQ ss (SSGet)))
           )
           (Alert "没有任何对象被选中,请重选…")
)       
t  点评:
·  因为 SSGet 函数没有显示用户输入提示的功能,要在使用它之前发出提示。
·  为了对用户的输入做必需的检查,用了While和Progn函数组成了后条件循环,用户必须选定有效的选择集,才能使程序向下执行。

(2)从头顺次提取
如果有关图线是顺序画成,在此过程中没有夹杂其它对象,程序设计要求图线是:轮廓线用黄色,剖面线用绿色。
首先,用 (SSAdd)定义一个空的选择集SS备用。当画完第一个对象后,立即把它的对象名放置在名为 FIRST的变量中,并把它填入 SS 集。之后就可以连续使用 (Command) 函数画完所有的有关对象。最后用 (While) 函数从头顺次提取,得到的选择集SS 就可以用了(T409.LSP)。
(Defun C:SS1()
       (SetQ p (GetPoint "基点: ") ss (SsAdd))
       (Command "color" 2 "line" p "@100,0" "")
       (SetQ first (EntLast) ss (SsAdd first ss))
       (Command "arc" "" "@20,20"
                  "line" "" "@0,50" "@ -100,0" p ""
       )
       (While (SetQ s (EntNext first))
               (SetQ ss (SsAdd s ss) first (EntNext first))
       )
       (Command "color" 3 "hatch" "u" 45 10 "n" ss "")
)

t  点评:
·  这种模式适用于有关图线是顺序生成的,其中没有夹杂其他的图线。
·  程序设计的关键是记下整套图线的“头”,就是变量 first 中记载的对象名。
·  之后用 While 函数将他们收集在一起。
·  因为要逐个添加对象名,所以预置一个空的选择集是必要的:
(SetQ ss (SSAdd))

(3)边画边提取
适用于所有的模式。每当生成了一条有关的图线,就将它收到选择集中(T410.LSP)。
(Defun IAdd () (SsAdd (EntLast) ss))
(Defun C:SS2()
       (SetQ p (GetPoint "Base point: ") ss (SsAdd))
       (Command "color" 2 "line" p "@100,0" "") (IAdd)
       (Command "text" p 10 0 "Point1"
                "arc" "" "@20,20"
       ) (IAdd)
       (Command "circle" (Polar p 2.5 30) 25
                "line" "" "@0,50" ""
       ) (IAdd)
       (Command "line" "" "@-100,0" "") (IAdd)
       (Command "line" "" p "") (IAdd)
       (Command "color" 3 "hatch" "u" 45 10 "n" ss "")
)

t  点评:
·  这种模式适用所有的情况,只是有点罗嗦。
·  声明一个 (IAdd) 函数,是为了程序设计能够逐渐标准化。
·  必须用 (EntLast) 函数取出对象名,这样才能万无一失。

(4)按事先约定的特征提取。
这种方法适用于所有的情况。
首先要事先约定有关的对象用颜色 99 绘制(或者其它的统一特征,例如:层名、线形等),而其它的对象当然就不再能使用这个色号。
画图描述中可不必考虑各个对象的生成顺序,只要保证有关对象用 99 号色,其它对象不用 99 号色即可。当有关对象的最后一个生成完毕后,可用(SsGet "x" '((62 . 99))) 响应 HATCH要目标的提示,也不必建立有名的选择集。
请注意,打完剖面线后,别忘了把这些对象变成绘图规定的颜色 (T411.LSP)。
  (Defun C:SS3()
         (SetQ p (GetPoint "Base point: "))
         (Command "color" 99
                    "line" p "@100,0" "" "arc" "" "@20,20"
                    "color" 2 "circle" (Polar p 3 50) 30
                    "color" 99 "line" "" "@0,50" "@ -100,0" p ""
                    "color" 3
                    "hatch" "u" 45 10 "n"
                             (SsGet "x" '((62 . 99))) ""
                    "change" “p” "" "p" "c" 2 ""
         )
  )

t  点评:
·  这种事先约定的模式,实际上是利用了 AutoCAD 数据库的检索功能。
·  这个程序中用了传统的 (Command),是因为如果用 (VL-CmdF),程序会发生奇怪的错误。当然每一个命令引用都使用一个单独的 (VL-CmdF),就没有错误了。但这样似乎太罗嗦了一些。

        另外的例子是,检索所有名称中包含指定字串的块。自定义函数如下(T411a.LSP)
(Defun SBlock (st)
       (SSGet "x" (List '(0 . "INSERT") (Cons 2 st)))
)
       
例如要搜索以”CCD”为块名前缀的块,可以:(SetQ bs (Sblock “ccd*”))。在提供参数时,可以使用 ”*”、”?” 等统配符号。这个例子可以说明,选择集的建立,除了使用选择集过滤功能之外,还可以由用户自己编写程序,再加上几层的过滤条件。这个例子中就是增加了“块名”的过滤。

——摘自《Visual LISP for AutoCAD2000程序设计——从学会到用好》第四章
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-1-31 11:55:32 | 显示全部楼层
利用ACAD的handle
1 在绘制这些实体前,取得最后一个实体的组码 (cdr (assoc 5 (entlast)))
2 开始绘图
3 什么时候完成绘图,就用(entnext)从最后开始找,直到刚才取得的handle。
4 如果要求在不同的绘图期间使用,可以把它写到文件。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-1-31 13:32:25 | 显示全部楼层
多谢陈老师,受教了!还有 laoliu:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-2 01:41:04 | 显示全部楼层
另:
1。绘制实体前将所有实体选集存为ss1
2.绘制实体
3。执行某操作(如copy),提示选集时用 “all" "r" "!ss1" (从当前所有实体选集中减去ss1选集)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-27 00:06 , Processed in 0.325424 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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