找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1296|回复: 11

(完成)[编程申请]:晓东,东能否编个个程序!

[复制链接]
发表于 2002-4-21 04:21:09 | 显示全部楼层 |阅读模式

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

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

×
晓东,东能否编个个程序!
按选择的层进行排序.泪水expreess 中的draw order by color,
现在变为draw order by layer ?
这对规划设计图很有用!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-4-21 05:10:30 | 显示全部楼层

Re: [编程申请]:晓东,东能否编个个程序!

最初由 wwqq 发布
[B]晓东,东能否编个个程序!
按选择的层进行排序.泪水expreess 中的draw order by color,
现在变为draw order by layer ?
这对规划设计图很有用! [/B]


;|
    命令:DRAWORDER_BY_LAYER
    功能:将选择的图层上的所有实体显示顺序置顶
    说明:配合XDRX_API使用,对程序有建议请到
         晓东CAD空间-论坛 http://www.xdcad.net/forum
         留言
|;

  1. (defun c:draworder_by_layer (/ e tf)
  2.   (if (or
  3.         (setq e (xdrx_entsel "\n请点取一个要置顶的图层上的实体<输入层名>:"))
  4.         (/= "" (setq e (getstring "\n请输入要置顶的层名<退出>:")))
  5.       )
  6.     (progn
  7.       (setq tf (type e))
  8.       (if (= 'LIST tf)
  9.         (setq e (xdrx_getentdxf 8))
  10.       )
  11.       (if (xdrx_draworder->top (ssget "x" (list (cons 8 e))))
  12.         (prompt (strcat "\n已经成功将图层 " e " 上的实体置顶..."))
  13.       )
  14.     )
  15.   )
  16.   (princ)
  17. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-4-22 02:41:55 | 显示全部楼层

谢谢,但是否可以用对话框?

谢谢,但是否可以用对话框?
一次多选择几个,再按选择好的顺序统一处理?
(不用输入层的名称,有的太长了)
要求是否过分?
thank you very much !!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-4-22 02:55:56 | 显示全部楼层

Re: 谢谢,但是否可以用对话框?

最初由 wwqq 发布
[B]谢谢,但是否可以用对话框?
一次多选择几个,再按选择好的顺序统一处理?
(不用输入层的名称,有的太长了)
要求是否过分?
thank you very much !!! [/B]


可以,只是在同一处的(上下覆盖),都在变换层选择里面的,遮盖问题回有未知性。等新的程序吧。

程序考虑了输入层名,同时也让点选实体确定层,给大家多一个选择吧,默认第一个选择是点取。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-22 03:01:51 | 显示全部楼层
if   循环 改为 while 循环
(while (or
        (setq e (xdrx_entsel "\n请点取一个要置顶的图层上的实体<输入层名>:"))
        (/= "" (setq e (getstring "\n请输入要置顶的层名<退出>:")))
      )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-4-22 03:07:38 | 显示全部楼层
最初由 梦断江南 发布
[B]if   循环 改为 while 循环
(while (or
        (setq e (xdrx_entsel "\n请点取一个要置顶的图层上的实体<输入层名>:"))
        (/= "" (setq e (getstring "\n请输入要置顶的层名<退出>:")))
      ) [/B]


他的意思我想还是在置顶代码前,把层都选好,现在这个加WHILE循环只能解决下按回车继续执行上次的命令的过程,应该在代码里面加入把选择的层名加入字符串里面,如依次选择了0,wall,dote层

层名要变成 "0,wall,dote")

代码里面加入 (setq lyrname (strcat lyrname "," sel_lyr))

那样在构造选择集的时候就是 (ssget "x" '((8 . "0,wall,dote"))
这样就可以了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-4-22 03:46:07 | 显示全部楼层

太厉害了!

太厉害了!

我一直以为我很行-----在本单位:)

但在你们面前,可能还在幼儿园小班呢!

Thank you!

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

使用道具 举报

发表于 2002-4-22 05:06:30 | 显示全部楼层
我的改法是分别取层 分别置顶,最后选择的在最上面。
xd的是选多个层,一起置顶(与选层的顺序无关)
两个可以结合起来:一次可以选择多个层,再按多次选择的顺序分别置顶。
方法1。在while循环中构造多个层选择集

  1. (defun c:draworder_by_layer (/ e tf)
  2. (setq roop "true" roop2 "true")
  3. (while roop ;;while1
  4. (while roop2;;while2
  5.   (if
  6.     (or (setq e (xdrx_entsel "\n请点取一个要置顶的图层上的实体<输入层名>:"))
  7.          (/= "" (setq e (getstring "\n请输入要置顶的层名<退出>:")))
  8.     )
  9.     (progn
  10.       (setq tf (type e))
  11.       (if (= 'LIST tf)
  12.         (setq e (xdrx_getentdxf 8))
  13.       )
  14.      (if lyrname;;改了一下
  15.        (setq lyrname (strcat lyrname "," e ))
  16.        (setq lyrname e)
  17.       )
  18.     );;;progn   
  19.   (setq roop2 nil);;else
  20. );;;if
  21. );while2 循环结束,得到层名串
  22. (if (xdrx_draworder->top (ssget "x" (list (cons 8 lyrname))))
  23.     (prompt (strcat "\n已经成功将图层 " e " 上的实体置顶..."))
  24. )
  25. (if (/= "" (getstring "\n敲任意字符-退出选择/<空格,回车-继续选择下一组>:"))
  26. (setq roop nil)
  27. );if
  28. );;while2 循环结束
  29. (princ)
  30. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-22 05:24:48 | 显示全部楼层
方法2,先构造选择集表,再传到xdrx_draworde->函数
背景资料:
—————————————————————————————
154.  xdrx_draworder->back

功能:ACAD命令DRAWORDER的函数版本(使用ARX方法,速度要比ACAD命令快),将参数实体和选择集的任意组合的实体顺序放到最后面。

调用格式:(xdrx_draworder->back <实体名>...[实体名]..[选择集]...[选择集])

返回值:若成功,返回T

155. xdrx_draworder->top

功能:ACAD命令DRAWORDER的函数版本(使用ARX方法,速度要比ACAD命令快),将参数实体和选择集的任意组合的实体顺序放到最前面。

调用格式:(xdrx_draworder->top <实体名>...[实体名]..[选择集]...[选择集])

返回值:若成功,返回T
—————————————————————————————
acad.mnl中改变绘图显示顺序的程序段:
(defun ai_draworder (option / ss )

  (setq m:err *error* *error* *merr*)
  (ai_sysvar '("cmdecho" . 0))

  (if (setq ss (ssget "_I"))
    (command "_.draworder" option)
    (if (setq ss (ssget))
      (command "_.draworder" ss "" option)
    )
  )
  (ai_sysvar NIL)
  (setq *error* m:err m:err nil)

  (princ)
)

—————————————————————————————
acad.mns中的调用:
ID_MnOrder     [->Display &Order]
ID_DrawordeF     [Bring to &Front]^C^C^P(ai_draworder "_f") ^P
ID_DrawordeB     [Send to &Back]^C^C^P(ai_draworder "_b") ^P
                 [--]
ID_DrawordeA     [Bring &Above Object]^C^C^P(ai_draworder "_a") ^P
ID_DrawordeU     [<-Send &Under Object]^C^C^P(ai_draworder "_u") ^P
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-4-23 03:06:18 | 显示全部楼层

谢谢!

非常感谢你们的热情和知识!
以后经常来见识各位高手!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-5-8 09:00:22 | 显示全部楼层
各位大侠,能不能将修改的代码也能写成lisp文件供下载?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 10:08 , Processed in 0.211295 second(s), 54 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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