找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1087|回复: 3

[问题]急救:为什么调用函数会发生:Initializing...AutoLISP stack overflow*Cancel*

[复制链接]
发表于 2002-1-27 18:47:26 | 显示全部楼层 |阅读模式

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

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

×
我自己编写的一个小程序(insertfk下的fk)
我在ACADR14.lsp中加入了如下命令:
(autoload "insertfk" '("fk"))
启动CAD后在命令行中输入:
command:fk
之后出现了以下内容:
Initializing...
Initializing...
Initializing...
Initializing...

(许多条 Initializing...)
Initializing...AutoLISP stack overflow*Cancel*

不知是什么原因引起的。



程序如下:

  1. ;; 版权所有 (C) 2002-1-18   徐跃忠
  2. ;;E-mail:xyzjint_cn@sina.com
  3. ;;   本软件免费可供进行任何用途需求的拷贝、修改及发行, 但请遵循下述原则:
  4. ;;
  5. ;;   1)  上列的版权通告必须出现在每一份拷贝里。
  6. ;;   2)  相关的说明文档也必须载有版权通告及本项许可通告。
  7. ;;
  8. ;;   本软件仅提供作为应用上的参考, 而未声明或隐含任何保证; 对于任何特殊
  9. ;;   用途之适应性, 以及商业销售所隐含作出的保证, 在此一概予以否认。
  10. ;;
  11. ;;
  12. (defun C:fk ()
  13.   (princ "\n")
  14.   (princ "************送风口布置程序************")
  15.   (princ "\n")
  16.   (princ "****版权所有 (C) 2002-1-18  徐跃忠****")
  17.   (princ "\n")
  18.   (princ "*****E-mail:xyzjint_cn@sina.com*****")
  19.   (princ "\n")
  20.   (setq pt1 (getpoint "\n请选择房间的左下角点:")) ;输入房间的左下角点
  21.   (setq pt2 (getpoint "\n请选择房间的右上角点:")) ;输入房间的右上角点
  22.   (setq pt3 (list (nth 0 pt1) (nth 1 pt2)))
  23.                                            ;计算左上角的点
  24.                                         ;(princ "\n")(princ pt3)(princ "\n")
  25.   (setq pt4 (list (nth 0 pt2) (nth 1 pt1)))
  26.                                            ;计算右下角的点
  27.                                         ;(princ pt4)(princ "\n")

  28.   (setq lx (abs (- (nth 0 pt2) (nth 0 pt1)))) ;计算房间长度
  29.   (setq ly (abs (- (nth 1 pt2) (nth 1 pt1)))) ;计算房间宽度

  30.   (setq mj (/ (* lx ly) 1000000))        ;计算房间面积
  31.   (princ "\n")
  32.   (princ "该房间面积为:")
  33.   (princ mj)
  34.   (princ "\n")

  35.   (setq rh (getreal "\n请输入房间层高(/2.5):")) ;输入房间的高度
  36.   (if (= rh nil)
  37.     (setq rh 2.5)
  38.   )

  39.   (setq hc (getreal "\n请输入该房间的换气次数(/25)"))
  40.                                         ;输入该房间的换气次数
  41.   (if (= hc nil)
  42.     (setq hc 25)
  43.   )
  44.   (setq fl (* (* mj rh) hc))                ;计算房间所需风量
  45.   (princ "该房间送风量为:")
  46.   (princ fl)
  47.   (princ "\n")


  48.   (setq pt5x (+ (nth 0 pt1) (/ lx 2.0))) ;房间中点
  49.   (setq pt5y (+ (nth 1 pt1) (/ ly 2.0)))
  50.   (setq pt (list pt5x pt5y))


  51.   (setq mjt (list pt5x (- pt5y 500)))        ;设置房间面积和风量文字的插入点
  52.   (setq flt (list pt5x (- pt5y 1000)))
  53.   (setq mj1 (rtos mj 2 1))                ;打出房间面积和风量
  54.   (setq fl1 (rtos fl 2 1))
  55.   (command "text" "j" "m" flt 0 fl1)
  56.   (command "text" "j" "m" mjt 0 mj1)
  57.   (princ)

  58.   (setq one "n")
  59.   (if (< fl 490)
  60.     (progn
  61.       (command "insert" "高效送风口GKF-05A" pt 1 1 0)
  62.       (setq one "Y")
  63.       (setq hs 1)
  64.       (setq ls 1)
  65.     )
  66.   )
  67.   (if (and (>= fl 490) (< fl 1000))
  68.     (progn
  69.       (command "insert" "高效送风口GKF-10A" pt 1 1 0)
  70.       (setq one "Y")
  71.       (setq hs 1)
  72.       (setq ls 1)
  73.     )
  74.   )

  75.   (princ)
  76.   (setq key1 "y")
  77.   (while (= key1 "y")
  78.     (if        (= one "n")
  79.       (progn
  80.         (princ "该房间送风量为:")
  81.         (princ fl)
  82.         (princ "\n")
  83.         (setq hs (getint "\n请输入风口行数(/1):")) ;输入行数和列数
  84.         (if (= hs nil)
  85.           (setq hs 1)
  86.         )

  87.         (setq ls (getint "\n请输入风口列数(/1):"))
  88.         (if (= ls nil)
  89.           (setq ls 1)
  90.         )

  91.         (princ "\n该房间长度为:")
  92.         (princ lx)                        ;显示房间长度和宽度
  93.         (princ "\n该房间宽度为:")
  94.         (princ ly)

  95.         (setq key "y")
  96.         (while (= key "y")
  97.           (setq        b1 0
  98.                 b2 0
  99.           )
  100.           (if (/= hs 1)
  101.             (setq b1 (getint "\n请输入风口行距(/0):"))
  102.           )

  103.           (setq b2 (/ (- ly (* b1 (1- hs))) 2)) ;计算出风口行边距     
  104.           (princ "\n该房间风口行边距为:")
  105.           (princ b2)                        ;显示风口行边距        
  106.           (if (/= ls 1)
  107.             (setq a1 (getint "\n请输入风口列距(/0):"))
  108.           )


  109.           (setq a2 (/ (- lx (* a1 (1- ls))) 2)) ;计算出风口列边距
  110.           (princ "\n该房间风口列边距为:")
  111.           (princ a2)                        ;显示风口列边距        

  112.           (initget "y n")
  113.           (setq key (getkword "\n需修改风口行、列距吗?(yes or no)"))

  114.           (if (= key nil)
  115.             (setq key "no")
  116.           )


  117.         )

  118.         (setq hss hs)
  119.         (setq ent (ssadd))
  120.         (while (/= hss 0)
  121.           (setq lss ls)
  122.           (while (/= lss 0)
  123.             (progn
  124.               (setq ptx (+ (nth 0 pt1) (+ a2 (* a1 (- ls lss)))))
  125.               (setq pty (+ (nth 1 pt1) (+ b2 (* b1 (- hs hss)))))
  126.               (setq pt (list ptx pty))
  127.               (setq lss (1- lss))
  128.               (command "insert" "高效送风口GKF-10A" pt 1 1 0)
  129.               (setq ent1 (entlast))
  130.               (ssadd ent1 ent)
  131.               (princ)
  132.             )
  133.           )
  134.           (setq hss (1- hss))
  135.         )
  136.       )
  137.     )
  138.     (initget "y n")
  139.     (setq key1 (getkword "\n需重新排列风口吗?(yes or no)"))

  140.     (if        (= key1 nil)
  141.       (setq key1 "no")
  142.     )
  143.     (if        (= key1 "y")
  144.       (progn
  145.         (princ "\n请选择需删除的风口:")
  146. ;        (setq ent (ssget))

  147.         (if (= ent1 nil)
  148.           (setq key1 "no")
  149.         )
  150.         (if (= key1 "Yes")
  151.           (command "erase" ent1 "")
  152.         )
  153.       )

  154.     )
  155.   )
  156.   (setq fkn (* hs ls))
  157.   (setq fkfl (/ fl fkn))
  158.   (princ "\n该房间风口数量为:")
  159.   (princ fkn)
  160.   (princ "只")
  161.   (princ "\n单个风口送风量为:")
  162.   (princ fkfl)
  163.   (princ "立方米/小时")
  164.   (princ)
  165. )


