找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1710|回复: 12

[求助] 请帮忙修改这个程序

[复制链接]

已领礼包: 109个

财富等级: 日进斗金

发表于 2014-12-2 16:41:56 | 显示全部楼层 |阅读模式

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

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

×
(defun c:h11 ()
  (setq v1(getvar "osmode")) ;获取当前的目标捕捉类型,将其赋给变量v1
  (setq v2(getvar "cmdecho")) ;获取当前的普通命令提示状态,将其赋给变量v2
  (setq v3 (getvar "clayer")) ;获取当前的图层,将其赋给变量v3
  (setvar "osmode" 0) ;关闭目标捕捉状态
  (setvar "cmdecho" 0) ;不显示普通命令的提示
  (command "layer" "m" "剖面线" "") ;设置当前图层为剖面线
  (command "bhatch" "p" "line" 1 45 "s" "") ;填充
  (setvar "osmode" v1) ;恢复目标捕捉的原来状态
  (setvar "cmdecho" v2) ;恢复普通命令提示原来的显示状态
  (setvar "clayer" v3) ;恢复图层
  (princ)
)

请问这个程序问题出现在哪里,为什么我用任意图层画完图后用h11命令进行填充,完成填充不能返回原来的图层?

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2014-12-2 17:01:46 | 显示全部楼层
(command "bhatch" "p" "line" 1 45 "s" "") 不完整,程序到这里中断了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 109个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-2 17:05:19 | 显示全部楼层
看你用了S,本意要选实体后填充,那么按下面改,先构建选择集,然后给BHATCH,程序里面用了个技巧,晓东通用函数库里有,这里直接拿来用了,就是命令激活时候,你不知道输入几个回车的时候就用循环做。

  1. (defun c:h11 ()
  2.   (setq v1 (getvar "osmode"))               ; 获取当前的目标捕捉类型,将其赋给变?
  3.                                        ; 縱1
  4.   (setq v2 (getvar "cmdecho"))               ; 获取当前的普通命令提示状态,将其赋?
  5.                                        ; ?淞縱2
  6.   (setq v3 (getvar "clayer"))               ; 获取当前的图层,将其赋给变量v3
  7.   (setvar "osmode" 0)                       ; 关闭目标捕捉状态
  8.   (setvar "cmdecho" 0)                       ; 不显示普通命令的提示
  9.   (command "layer" "m" "剖面线" "")    ; 设置当前图层为剖面线
  10.   (if (setq ss (ssget))
  11.     (progn
  12.       (command "bhatch" "p" "line" 1 45 "s" ss) ; 填充
  13.       (while (= (getvar "cmdactive") 1)
  14.         (command "")
  15.       )
  16.     )
  17.   )
  18.   (setvar "osmode" v1)                       ; 恢复目标捕捉的原来状态
  19.   (setvar "cmdecho" v2)                       ; 恢复普通命令提示原来的显示状态
  20.   (setvar "clayer" v3)                       ; 恢复图层
  21.   (princ)
  22. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-2 17:08:07 | 显示全部楼层
(while (= (getvar "cmdactive") 1)
        (command "")
)

这句的意思就是BHATCH命令里面,给S参数后,不管后面需要多少个回车,只要命令一直在激活状态,就循环回车,直到命令结束。

如果命令后面是需要输入Y的,你就把""改成Y。

点评

谢谢你的修改,但你这个程序为什么变成选择对象填充而不是点内部点来填充的?  详情 回复 发表于 2014-12-2 17:19
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 109个

财富等级: 日进斗金

 楼主| 发表于 2014-12-2 17:19:56 | 显示全部楼层
newer 发表于 2014-12-2 17:08
(while (= (getvar "cmdactive") 1)
        (command "")
)

谢谢你的修改,但你这个程序为什么变成选择对象填充而不是点内部点来填充的?

点评

你要想用拾取点,就下面这样改,你也可以把上面和下面的结合,选物体和拾取点都有,这个你结合代码自己改。  详情 回复 发表于 2014-12-2 17:24
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-2 17:24:59 | 显示全部楼层
lch8526 发表于 2014-12-2 17:19
谢谢你的修改,但你这个程序为什么变成选择对象填充而不是点内部点来填充的?

你要想用拾取点,就下面这样改,你也可以把上面和下面的结合,选物体和拾取点都有,这个你结合代码自己改。

  1. (defun c:h11 ()
  2.   (setq v1 (getvar "osmode"))               ; 获取当前的目标捕捉类型,将其赋给变?
  3.                                        ; 縱1
  4.   (setq v2 (getvar "cmdecho"))               ; 获取当前的普通命令提示状态,将其赋?
  5.                                        ; ?淞縱2
  6.   (setq v3 (getvar "clayer"))               ; 获取当前的图层,将其赋给变量v3
  7.   (setvar "osmode" 0)                       ; 关闭目标捕捉状态
  8.   (setvar "cmdecho" 0)                       ; 不显示普通命令的提示
  9.   (command "layer" "m" "剖面线" "")    ; 设置当前图层为剖面线
  10.   (if (setq pt (getpoint "\n拾取内部点<退出:>"))
  11.     (progn
  12.       (command "bhatch" "p" "line" 1 45  pt) ; 填充
  13.       (while (= (getvar "cmdactive") 1)
  14.         (command "")
  15.       )
  16.     )
  17.   )
  18.   (setvar "osmode" v1)                       ; 恢复目标捕捉的原来状态
  19.   (setvar "cmdecho" v2)                       ; 恢复普通命令提示原来的显示状态
  20.   (setvar "clayer" v3)                       ; 恢复图层
  21.   (princ)
  22. )


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

使用道具 举报

已领礼包: 109个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-2 17:31:02 | 显示全部楼层
帮你修改成最终的吧,下面代码可以选点也可以选边界
  1. (defun c:h11 ()
  2.   (setq v1 (getvar "osmode"))               ; 获取当前的目标捕捉类型,将其赋给变?
  3.                                        ; 縱1
  4.   (setq v2 (getvar "cmdecho"))               ; 获取当前的普通命令提示状态,将其赋?
  5.                                        ; ?淞縱2
  6.   (setq v3 (getvar "clayer"))               ; 获取当前的图层,将其赋给变量v3
  7.   (setvar "osmode" 0)                       ; 关闭目标捕捉状态
  8.   (setvar "cmdecho" 0)                       ; 不显示普通命令的提示
  9.   (command "layer" "m" "剖面线" "")    ; 设置当前图层为剖面线
  10.   (if (or (setq pt (getpoint "\n拾取内部点<选择边界>:"))
  11.           (progn
  12.              (prompt "\n选取边界<退出>:")
  13.              (setq pt (ssget))
  14.           )
  15.       )
  16.     (progn
  17.       (if (= (type pt) 'LIST)
  18.         (command "bhatch" "p" "line" 1 45 pt ) ; 填充
  19.         (command "bhatch" "p" "line" 1 45 "s" pt ) ; 填充
  20.       )
  21.       (while (= (getvar "cmdactive") 1)
  22.         (command "")
  23.       )
  24.     )
  25.   )
  26.   (setvar "osmode" v1)                       ; 恢复目标捕捉的原来状态
  27.   (setvar "cmdecho" v2)                       ; 恢复普通命令提示原来的显示状态
  28.   (setvar "clayer" v3)                       ; 恢复图层
  29.   (princ)
  30. )

点评

这个程序只能用拾取内部点,不能选择边界的,而且拾取内部点只能选择一个内部点不能选择多个内部点  详情 回复 发表于 2014-12-2 17:54
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 109个

财富等级: 日进斗金

 楼主| 发表于 2014-12-2 17:48:40 | 显示全部楼层
最后的程序只能用拾取内部点,不能选择边界的,而且拾取内部点只能选择一个内部点不能选择多个内部点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 109个

财富等级: 日进斗金

 楼主| 发表于 2014-12-2 17:54:51 | 显示全部楼层
newer 发表于 2014-12-2 17:31
帮你修改成最终的吧,下面代码可以选点也可以选边界

这个程序只能用拾取内部点,不能选择边界的,而且拾取内部点只能选择一个内部点不能选择多个内部点

点评

最后那个程序,你取点的时候回车,就是选边界了,如果你想循环取点,你把 IF 改成WHILE就循环了。  详情 回复 发表于 2014-12-2 18:16
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-2 18:16:55 | 显示全部楼层
lch8526 发表于 2014-12-2 17:54
这个程序只能用拾取内部点,不能选择边界的,而且拾取内部点只能选择一个内部点不能选择多个内部点

最后那个程序,你取点的时候回车,就是选边界了,如果你想循环取点,你把 IF 改成WHILE就循环了。

点评

你好,拾取内部点时把IF改成WHILE后,拾取多个内部点不能变成一个整体,请问要怎样改?  详情 回复 发表于 2014-12-3 11:28
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 109个

财富等级: 日进斗金

 楼主| 发表于 2014-12-3 11:28:49 | 显示全部楼层
newer 发表于 2014-12-2 18:16
最后那个程序,你取点的时候回车,就是选边界了,如果你想循环取点,你把 IF 改成WHILE就循环了。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 05:17 , Processed in 0.467870 second(s), 64 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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