田草博客

互联网田草博客


网友交流QQ群:11740834 需注明申请加入原因

微信 公众号:ByCAD

邮箱:tiancao1001x126.com
ByCAD,微信公众号
首页 | 普通 | 电脑 | AutoCAD | VB/VB.NET | FLash | 结构 | 建筑 | 电影 | BIM | 规范 | 软件 | ID
-随机-|-分布-
-博客论坛-|-﨣﨤﨧﨨-
-网站导航-|-规范下载-
-BelovedFLash欣赏-

用户登陆
用户:
密码:
 

站点日历
73 2024 - 11 48
     12
3456789
10111213141516
17181920212223
24252627282930


站点统计

最新评论



vba加载lisp路径问题。 CAD VBA实现橡皮筋直线、圆
未知 VBA绘制窗线、墙线   [ 日期:2007-07-22 ]   [ 来自:本站原创 ]  HTML
VBA绘制窗线、墙线


'*********************************************************************************************
'绘制窗线*************************************************绘制窗线******************************
'
Sub ChuangXian()
    On Error Resume Next
    Dim W As Long
    W = ThisDrawing.Utility.GetDistance(, "输入窗棂的宽度(240):")
    '错误检查
    If Err.Number = -2147352567 Then                                    '用户按下Esc键,则退出.
        Err.Clear
        Exit Sub
    ElseIf Err Then                                                     '如果用户按下 enter 按钮或者输入有误,使用默认值
        W = 240
        Err.Clear
    End If
    Dim P1 As Variant
    Dim P2 As Variant
    Dim PList() As Double
    Dim N As Long
    Dim Elist() As AcadEntity
    ReDim Preserve Elist(0)
    
    P1 = ThisDrawing.Utility.GetPoint(, "指定点:")
xNext:

    P2 = ThisDrawing.Utility.GetPoint(P1, "指定下一点:")
     
    N = N + 2
    ReDim Preserve PList(N * 2 - 1)
    PList(N * 2 - 4) = P1(0):    PList(N * 2 - 3) = P1(1):   PList(N * 2 - 2) = P2(0):    PList(N * 2 - 1) = P2(1):
    
    Dim L0 As AcadLine
    Dim L As AcadLine
    Dim A As Double
    Set L0 = ThisDrawing.ModelSpace.AddLine(P1, P2)
    '将L0添加到Elist数组中,以便于删除
    ReDim Preserve Elist(UBound(Elist) + 1)
    Set Elist(UBound(Elist)) = L0
    
    A = L0.angle
    L0.color = acRed
    Dim Ps As Variant
    Dim Pe As Variant
    Ps = GetPointAR(P1, A + Atn(1) * 2, W / 2)
    Pe = GetPointAR(P2, A + Atn(1) * 2, W / 2)
    Set L = ThisDrawing.ModelSpace.AddLine(Ps, Pe)
    ReDim Preserve Elist(UBound(Elist) + 1)
    Set Elist(UBound(Elist)) = L
    
    Ps = GetPointAR(P1, A + Atn(1) * 2, W / 6)
    Pe = GetPointAR(P2, A + Atn(1) * 2, W / 6)
    Set L = ThisDrawing.ModelSpace.AddLine(Ps, Pe)
    ReDim Preserve Elist(UBound(Elist) + 1)
    Set Elist(UBound(Elist)) = L
    
    Ps = GetPointAR(P1, A - Atn(1) * 2, W / 2)
    Pe = GetPointAR(P2, A - Atn(1) * 2, W / 2)
    Set L = ThisDrawing.ModelSpace.AddLine(Ps, Pe)
    ReDim Preserve Elist(UBound(Elist) + 1)
    Set Elist(UBound(Elist)) = L
    
    Ps = GetPointAR(P1, A - Atn(1) * 2, W / 6)
    Pe = GetPointAR(P2, A - Atn(1) * 2, W / 6)
    Set L = ThisDrawing.ModelSpace.AddLine(Ps, Pe)
    ReDim Preserve Elist(UBound(Elist) + 1)
    Set Elist(UBound(Elist)) = L
    
    P1 = P2
    If Err Then
        GoTo D
    Else
        GoTo xNext
    End If
