找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1651|回复: 22

[LISP程序]:晓东老师你好!!请您进来我有问题请教!

[复制链接]
发表于 2004-11-25 00:16:14 | 显示全部楼层 |阅读模式

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

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

×
晓东老师你好!!我下面这个程序是把“选择物体的物体层置于当前层”。可是我想把他改成“把选择的物体放到当前层来”。我怎么也该不出来太深奥了。能否帮我改一下,谢谢您帮助,等待您的回复!!
(defun c:ll( / l1 l2 l3 l4 l5 )
  (setq l1 (entsel))
  (setq l2 (car l1))
  (setq l3 (entget l2))
  (setq l4 (assoc 8 l3))
  (setq l5 (cdr l4))
  (command "layer" "s" l5 "")
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 11287个

财富等级: 富甲天下

发表于 2004-11-25 10:54:05 | 显示全部楼层
程序更改如下:
(defun c:ll( / la ss)
(setq la (getvar "CLAYER")) ;取得当前层名
(princ "\n选择物体 :")
(setq ss (ssget))
(if (/= l1 nil) (command "change" ss "" "P" "LA" la))
(princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-25 13:05:24 | 显示全部楼层
恩,楼上的兄弟,我也想学LSP,1楼的我试了一下不好使,2楼的也不能使--程序行我也没全读懂,哪位兄弟能否借这个简单的程序作个详细的说明,谢谢;
请问1楼楼主的程序是不是中间某步有错?没读懂:(
2楼楼主的程序是不是也存在漏洞?程序不能使:(

(defun c:ll( / l1 l2 l3 l4 l5 );定义主函数ll,括号内的看不懂,应该是5个子函数吧,为什么以这种形式写?
(setq l1 (entsel))
(setq l2 (car l1))
(setq l3 (entget l2))
(setq l4 (assoc 8 l3))
(setq l5 (cdr l4));看了半天,前面应该是高阶函数,但不明白为什么要用这么复杂的方式写?
(command "layer" "s" l5 "");这个好像看懂了,应该是层命令吧?
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-25 13:10:28 | 显示全部楼层
最初由 zxq0220 发布
[B](if (/= l1 nil) (command "change" ss "" "P" "LA" la))
[/B]


"l1"是什么,是不是该是“ss”?我不懂编程,只是看看学学。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 11287个

财富等级: 富甲天下

发表于 2004-11-25 14:36:59 | 显示全部楼层
最初由 lucyxia 发布
[B]

"l1"是什么,是不是该是“ss”?我不懂编程,只是看看学学。 [/B]

是写错了,程序更正如下:

  1. (defun c:ll( / la ss)
  2. ;除号后的是程序中所用的局部变量,程序退出时清空
  3. (setq la (getvar "CLAYER")) ;取得当前层名,存入变量la。
  4. (princ "\n选择物体 :") ;提示选物体
  5. (setq ss (ssget))        ;调用SSGET函数选物体,存入变量ss。
  6. ;如果选了物体,调用CHANGE命令将物体图层更改
  7. (if (/= ss nil) (command "change" ss "" "P" "LA" la ""))
  8. ;若想将物体的颜色和线型都改为随图层,用下行替换上行。
  9. ;(if (/= ss nil) (command "change" ss "" "P" "LA" la "C" "BYLAYER" "LT" "BYLAYER" "")
  10. (princ) ;平静地,无返回值地退出
  11. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-25 15:21:21 | 显示全部楼层
谢谢zxq0220,太感谢了,这是我第一次完全读懂一个LSP程序,流泪中~~~
-----------------------------------------
(getvar "CLAYER"))是取得当前层名,(ssget)是选物体,其它的函数我在哪才能查到?
1楼的程序还有些问题,不知道错误出在哪了?(assoc 8 l3)这里是不是问题的关键?突然出现了个8,觉得挺奇怪的
-----------------------------------------
晕,终于找到1程序不好使的原因了(去论坛转了N圈,原来是我不懂函数,8没问题~)---原来是我自己机器里的命令重名---改名后发现程序只能点选物体,我想是否可以将程序改得更好些呢?---框选物体---(将l1子函数改为2楼兄弟中的ss子函数,但程序运转不正常,不清楚是何原因?)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-11-25 18:19:00 | 显示全部楼层

Re: [LISP程序]:[LISP程序]:晓东老师你好!!请您进来我有问题请教!

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

使用道具 举报

发表于 2004-11-25 22:12:22 | 显示全部楼层
更改后的程序:
[PHP];;; 将所选物体的层同当前层
(DEFUN C:OTO ()
  (princ "\n<将所选物体的层同所选物体层或当前层>")
  (setq ss (ssget))
  (if (and
        ss
        (> (sslength ss) 0)
      )
    (progn
      (setq ent (entsel "\n选择目标实体 <Enter>选择当前层:"))
      (if ent
        (setq la (cdr (assoc 8 (entget (car ent)))))
        (setq la (getvar "clayer"))
      )
      (command ".chprop" ss "" "layer" la "")
    )
  )
  (princ)
)

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

使用道具 举报

发表于 2004-11-26 11:07:03 | 显示全部楼层
madman的程序似乎是属性刷,但是不好使;1楼的程序只能先执行命令,后点选物体;而我实际操作已经习惯先选物体(可框选),后执行命令---1楼的程序不能使,该怎么改呢?---
系统带的命令是先选物体或先执行命令都可以的,那样的程序该如何去编呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 11287个

财富等级: 富甲天下

发表于 2004-11-26 15:47:47 | 显示全部楼层
回复:xxxyzxx
1楼程序更改后可以先选择后执行命令

  1. (defun c:ll( / l1 l2 l3 l4 l5 )
  2. (setq l1 (ssget))
  3. (if (/= l1 nil) (progn
  4. (setq l2 (ssname l1 0)) ;读第一个实体名
  5. (setq l3 (entget l2))    ;读实体的数据
  6. (setq l4 (assoc 8 l3))   ;读取图层名的点对表
  7. (setq l5 (cdr l4))         ;读取图层名
  8. (command "layer" "s" l5 "")  ;设定当前图层
  9. ))
  10. (princ)
  11. )


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

使用道具 举报

 楼主| 发表于 2004-11-27 01:01:12 | 显示全部楼层
最初由 zxq0220 发布
[B]回复:xxxyzxx
1楼程序更改后可以先选择后执行命令
[code]
(defun c:ll( / l1 l2 l3 l4 l5 )
(setq l1 (ssget))
(if (/= l1 nil) (progn
(setq l2 (ssname l1 0)) ;读第一个实体名
(setq l3 (entget l2))   ... [/B]

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

使用道具 举报

发表于 2004-11-27 01:06:13 | 显示全部楼层
楼主想要的命令是“把选择的物体放到当前层来”
这个LISP我也想要,请高手帮忙
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-27 17:13:52 | 显示全部楼层
8楼的程序完全可以满足要求了啊 而且够灵活
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-27 23:13:44 | 显示全部楼层
我想请问一下,象公布出来的源程序怎么加载呀?我总是加载lisp程序,不知怎么加源程序,想学学
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-11-28 00:26:08 | 显示全部楼层
最初由 madman 发布
[B]更改后的程序:
[PHP];;; 将所选物体的层同当前层
(DEFUN C:OTO ()
  (princ "\n<将所选物体的层同所选物体层或当前层>")
  (setq ss (ssget))
  (if (and
        ss
        (> (sslength ss) 0)
      )
    (progn
... [/B]

你的程序我试过了,可以,但是有点麻烦!
你加入了一个我不需要的功能!
我其实想要的就是执行命令后只要点一下物体,此物体就在当前层就可以了,你的是要回车多次才可以!麻烦了点!
不过还是谢谢你啊!!3Q
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-22 04:15 , Processed in 0.222320 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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