广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    CorelDraw VBA获取底图线坐标

    来源:网络收集  点击:  时间:2024-04-19
    【导读】:
    利用CorelDraw VBA获取描绘的底图线的坐标,用于编程输入底图的线。工具/原料moreCorelDraw2017 评估版方法/步骤1/9分步阅读

    将底图图片导入CorelDraw中,在页面左下角拖放两条辅助线(操作前打开各种捕捉,可以准确贴齐页边缘)如图。

    2/9

    将导入的图片的坐标左下角移动到页面左下角(移动前要打开贴齐辅助线)

    3/9

    在图的上边框和有边框(也可以是已知刻度的位置),也拖放辅助线,如图

    4/9

    测量横轴距离和纵轴距离,使用左侧工具中的平行度量工具,如图:。操作过程中要捕捉辅助线交点。此处横轴距离15.401cm,纵轴距离10.830cm,单位是cm,测的是mm。

    5/9

    记录图的左下角坐标为横轴15.5,纵轴15.0,横轴辅助线间坐标距离19.0-15.5=3.5,纵轴距离为15.8-15.0=0.8。如图

    6/9

    测量完毕后,开始描绘底图上的线,如图。

    7/9

    加载CorelKits.gms宏插件(加载过程参照百度经验https://jingyan.baidu.com/article/ab0b5630d11cf4805afa7daf.html)。

    线选中要获取坐标的线,然后点击右侧工具栏中的“线坐标编程用”工具,在对话框中输入前边计算的数据,然后点击确定,然后选择其他线继续上边的操作。如图:

    8/9

    线坐标存储在了C:\CurveCoordinates.txt,文件打开后如图:

    9/9

    主要函数如下:

    Function GetLineCor(Xc As Double, Xt As Double, Yc As Double, Yt As Double, Xz As Double, Yz As Double)

    Dim sl As Shape, xSel As ShapeRange

    Dim sp As SubPath

    Dim seg As Segment

    ActiveDocument.Unit = cdrCentimeter

    Set xSel = ActiveSelectionRange

    If ActiveSelectionRange.Count 1 Or ActiveSelectionRange.Count = 0 Then

    MsgBox 请先选中1条曲线。

    Exit Function

    End If

    Dim cS As Long

    cS = xSel.Shapes(1).Curve.Segments.Count seg num of curve

    Dim Segnum As Long

    Segnum = 2 * cS

    Dim cur() As Double, cur1() As Double, cur2() As Double

    ReDim cur(1 To Segnum, 1 To 2) As Double

    ReDim cur1(1 To Segnum, 1 To 2) As Double

    ReDim cur2(1 To Segnum, 1 To 2) As Double

    Dim jcur() As Double, jcur1() As Double, jcur2() As Double

    ReDim jcur(1 To Segnum, 1 To 2) As Double

    ReDim jcur1(1 To Segnum, 1 To 2) As Double

    ReDim jcur2(1 To Segnum, 1 To 2) As Double

    i = 1

    For j = 1 To xSel.Shapes(i).Curve.Segments.Count

    Js = 2 * j - 1

    jcur(Js, 1) = xSel.Shapes(i).Curve.Segments(j).StartNode.PositionX

    jcur(Js, 2) = xSel.Shapes(i).Curve.Segments(j).StartNode.PositionY

    Os = 2 * j

    jcur(Os, 1) = xSel.Shapes(i).Curve.Segments(j).EndNode.PositionX

    jcur(Os, 2) = xSel.Shapes(i).Curve.Segments(j).EndNode.PositionY

    If xSel.Shapes(i).Curve.Segments(j).Type = 1 Then 线类型,0直线,1曲线

    jcur1(Os, 1) = xSel.Shapes(i).Curve.Segments(j).StartingControlPointX

    jcur1(Os, 2) = xSel.Shapes(i).Curve.Segments(j).StartingControlPointY

    jcur2(Os, 1) = xSel.Shapes(i).Curve.Segments(j).EndingControlPointX

    jcur2(Os, 2) = xSel.Shapes(i).Curve.Segments(j).EndingControlPointY

    End If

    Next j

    Dim m As Long

    m = 1

    cur(1, 1) = jcur(1, 1): cur(1, 2) = jcur(i, 2):

    cur1(1, 1) = jcur1(1, 1): cur1(1, 2) = jcur1(1, 2):

    cur2(1, 1) = jcur2(1, 1): cur2(1, 2) = jcur2(1, 2):

    For i = 2 To Segnum

    If i Mod 2 = 0 Then

    m = m + 1

    cur(m, 1) = jcur(i, 1): cur(m, 2) = jcur(i, 2)

    cur1(m, 1) = jcur1(i, 1): cur1(m, 2) = jcur1(i, 2)

    cur2(m, 1) = jcur2(i, 1): cur2(m, 2) = jcur2(i, 2)

    End If

    If i Mod 2 = 1 And jcur(i, 1) jcur(i - 1, 1) And jcur(i, 2) jcur(i - 1, 2) Then

    m = m + 1

    cur(m, 1) = jcur(i, 1): cur(m, 2) = jcur(i, 2)

    cur1(m, 1) = jcur1(i, 1): cur1(m, 2) = jcur1(i, 2)

    cur2(m, 1) = jcur2(i, 1): cur2(m, 2) = jcur2(i, 2)

    End If

    Next i

    Xxishu = 15.401 / 3.5 软件测得距离/图片对应距离Xcm

    Yxishu = 10.83 / 0.8 软件测得距离/图片对应距离Ycm

    xx = 13 左下角坐标X

    yy = 15 左下角坐标Y

    Dim Xxishu As Double, Yxishu As Double, xx As Double, yy As Double

    Xxishu = Xc / Xt 软件测得距离/图片对应距离Xcm

    Yxishu = Yc / Yt 软件测得距离/图片对应距离Ycm

    xx = Xz 左下角坐标X

    yy = Yz 左下角坐标Y

    Open c:\CurveCoordinates.txt For Append As #1

    For i = 1 To m

    Print #1, x( i )= Format(cur(i, 1) / Xxishu + xx, 0.00000) :y( i )= Format(cur(i, 2) / Yxishu + yy, 0.00000)

    Next i

    Print #1, Set crv = Application.CreateCurve(ActiveDocument)

    Print #1, Set sup = crv.CreateSubPath((x(1) - SPmin) * SPxishu, (y(1) - CZmin) * CZxishu)

    Print #1, For m = 2 To m

    Print #1, sup.AppendCurveSegment (x(m) - SPmin) * SPxishu, (y(m) - CZmin) * CZxishu

    Print #1, Next m

    Print #1, Set s = ActiveLayer.CreateCurve(crv)

    Close #1

    MsgBox Its a success to pick up the coordinates. Chr(13) The data is on disk C:\CurveCoordinates.txt

    End Function

    注意事项

    仅是测试版,欢迎大家一起改进。

    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_544747.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-05 08:10:09  耗时:0.023
    0.0232s