在循环插入块时将插入的块加入选择集,在需重新布置风口时,将先前插入的块删除,开始重新插入风口。但此步骤不起作用,不知如何更改?
(此程序必须调用(上次我问插入多块问题时上传的文件中的块)
刚接触VLISP编程,见笑了
请XD大侠检查一下我的程序,是否有办法完善一下。


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

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-1-27 21:21:36 | 显示全部楼层

Re: [问题]急救:为什么调用函数会发生:Initializing...AutoLISP stack overflow*Cancel*

最初由 xyzjint_cn 发布
[B]我自己编写的一个小程序(insertfk下的fk)
我在ACADR14.lsp中加入了如下命令:
(autoload "insertfk" '("fk"))
启动CAD后在命令行中输入:
command:fk
之后出现了以下内容:
Initializing...
Initializing...
... [/B]



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

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2002-2-1 16:02:08 | 显示全部楼层

重新布置风口时删除风口已解决

在插入风口后,如需重新排列风口,先将先前插入的块删除,再继续输入数据.
下面程序解决此问题:
code:   
    (initget "y n")
    (setq key1 (getkword "\n需重新排列风口吗?(yes or no)"))

    (if        (= key1 nil)
      (setq key1 "n")
    )
    (if        (= key1 "y")
      (progn
        (setq pdx (+ (nth 0 pt1) (+ a2)))
        (setq pdy (+ (nth 1 pt1) (+ b2)))
        (setq pd (list pdx pdy))
        (setq blk "高效送风口GKF-10A")
        (setq ent (ssget "c" pt pd (list (cons 2 blk))))
        (command "erase" ent "")
      )
    )
此程序确定左下角和右上角风口的插入点,
根据插入点利用选择集进行风口的过滤删除。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-5 02:59 , Processed in 0.502537 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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