乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 105|回复: 3

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

[复制链接]

21

主题

60

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
144
发表于 2014-10-8 16:01:00 | 显示全部楼层 |阅读模式
如题:使用 Activex  Api  或VBA 怎样才能将圆弧转化为多段线? 请各位高手指教!谢谢。
回复

使用道具 举报

23

主题

561

帖子

13

银币

中流砥柱

Rank: 25

铜币
653
发表于 2014-10-11 08:48:00 | 显示全部楼层
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
回复

使用道具 举报

23

主题

561

帖子

13

银币

中流砥柱

Rank: 25

铜币
653
发表于 2014-10-11 08:49:00 | 显示全部楼层
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
回复

使用道具 举报

21

主题

60

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
144
发表于 2014-10-11 17:59:00 | 显示全部楼层
感谢zzyong00 您详尽的回复,非常管用。  谢谢!!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-4-20 18:08 , Processed in 0.886189 second(s), 61 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表