找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1363|回复: 9

[求助] [LISP程序]:求助高手一个问题。

[复制链接]
发表于 2007-3-16 17:41:06 | 显示全部楼层 |阅读模式

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

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

×
(DEFUN c:malay (/ sst)
(mla txt co1)
;(mla函数存在)
;到了这里还是可以执行的
;为何下面这段程序执行不了?
;....
(setq
sst (ssget "X" '((0 . "*TEXT")))
;...
)
(if sst (command "chprop" sst "" "la" TXT "")))
;....
)

命令: !txt "11"
命令: !co1
1
命令: !SST nil
为何选择集变成NIL了呢?
单独操作又可以呢:
命令: (setq
(_> sst (ssget "X" '((0 . "*TEXT")))
(_> ;...
(_> )
<Selection set: 62>

命令: (if sst (command "chprop" sst "" "la" TXT "")))
nil
nil
nil
nil
nil
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-3-16 19:07:57 | 显示全部楼层
能否帖出全部?
单单那个选集的操作可以进行的,或者你重新开cad运行一次可以通过。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-17 08:29:13 | 显示全部楼层
下面是原文件,请指教一下:
(defun MLA  (layname laycolor)
(SETVAR "CMDECHO" 0)
(setq acadobject1   (vlax-get-acad-object)
       acaddocument1 (vla-get-activedocument acadobject1)
       mspace1         (vla-get-modelspace acaddocument1))
(setq LayerSel (vla-get-Layers AcadDocument1))
(setq LayerObj (vla-add LayerSel layname))
(if (/= nil (tblsearch "layer" layname))
  (progn
     (vla-put-activelayer AcadDocument1 LayerObj)
     (if (/= nil laycolor)
      (vla-put-color LayerObj laycolor)))
  (progn
     (vla-get-activelayer AcadDocument1 LayerObj)
     (if (/= nil laycolor)
      (vla-put-color LayerObj laycolor)))))
(defun GG ()
(setq dcl_id (load_dialog "tcgz.dcl"))
(new_dialog "tcgz" dcl_id)
(if (= txt nil)
      (set_tile "txt" "TEXT")
      (set_tile "txt" txt))
(if (= dim nil)
      (set_tile "dim" "DIM")
      (set_tile "dim" dim))
(if (= txtcolor nil)
      (set_tile "txtcolor" "3")
      (set_tile "txtcolor" txtcolor))
(if (= dimcolor nil)
      (set_tile "dimcolor" "6")
      (set_tile "dimcolor" dimcolor))
(action_tile "txt" "(setq txt $value)")
(action_tile "dim" "(setq dim $value)")
(action_tile "txtcolor" "(setq txtcolor $value)")
(action_tile "dimcolor" "(setq dimcolor $value)")
(action_tile "cancel" "(done_dialog 0)")
(action_tile "accept" "(get_w)(done_dialog 1)")
(setq next (start_dialog))
(cond
((= next 01)(c:malay))
))
(defun get_w()
   (setq txt (get_tile "txt"))
   (setq dim (get_tile "dim"))
   (setq txtcolor (get_tile "txtcolor"))
   (setq dimcolor (get_tile "dimcolor"))
)
(defun DIY ()
      (setq txt "TEXT")
      (setq dim "DIM")
      (setq txtcolor "3")
      (setq dimcolor "6")
(GG)
)
(DEFUN c:malay (/ sst ssd ssl ssh ssx sss sxs xxx ssp)
;(setq img1 img11)
(mla txt txtcolor)
(mla dim dimcolor)
;以上的操作都能正常运行,但到了下面归类图层就不行了,帮我看看,还有就是默认值是怎么输入对话框的?(即:如果key="txt"的值不是"TEXT",我怎样把"txt"的值改成"TEXT"?)
(setq
sst (ssget "X" '((0 . "*TEXT")))
ssd (ssget "X" '((0 . "DIMENSION")))
)
(if sst (command "chprop" sst "" "la" txt ""))
(if ssd (command "chprop" ssd "" "la" dim ""))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-3-17 15:08:46 | 显示全部楼层
为便于讨论,将楼主的代码整理后放于下:

  1. ;;===================================================
  2. (vl-load-com)
  3. ;;===================================================
  4. (defun MLA (layname laycolor)
  5.   (SETVAR "CMDECHO" 0)
  6.   (setq        acadobject1   (vlax-get-acad-object)
  7.         acaddocument1 (vla-get-activedocument acadobject1)
  8.         mspace1              (vla-get-modelspace acaddocument1)
  9.   )
  10.   (setq LayerSel (vla-get-Layers AcadDocument1))
  11.   (setq LayerObj (vla-add LayerSel layname))
  12.   (if (/= nil (tblsearch "layer" layname))
  13.     (progn
  14.       (vla-put-activelayer AcadDocument1 LayerObj)
  15.       (if (/= nil laycolor)
  16.         (vla-put-color LayerObj laycolor)
  17.       )
  18.     )
  19.     (progn
  20.       (vla-get-activelayer AcadDocument1 LayerObj)
  21.       (if (/= nil laycolor)
  22.         (vla-put-color LayerObj laycolor)
  23.       )
  24.     )
  25.   )
  26. )
  27. ;;===================================================
  28. (defun GG ()
  29.   (setq dcl_id (load_dialog "tcgz.dcl"))
  30.   (new_dialog "tcgz" dcl_id)
  31.   (if (= txt nil)
  32.     (set_tile "txt" "TEXT")
  33.     (set_tile "txt" txt)
  34.   )
  35.   (if (= dim nil)
  36.     (set_tile "dim" "DIM")
  37.     (set_tile "dim" dim)
  38.   )
  39.   (if (= txtcolor nil)
  40.     (set_tile "txtcolor" "3")
  41.     (set_tile "txtcolor" txtcolor)
  42.   )
  43.   (if (= dimcolor nil)
  44.     (set_tile "dimcolor" "6")
  45.     (set_tile "dimcolor" dimcolor)
  46.   )
  47.   (action_tile "txt" "(setq txt $value)")
  48.   (action_tile "dim" "(setq dim $value)")
  49.   (action_tile "txtcolor" "(setq txtcolor $value)")
  50.   (action_tile "dimcolor" "(setq dimcolor $value)")
  51.   (action_tile "cancel" "(done_dialog 0)")
  52.   (action_tile "accept" "(get_w)(done_dialog 1)")
  53.   (setq next (start_dialog))
  54.   (cond
  55.     ((= next 01) (c:malay))
  56.   )
  57. )
  58. ;;===================================================
  59. (defun get_w ()
  60.   (setq txt (get_tile "txt"))
  61.   (setq dim (get_tile "dim"))
  62.   (setq txtcolor (get_tile "txtcolor"))
  63.   (setq dimcolor (get_tile "dimcolor"))
  64. )
  65. ;;===================================================
  66. (defun DIY ()
  67.   (setq txt "TEXT")
  68.   (setq dim "DIM")
  69.   (setq txtcolor "3")
  70.   (setq dimcolor "6")
  71.   (GG)
  72. )
  73. ;;===================================================
  74. (DEFUN c:malay (/ sst ssd ssl ssh ssx sss sxs xxx ssp)
  75.                                         ;(setq img1 img11)
  76.   (mla txt txtcolor)
  77.   (mla dim dimcolor)
  78.   (setq
  79.     sst        (ssget "X" '((0 . "*TEXT")))
  80.     ssd        (ssget "X" '((0 . "DIMENSION")))
  81.   )
  82.   (if sst
  83.     (command "chprop" sst "" "la" txt "")
  84.   )
  85.   (if ssd
  86.     (command "chprop" ssd "" "la" dim "")
  87.   )
  88. )
  89. ;;===================================================

首先从主函数malay开始看起,
[PHP]
  (mla txt txtcolor)
  (mla dim dimcolor)
[/PHP]
这两句中有四个变量,不知从何而来,希望楼主能本着坦诚交流的心态将完整部分拿出来,以便进一步的讨论。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-17 15:44:08 | 显示全部楼层
不是从这里来的吗?:
(defun get_w ()
  (setq txt (get_tile "txt"))
  (setq dim (get_tile "dim")))
贴出来的已经是完整的了,只是还有一个对话框,我就是不知道错在哪里或是少了些什么,所以才请教你们,希望能帮我解决
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-3-17 17:45:56 | 显示全部楼层
楼主的这一堆代码运行顺序是什么?也就是说以哪一个开始引发?
这样才好从前向后排查。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-3-18 11:08:15 | 显示全部楼层
先测试下改改变量名称,再查查每个子函数的变量是否都定义为局部变量。
俺经常遇到这样的问题。
另外全局变量尽量长一点,特别一点,要不很容易和别的变量重复,产生意外的变化。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-3-18 22:48:44 | 显示全部楼层
粗粗阅览源码:
1、楼主的程序根本不能调用对话框,若DIY是初始化,则:
(DEFUN c:malay (/ sst ssd ssl ssh ssx sss sxs xxx ssp)
  (vl-load-com)
  (DIY);_此行增加后,程序可运行,且无需对话框
  ;;(setq img1 img11)
  (mla txt txtcolor)
  (mla dim dimcolor)
  ......
2、楼主本意是要建立两个层,对话框(我也没见对话框源文件)中的确定按钮,将是个无穷循环(点“取消”可以退出;
3、对话框加载后最好能检查是否成功。



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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 16:28 , Processed in 0.429219 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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