乐筑天下

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

[编程交流] VBA通过创建多段线

[复制链接]

12

主题

26

帖子

15

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
59
发表于 2022-7-6 22:17:27 | 显示全部楼层 |阅读模式
大家好,
 
作为一个好的新手,我正在努力与VBA。。。
 
我有一个对象的选择,所有捕捉,没有间隙之间,现在我需要通过整个周长做一个多段线。。。但是怎么做?
 
在我使用SendCommand“-boundary”但只适用于单个区域之前,现在我必须绘制一条包含多个区域的多段线。
 
任何线索都会帮我很多!!
 
非常感谢。
回复

使用道具 举报

12

主题

26

帖子

15

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
59
发表于 2022-7-6 22:53:06 | 显示全部楼层
这是我的计划。。。。
我选择对象(闭合的LW多段线)并生成区域,然后我将这些区域合并成一个区域,我分解该区域以生成线,我收集线的坐标,然后用检索到的坐标生成一条多段线,但分解的线不符合顺序!!!所以现在我只能忍受。。。
 
以下是我所做的。。。从区域开始。。。
解决这个问题的任何帮助都将是了不起的!
  1. Sub PerimeterLine()
  2.    'To create Regions with the objects
  3.    Dim DifRegs() As AcadObject
  4.    Dim ObjtoConv As AcadEntity
  5.    Dim ActRegion As Variant
  6.    Dim FstRegs As AcadSelectionSet
  7.    Dim FstRegCount As Integer
  8.    Dim FstRegT(1) As Integer
  9.    Dim FstRegV(1) As Variant
  10.    FstRegT(0) = 8: FstRegV(0) = "0"
  11.    FstRegT(1) = 0: FstRegV(1) = "Region"
  12.    ' to combine all regions
  13.    On Error Resume Next
  14.    ThisDrawing.SelectionSets("FstRegs_0").Delete
  15.    On Error GoTo 0
  16.    Set FstRegs = ThisDrawing.SelectionSets.Add("FstRegs_0")
  17.    FstRegs.Select acSelectionSetAll, , , FstRegT, FstRegV
  18.    FstRegCount = FstRegs.Count
  19.    ReDim DifRegs(FstRegCount - 1)
  20.    Dim Thefirst As AcadRegion
  21.    Dim Thesecond As AcadRegion
  22.    For FstObjL = 0 To FstRegCount - 1
  23.        Set DifRegs(FstObjL) = FstRegs.Item(FstObjL)
  24.        If FstObjL <> 0 Then
  25.            Set Thefirst = DifRegs(0)
  26.            Set Thesecond = DifRegs(FstObjL)
  27.            Thefirst.Boolean acUnion, Thesecond
  28.        End If
  29.    Next FstObjL
  30.    Thefirst.Update
  31.    ThisDrawing.Regen acAllViewports
  32.    'explode region in to lines
  33.    Dim ExplodedRegion As Variant
  34.    Dim ExplRegCount As Integer
  35.    ExplodedRegion = Thefirst.Explode
  36.    ExplRegCount = UBound(ExplodedRegion)
  37.    'retrieve coords to make perimeter line
  38.    Dim ExRegL As Integer
  39.    Dim ExRegNumCoords As Integer
  40.    ExRegNumCoords = ((ExplRegCount + 1) * 2) + 1
  41.    Dim ExRegCoords() As Double
  42.    Dim RegLine As AcadLine
  43.    ReDim ExRegCoords(ExRegNumCoords)
  44.    For ExRegL = 0 To ExplRegCount
  45.        Set RegLine = ExplodedRegion(ExRegL)
  46.        ExRegCoords(ExRegL * 2) = RegLine.StartPoint(0)
  47.        ExRegCoords(ExRegL * 2 + 1) = RegLine.StartPoint(1)
  48.        If ExRegL = ExplRegCount Then
  49.            ExRegCoords(ExRegL * 2 + 2) = RegLine.EndPoint(0)
  50.            ExRegCoords(ExRegL * 2 + 3) = RegLine.EndPoint(1)
  51.        End If
  52.    Next ExRegL
  53.    'Make the perimeter line
  54.    Dim PerLine As AcadLWPolyline
  55.    Set PerLine = ThisDrawing.ModelSpace.AddLightWeightPolyline(ExRegCoords)
  56.    PerLine.color = acYellow
  57. End Sub
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 23:47:13 | 显示全部楼层
嗨,Andresig,
 
出色的职位。这一点得到了充分的说明和记录,但没有得到任何答复。我一直在寻找这个完全相同的解决方案有一段时间了,所以我也在尝试解决它。如果你找到了解决方案,或者其他人想插话,请告诉我,我也会很感激。
 
谢谢
乔希
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 11:12 , Processed in 0.747370 second(s), 58 queries .

© 2020-2025 乐筑天下

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