D:
    '删除无用的线段
    Dim i  As Long
    Prompt Str(UBound(Elist))
    For i = 0 To UBound(Elist)
        Elist(i).Delete
    Next i
    '从新绘制墙线 (多段线)
    Dim PL As AcadLWPolyline
    Set PL = ThisDrawing.ModelSpace.AddLightWeightPolyline(PList)
    PL.offset W / 2
    PL.offset W / 6
    PL.offset -W / 2
    PL.offset -W / 6
    PL.Delete
End Sub
'**********************************************************************************************


'*********************************************************************************************
'绘制墙线*************************************************绘制墙线******************************
'
Sub QiangXian()
    On Error Resume Next
    Dim W As Long
    W = ThisDrawing.Utility.GetDistance(, "输入墙的宽度(240):")
    '错误检查
    If Err.Number = -2147352567 Then                                    '用户按下Esc键,则退出.
        Err.Clear
        Exit Sub
    ElseIf Err Then                                                     '如果用户按下 enter 按钮或者输入有误,使用默认值
        W = 240
        Err.Clear
    End If
    Dim P1 As Variant
    Dim P2 As Variant
    Dim PList() As Double
    Dim N As Long
    Dim Elist() As AcadEntity
    ReDim Preserve Elist(0)
    P1 = ThisDrawing.Utility.GetPoint(, "指定点:")
xNext:

    P2 = ThisDrawing.Utility.GetPoint(P1, "指定下一点:")
    '记录顶点二维坐标
    N = N + 2
    ReDim Preserve PList(N * 2 - 1)
    PList(N * 2 - 4) = P1(0):    PList(N * 2 - 3) = P1(1):   PList(N * 2 - 2) = P2(0):    PList(N * 2 - 1) = P2(1):
    '绘制中心线(预览用)
    Dim L0 As AcadLine
    Dim L As AcadLine
    Dim A As Double
    Set L0 = ThisDrawing.ModelSpace.AddLine(P1, P2)
    '将L0添加到Elist数组中,以便于删除
    ReDim Preserve Elist(UBound(Elist) + 1)
    Set Elist(UBound(Elist)) = L0
    '绘制墙线(预览用)
    A = L0.angle
    L0.color = acRed
    Dim Ps As Variant
    Dim Pe As Variant
    Ps = GetPointAR(P1, A + Atn(1) * 2, W / 2) '计算相对已知点一定角度和距离的点
    Pe = GetPointAR(P2, A + Atn(1) * 2, W / 2)
    Set L = ThisDrawing.ModelSpace.AddLine(Ps, Pe)
    ReDim Preserve Elist(UBound(Elist) + 1)
    Set Elist(UBound(Elist)) = L
    
    Ps = GetPointAR(P1, A - Atn(1) * 2, W / 2)
    Pe = GetPointAR(P2, A - Atn(1) * 2, W / 2)
    Set L = ThisDrawing.ModelSpace.AddLine(Ps, Pe)
    ReDim Preserve Elist(UBound(Elist) + 1)
    Set Elist(UBound(Elist)) = L
    
    '循环,P2点将是下一段的起点
    P1 = P2
    If Err Then
        GoTo D
    Else
        GoTo xNext
    End If
D:
    '删除无用的线段
    Dim i  As Long
    Prompt Str(UBound(Elist))
    For i = 0 To UBound(Elist)
        Elist(i).Delete
    Next i
    '从新绘制墙线 (多段线)
    Dim PL As AcadLWPolyline
    Set PL = ThisDrawing.ModelSpace.AddLightWeightPolyline(PList)
    PL.offset W / 2 '偏移一半墙厚
    PL.offset -W / 2
    PL.Delete
End Sub
'*********************************************************************************************


[本日志由 田草 于 2007-11-23 03:37 PM 编辑]


暂时没有评论
发表评论 - 不要忘了输入验证码哦!
作者: 用户:  密码:   注册? 验证:  防止恶意留言请输入问题答案:1*2=?  
评论:

禁止表情
禁止UBB
禁止图片
识别链接
识别关键字

字体样式 文字大小 文字颜色
插入粗体文本 插入斜体文本 插入下划线
左对齐 居中对齐 右对齐
插入超级链接 插入邮件地址 插入图像
插入 Flash 插入代码 插入引用
插入列表 插入音频文件 插入视频文件
插入缩进符合
点击下载按钮 下标 上标
水平线 简介分割标记
表  情
 
Tiancao Blog All Rights Reserved 田草博客 版权所有
Copyright ©