明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1094|回复: 3

Activex api vba 怎样 把圆弧转化为多段线?

[复制链接]
发表于 2014-10-8 16:01:18 | 显示全部楼层 |阅读模式
如题:使用 Activex  Api  或VBA 怎样才能将圆弧转化为多段线? 请各位高手指教!谢谢。
发表于 2014-10-11 08:48:26 | 显示全部楼层
Public Sub ArctoPline()                                                         '圆弧转多线段
    Dim objSset As AcadSelectionSet, objArc As AcadArc
    SelectLots "SSet", "Arc"
    Set objSset = ThisDrawing.SelectionSets("SSet")
    If objSset.Count = 0 Then Exit Sub
    On Error GoTo err1
    For Each objArc In objSset
        Dim p1, p2, points(3) As Double
        If objArc.ObjectName <> "AcDbArc" Then Exit Sub
        p1 = objArc.StartPoint
        p2 = objArc.EndPoint
        points(0) = p1(0)
        points(1) = p1(1)
        points(2) = p2(0)
        points(3) = p2(1)
        Dim plineObj As AcadLWPolyline
        Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
        If objArc.EndAngle - objArc.StartAngle > 0 Then
            plineObj.SetBulge 0, Tan((objArc.EndAngle - objArc.StartAngle) / 4)
        Else
            plineObj.SetBulge 0, Tan((objArc.EndAngle - objArc.StartAngle + 2 * _
3.1415926) / 4)
        End If
        '凸度是多段线顶点列表中选定顶点和下一顶点之间的圆弧所包含角度的 1/4 的正切值。
        '负的凸度值表示圆弧从选定顶点到下一顶点为顺时针方向。凸度为0 表示直线段,凸度为1表示半圆。
        plineObj.Update
    Next
    For Each objArc In objSset
        objArc.Delete
    Next
    'ZoomAll
    Exit Sub
err1:
    Debug.Print Err.Description
    Err.Clear
    Exit Sub
End Sub
发表于 2014-10-11 08:49:51 | 显示全部楼层
Private Sub SelectLots(ByVal Ssetname As String, ByVal objName As String)
    Dim sSetObj As AcadSelectionSet, flag As Boolean
    For Each sSetObj In ThisDrawing.SelectionSets
        If sSetObj.name = Ssetname Then
            flag = True
            Exit For
        End If
    Next
    If flag Then sSetObj.Delete                                                 '创建集合,如集存在,则删除,新建
    Set sSetObj = ThisDrawing.SelectionSets.Add(Ssetname)
    Dim gpCode(0)    As Integer
    Dim dataValue(0) As Variant
    gpCode(0) = 0
    dataValue(0) = objName
    Dim groupCode As Variant, dataCode As Variant
    groupCode = gpCode
    dataCode = dataValue
    ThisDrawing.Utility.Prompt "请选择对象,可以框选" & vbCrLf
    sSetObj.SelectOnScreen groupCode, dataCode
End Sub
 楼主| 发表于 2014-10-11 17:59:22 | 显示全部楼层
感谢zzyong00 您详尽的回复,非常管用。  谢谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 10:34 , Processed in 0.141714 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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