- UID
- 1210
- 积分
- 174
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-1-18
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2002-1-28 19:38:43
|
显示全部楼层
上传程序
程序如下:
(就是上次我问的插入多块的问题),让XD大侠见笑了,我刚接触VLISP编程。---此程序可是我在一个一个命令试过之后才组合起来的
在VLISP中调用FK命令没有问题让CAD在CADR14。LSP自动加载就出现我在上面提到的问题。
(
我在ACADR14.lsp中加入了如下命令:
(autoload "insertfk" '("fk"))
启动CAD后在命令行中输入:
commandk
之后出现了以下内容:
Initializing...
Initializing...
Initializing...
Initializing...
(许多条 Initializing...)
Initializing...AutoLISP stack overflow*Cancel*
不知是什么原因引起的。
)
此程序必须调用上次我在[多块插入程序]中上传的DWG文件中的块。
在程序中有一步骤:循环插入(高效送风口GKF-10A)时将插入的块加入选择集以便在重新布置风口时,将循环中插入的块通过选择集进行删除并开始重新输入行数、列数、行距、列距进行插入高效送风口。
(此步骤不能将风口删除,只是重新开始插入风口)不知如何改动。
;; 版权所有 (C) 2002-1-18 徐跃忠
;;E-mail:xyzjint_cn@sina.com
;; 本软件免费可供进行任何用途需求的拷贝、修改及发行, 但请遵循下述原则:
;;
;; 1) 上列的版权通告必须出现在每一份拷贝里。
;; 2) 相关的说明文档也必须载有版权通告及本项许可通告。
;;
;; 本软件仅提供作为应用上的参考, 而未声明或隐含任何保证; 对于任何特殊
;; 用途之适应性, 以及商业销售所隐含作出的保证, 在此一概予以否认。
;;
;;
(defun C:fk ()
(princ "\n")
(princ "************送风口布置程序************")
(princ "\n")
(princ "****版权所有 (C) 2002-1-18 徐跃忠****")
(princ "\n")
(princ "*****E-mail:xyzjint_cn@sina.com*****")
(princ "\n")
(setq pt1 (getpoint "\n请选择房间的左下角点:")) ;输入房间的左下角点
(setq pt2 (getpoint "\n请选择房间的右上角点:")) ;输入房间的右上角点
(setq pt3 (list (nth 0 pt1) (nth 1 pt2)))
;计算左上角的点
;(princ "\n")(princ pt3)(princ "\n")
(setq pt4 (list (nth 0 pt2) (nth 1 pt1)))
;计算右下角的点
;(princ pt4)(princ "\n")
(setq lx (abs (- (nth 0 pt2) (nth 0 pt1)))) ;计算房间长度
(setq ly (abs (- (nth 1 pt2) (nth 1 pt1)))) ;计算房间宽度
(setq mj (/ (* lx ly) 1000000)) ;计算房间面积
(princ "\n")
(princ "该房间面积为:")
(princ mj)
(princ "\n")
(setq rh (getreal "\n请输入房间层高(/2.5):")) ;输入房间的高度
(if (= rh nil)
(setq rh 2.5)
)
(setq hc (getreal "\n请输入该房间的换气次数(/25)"))
;输入该房间的换气次数
(if (= hc nil)
(setq hc 25)
)
(setq fl (* (* mj rh) hc)) ;计算房间所需风量
(princ "该房间送风量为:")
(princ fl)
(princ "\n")
(setq pt5x (+ (nth 0 pt1) (/ lx 2.0))) ;房间中点
(setq pt5y (+ (nth 1 pt1) (/ ly 2.0)))
(setq pt (list pt5x pt5y))
(setq mjt (list pt5x (- pt5y 500))) ;设置房间面积和风量文字的插入点
(setq flt (list pt5x (- pt5y 1000)))
(setq mj1 (rtos mj 2 1)) ;打出房间面积和风量
(setq fl1 (rtos fl 2 1))
(command "text" "j" "m" flt 0 fl1)
(command "text" "j" "m" mjt 0 mj1)
(princ)
(setq one "n")
(if (< fl 490)
(progn
(command "insert" "高效送风口GKF-05A" pt 1 1 0)
(setq one "Y")
(setq hs 1)
(setq ls 1)
)
)
(if (and (>= fl 490) (< fl 1000))
(progn
(command "insert" "高效送风口GKF-10A" pt 1 1 0)
(setq one "Y")
(setq hs 1)
(setq ls 1)
)
)
(princ)
(setq key1 "y")
(while (= key1 "y")
(if (= one "n")
(progn
(princ "该房间送风量为:")
(princ fl)
(princ "\n")
(setq hs (getint "\n请输入风口行数(/1):")) ;输入行数和列数
(if (= hs nil)
(setq hs 1)
)
(setq ls (getint "\n请输入风口列数(/1):"))
(if (= ls nil)
(setq ls 1)
)
(princ "\n该房间长度为:")
(princ lx) ;显示房间长度和宽度
(princ "\n该房间宽度为:")
(princ ly)
(setq key "y")
(while (= key "y")
(setq b1 0
b2 0
)
(if (/= hs 1)
(setq b1 (getint "\n请输入风口行距(/0):"))
)
(setq b2 (/ (- ly (* b1 (1- hs))) 2)) ;计算出风口行边距
(princ "\n该房间风口行边距为:")
(princ b2) ;显示风口行边距
(if (/= ls 1)
(setq a1 (getint "\n请输入风口列距(/0):"))
)
(setq a2 (/ (- lx (* a1 (1- ls))) 2)) ;计算出风口列边距
(princ "\n该房间风口列边距为:")
(princ a2) ;显示风口列边距
(initget "y n")
(setq key (getkword "\n需修改风口行、列距吗?(yes or no)"))
(if (= key nil)
(setq key "no")
)
)
(setq hss hs)
(setq ent (ssadd))
(while (/= hss 0)
(setq lss ls)
(while (/= lss 0)
(progn
(setq ptx (+ (nth 0 pt1) (+ a2 (* a1 (- ls lss)))))
(setq pty (+ (nth 1 pt1) (+ b2 (* b1 (- hs hss)))))
(setq pt (list ptx pty))
(setq lss (1- lss))
(command "insert" "高效送风口GKF-10A" pt 1 1 0)
(setq ent1 (entlast))
(ssadd ent1 ent)
(princ)
)
)
(setq hss (1- hss))
)
)
)
(initget "y n")
(setq key1 (getkword "\n需重新排列风口吗?(yes or no)"))
(if (= key1 nil)
(setq key1 "no")
)
(if (= key1 "y")
(progn
; (princ "\n请选择需删除的风口:")
; (setq ent (ssget))
(if (= ent1 nil)
(setq key1 "no")
)
(if (= key1 "Yes")
(command "erase" ent1 "")
)
)
)
)
(setq fkn (* hs ls))
(setq fkfl (/ fl fkn))
(princ "\n该房间风口数量为:")
(princ fkn)
(princ "只")
(princ "\n单个风口送风量为:")
(princ fkfl)
(princ "立方米/小时")
(princ)
)
最后问一下怎样编程才能将每次点取房间的信息输出到EXCEL中去(象房间名称、面积、体积、换气次数、送风量风口类型、风口数量) |
|