CAD设计论坛

 找回密码
 立即注册
论坛新手常用操作帮助系统等待验证的用户请看获取社区币方法的说明新注册会员必读(必修)
查看: 4699|回复: 7

[开发] 地板辐射供暖加热管的VBA辅助设计

[复制链接]
发表于 2006-4-19 13:33 | 显示全部楼层 |阅读模式
Sample Text# m, a7 ^! P4 \8 K
    介绍了一个用VBA编制的程序,用于AutoCAD绘制低温热水地板辐射供暖加热管的布置图时辅助计算加热管的长度。
$ B, `! k# f+ U1 }: ]    由于低温热水地板辐射供暖具有卫生、舒适、节省空间、便于分户计量等特点,该供暖方式已在北方逐渐普及起来。暖通设计者在绘制工程图时,也需要绘制加热管的布置图。[低温热水地板辐射供暖应用技术规程]第4.3.3条规定:同一热媒集配装置系统各分支路的加热管长度宜尽量接近,并不宜超过120m。而为了保证加热管的寿命,每一个环路中,不应有接头。这就要求设计者在绘制管道布置图时控制加热管的长度。如供货的盘管为100m/盘,则要求设计者在设计环路将每个环路使用的加热管长度都控制在100m以内。既要避免因加热管太短而造成浪费,有要避免加热管超过100m使环路中有接头,以及由于各分支的加热管长度不同而造成的阻力不平衡。" f9 o; O: W/ a& v( L2 p
   一般利用AutoCAD绘图时,先绘制管道环路图再测量管道长度,这就要求设计者要一边绘图一边估计已采用加热管的总长,一旦估计错误则要重新绘图。利用VBA编程技术可以达到控制管道长度的目的。绘图时,先输入管道长度,每画完一条直管道,在AutoCAD的命令行会自动显示剩余长度,避免了绘图的盲目性。下面介绍该程序的编制和应用。
6 C" C* Z; u, ?、编制程序& Z& Z, J* M3 Y1 ?
1)首先在AutoCAD窗口的“工具”选单中打开“宏/VisualBasic编辑器”进入VBA开发环境。
  p$ Q7 s& _; K0 |: U, Z2)在VBA窗口的“视图”选单中选择“代码窗口”项,打开程序代码窗口。再在VBA窗口的“插入”选单中选择“过程”项,在工程中建立新的过程。在“添加过程”对话框设置新过程的名称、类型和范围,此设置名称为jrg,过程类型选择“子程序”,过程范围选择“公共的”。单击“确定”按钮,在代码窗口创建新 过程jrg如下图所示。过程的第一行和结束行自动产生。9 z& D$ h( j% t. Q1 _% O. I) R
8 e9 y0 h* y/ B9 w0 i0 I4 T
6 |: p% R/ B# Y
5 b8 G; C: U; n' [% l
" s$ ?- A5 X, X# Y: ?: X

" y) D) Z, E( W7 I; i3)在程序代码窗口中,Pubilc Sub jrg()和End Sub之间输入程序代码并将其保存到指定位置。控制加热管长度的程序如下:9 e, O' f- j6 Z* {* o
" [8 d  x0 z1 K4 A# d
Public Sub jrg()* F0 |4 P& f; Q, A3 k9 E
Dim startPnt As Variant: s5 V- {- P! |+ f- w2 i
  Dim endPnt As Variant
7 Z+ a7 E" f! c* p$ F& v  e# v  y  Dim aa(0 To 5) As Double! X/ Z1 x3 p# T! X! A
  Dim prompt1 As String2 w, H9 [+ n* N/ O: z
  Dim prompt2 As String) g0 j8 s/ t# G- h  @0 ?3 f* r
  Dim line1 As AcadPolyline5 M) {. M& S2 e9 j. \, o
  Dim distance As Double
. M. u" z0 U' X" N4 {  Dim a As String
- |) @/ T. F( t  Dim b As String
, C& _5 x0 K, y# c0 D  Dim keyWord As String" r; p: a; G5 ?0 X
  Dim pd As Boolean6 ~2 O4 \- Q; H( a- ~  W: l% h
  prompt1 = vbCrLf & "Enter the start point of the line:": }$ h+ c' q4 S- Z2 x
  prompt2 = vbCrLf & "Enter the end point of the line:"
; [, U$ W2 m: Z1 J+ _/ g) L+ p  distance = ThisDrawing.Utility.GetReal(vbCrLf & "Enter an length/mm")6 [# d! S' X; P, p& X( u" N
  scale1 = ThisDrawing.Utility.GetReal(vbCrLf & "Enter an scale:")8 Q' Y( e) J! T3 S. J6 G3 f
  startPnt = ThisDrawing.Utility.GetPoint(, prompt1)
* U# D6 Y) z; ^& `) P  endPnt = ThisDrawing.Utility.GetPoint(startPnt, prompt2)" O6 S6 c& B9 f" s, P/ U" ~/ A
  For i = 1 To 100000' R# K, A& d; L1 D
  aa(0) = startPnt(0); u; ~, Y# B( z
  aa(1) = startPnt(1)  y5 ?) f; N* D1 J- @  _
  aa(2) = startPnt(2)6 ]  B1 l# @. l: T/ F3 _; Q$ ~! D
  aa(3) = endPnt(0)( m, q! R4 T* R
  aa(4) = endPnt(1)/ c7 o! G6 k9 l4 Y7 Z* A
  aa(5) = endPnt(2)
) q+ Q) j6 K; }) y( U8 s  Set line1 = ThisDrawing.ModelSpace.AddPolyline(aa)7 `8 R+ I2 Z! b$ y- d
  Length = Sqr((aa(0) - aa(3)) * (aa(0) - aa(3)) + (aa(1) - aa(4)) * (aa(1) - aa(4)) + (aa(2) - aa(5)) * (aa(2) - aa(5)))
( c( t  Y( V. S2 z; a0 ^+ ~. E% i  distance = distance - Length * scale1
7 K, }# Y1 d3 v4 N  If distance < 0 And (Not pd) Then
- m! Q5 _5 @" o3 }  h = MsgBox("剩余长度小于0,是否退出?", vbYesNo, "警告")
6 O# E4 z7 m$ u7 y' `# x% |, ?) B  If h = vbYes Then8 t& I+ }# r! e0 g  D" v+ P
  GoTo 100
1 H# T6 M. _# D; X: E  Else
, E' o" i* y9 _% b/ U  pd = True" q+ Y2 S! N: e5 d' v
  End If1 H1 s) L3 R5 i" q% d! l0 }. e
  End If$ Y! T8 n6 i9 h
  startPnt = endPnt$ ?8 H' D0 d- q! P$ h( p, ?. m* h
  a = distance / 1000
