找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1085|回复: 8

[求助]:请问vba可以做到boundary吗

[复制链接]
发表于 2004-11-7 22:10:16 | 显示全部楼层 |阅读模式

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

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

×
autocad中有一个命令是boundary ,能不能用vba做,也就是我的选择集:用鼠标点击封闭线内部,用pline重绘该图,然后提取pline每个节点,可以做到吗?因为大部分书籍都是在程序中指定点坐标,那么用鼠标指定不知道怎么办了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-11-8 08:22:56 | 显示全部楼层
“在程序中指定点坐标”和“用鼠标指定”是一样的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-11-10 19:49:06 | 显示全部楼层
搜索了一下论坛,以及看了一下vba的一些书籍,现在我实现了用pline绘制封闭折线到达指定的图层,但是如何把转折点坐标(或者是折点间距离)提取出来,真是费劲心思,还是不行,请指教。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-10 21:38:56 | 显示全部楼层
你可以用SendCommand方法调用"-boundary"命令
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-11-11 22:26:49 | 显示全部楼层
我查找了
就是用boundary做的,只不过参数中选择的是
内部点(高级选项A)a
下面我用的是b(你在解答一个人问题时提过这部分源代码,这一步你用了r,形成了一个面域)
现在图(一个闭合区域的边界线)已经绘制出来了,我要得到折点坐标,或者是pline线上两点之间的距离,如何用程序实现。。
thank you。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 70个

财富等级: 招财进宝

发表于 2004-11-11 22:33:59 | 显示全部楼层
如果生成的边界是多义线,是很容易取得转折点坐标的,vba里有相应的方法、属性。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-12 08:39:18 | 显示全部楼层
以前在VB中写过的一个函数,应该是你要的功能

Public Function BorderPoint(ByVal SelDoc As AcadDocument, ByVal SelPoint As Variant) As Variant
'按些定点返回边界,有边界时返回边界点集和,无边界返加0
Dim n As Long, i As Integer, m As Integer
Dim lwpLineObj As AcadLWPolyline
Dim explodedObjects As Variant
Dim explodedLine As AcadLine
Dim Point() As Double
Dim Border() As Double

n = SelDoc.ModelSpace.Count
' 调用BOUNDARY命令获取某一点处的边界
SelDoc.SendCommand "_-Boundary" & vbCr & SelPoint(0) & "," & SelPoint(1) & vbCr & vbCr
' 如果存在边界,则会生成新的实体
If SelDoc.ModelSpace.Count > n Then
    Set lwpLineObj = SelDoc.ModelSpace.Item(SelDoc.ModelSpace.Count - 1)
Else
    MsgBox "未发现有效的板材边界!", vbExclamation + vbOKOnly, "系统提示"
    BorderPoint = 0
    Exit Function
End If
'取出边界线
explodedObjects = lwpLineObj.Explode
lwpLineObj.Delete
ReDim Point((UBound(explodedObjects) + 1) * 6 - 1)
ReDim Border((UBound(explodedObjects) + 1) * 3 - 1)
For n = 0 To UBound(explodedObjects)
    If explodedObjects(n).ObjectName <> "AcDbLine" Then
        MsgBox "当前所选取板材边界错误,请重选!", vbExclamation + vbOKOnly, "系统提示"
        BorderPoint = 0
        GoTo 100
    End If
    Set explodedLine = explodedObjects(n)
    Point(n * 6 + 0) = explodedLine.StartPoint(0)
    Point(n * 6 + 1) = explodedLine.StartPoint(1)
    Point(n * 6 + 2) = explodedLine.StartPoint(2)
    Point(n * 6 + 3) = explodedLine.EndPoint(0)
    Point(n * 6 + 4) = explodedLine.EndPoint(1)
    Point(n * 6 + 5) = explodedLine.EndPoint(2)
Next
'算出边界点
i = 0
Border(0) = Point(0)
Border(1) = Point(1)
Border(2) = Point(2)
For n = O To (UBound(Point) + 1) / 3 - 1
    For i = 0 To m
        If Border(i * 3 + 0) = Point(n * 3 + 0) And Border(i * 3 + 1) = Point(n * 3 + 1) And Border(i * 3 + 2) = Point(n * 3 + 2) Then
            Exit For
        End If
    Next
    If i = m + 1 Then
        Border(i * 3 + 0) = Point(n * 3 + 0)
        Border(i * 3 + 1) = Point(n * 3 + 1)
        Border(i * 3 + 2) = Point(n * 3 + 2)
        m = m + 1
    End If
Next
BorderPoint = Border
'删除边界线
100:
For n = 0 To UBound(explodedObjects)
    explodedObjects(n).Delete
Next
End Function
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-11-15 17:25:15 | 显示全部楼层
Set lwpLineObj = SelDoc.ModelSpace.Item(SelDoc.ModelSpace.Count - 1)
这个得到的是线的信息,我没有学过vb,可以告诉我下面如何用vb使用这个得到的线,取出折点坐标,然后用于运算
谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 12:54 , Processed in 0.414152 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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