找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1335|回复: 5

[求助] [求助]:如何实现多块的选择插入

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

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

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

×
我是一个新手,对CAD编程不太熟悉,主要从事制图方面的工作,在实际制图中总遇到这样一问题:需在个范围内插入多个或1个所需的块,每次所需块可能相同也可能不同,如何用程序实现在确定所插入块的数量时,在弹出面板上选择所需插入的块的名称、行数、列数、行距、列距及与范围边框的距离,并在面板上动态显示不同行数列数时在该范围内的排列情况,确定后自动插入块。
希各位前辈帮一把,不胜感激!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-1-19 06:04:47 | 显示全部楼层

回复: [求助]:如何实现多块的选择插入

最初发表由 xyzjint_cn
[B]我是一个新手,对CAD编程不太熟悉,主要从事制图方面的工作,在实际制图中总遇到这样一问题:需在个范围内插入多个或1个所需的块,每次所需块可能相同也可能不同,如何用程序实现在确定所插入块的数量时,在弹出面板上选择所需插入的块的名称、行数、列数、行距、列距及与范围边框的距离,并在面板上动态显示不同行数列数时在该范围内的排列情况,确定后自动插入块。
希各位前辈帮一把,不胜感激!! [/B]


我可以给你写,你提供个房间的DWG图吧,和你的图块DWG文件,压缩后作为附件传上来。

然后你详细说下,你心目中程序的步骤,如何和ACAD交互,每个步骤的提示,我想不用DCL对话框,那样反而复杂了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-1-19 10:24:34 | 显示全部楼层

上传计算过程及DWG文件

:4
非常感谢版主的回复,现将计算过程DWG文件上传
(我用的是R14)
另外,天正暖通中的方风管绘制是否有单独的程序可供使用

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

使用道具 举报

发表于 2002-1-20 08:36:33 | 显示全部楼层

我也遇到此问题,还不知怎样解决!

我的图形是由一个个bay组成(一个元件组的别称),每一个bay定义成一个块。
我的所有块都是在一个目录里,我在电路图上当我选中一个bay的时候,替换为x bay。或插入时都要浏览,可以在多个块中选择,XD看和你要做的相同么,可否叫我借鉴一下!呵呵
谢谢了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 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中去(象房间名称、面积、体积、换气次数、送风量风口类型、风口数量)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-10-28 11:13:47 | 显示全部楼层
(setq aarr (open "f:\\area.xls" "a"))
(write-line "**********************" aarr)
呵呵,我也是初学着,一个笨办法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 14:42 , Processed in 0.275662 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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