! X' ~  e  {) ~; g  ^$ A# K3 }  On Error GoTo 100
' |, ~5 s6 R7 t: `. `; {5 m3 |  endPnt = ThisDrawing.Utility.GetPoint(endPnt, "剩余长度" + a + "输入如下一点")
* O# S* y0 |: H$ e/ C  On Error GoTo 100+ g; t8 B7 D1 {/ P
  Next i& I8 v. w& o$ S
100
9 U! Q+ _/ y6 N# u$ |) W: E9 o8 VEnd Sub
( u$ [8 g8 o% @: S( I' }/ e) X; u) \2 使用程序
; a, m8 ]1 w. b: Z( Z% k  M' J  在AutoCAD窗口的“工具”选单中打开“宏/宏”对话框,单击“运行”按钮。则在AutoCAD的命令行出现命令”Enter an Length/mm:“这是程序设计中要求每个环路使用的命令(要求以mm为单位)。如果要求每个环路使用的加热管长度都在100m以下,则输入100000,回车后出现”Enter an scale:“
& i0 H# Q( a- `( D4 P% k即输入100,回车后出现”Enter the start point of the line:“便可以绘制加热管线。' Z& X. a" \6 ?! B
# @+ W, q3 ^7 k
[ 本帖最后由 summerfly2008 于 2006-4-21 19:30 编辑 ]
发表于 2006-4-19 16:54 | 显示全部楼层
继续坚持下去
发表于 2006-4-21 15:06 | 显示全部楼层
楼主怎么没下文了啊我需要编个统计图中所有线段长度的程序
发表于 2008-10-16 14:41 | 显示全部楼层
学习     学习
发表于 2008-10-26 17:53 | 显示全部楼层
谢谢!只可惜!我不会呀!
发表于 2008-10-26 23:08 | 显示全部楼层
不要说会了,我看都看不懂
发表于 2008-10-27 09:21 | 显示全部楼层
这东西对我很有用,尽管已经很古老了,但还谢了!
发表于 2008-11-10 18:48 | 显示全部楼层
楼主此程序里面好像缺点什么东西,! Y4 O5 W/ u4 B% B1 ]
达不到我们设计地暖管时能够知道剩余管的长度,
3 d; V* q3 V" x4 I2 x+ l& x# F/ Y可不可以帮忙再找些这方面的东西。% V$ J- U1 i0 U* t6 }2 Z3 C
谢谢!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于|免责|隐私|版权|广告|联系|手机版|CAD设计论坛

GMT+8, 2026-3-5 02:59

CAD设计论坛,为工程师增加动力。

© 2005-2026 askcad.com. All rights reserved.

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