明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1829|回复: 4

获取autocad当前窗口的所有竖直方向的直线的X坐标

[复制链接]
发表于 2011-11-7 11:21:26 | 显示全部楼层 |阅读模式
请问如何获取AutoCAD当前窗口的所有竖直方向的直线的X坐标,并把所获取的坐标保存到一个数组里,与此同时 判断出这些直线属于哪个图层的,谢谢各位大侠
发表于 2011-11-10 15:08:55 | 显示全部楼层
  1. Sub SelectLine()
  2.     Dim sS As AcadSelectionSet
  3.     Dim objLine As AcadLine
  4.     Dim LineDelta As Variant
  5.     Dim removeObjects() As AcadEntity


  6.     Dim fType(0 To 0) As Integer
  7.     Dim fData(0 To 0) As Variant
  8.     Dim AutoSelect As Boolean

  9.     'AutoSelect = True

  10.     On Error Resume Next
  11.     ThisDrawing.SelectionSets("SelectText").Delete
  12.     Set sS = ThisDrawing.SelectionSets.Add("SelectText")
  13.     On Error GoTo 0

  14.     On Error GoTo ErrHandle

  15.     '创建过滤机制
  16.     fType(0) = 0: fData(0) = "LINE"         '直线

  17.     '选择符合条件的所有图元-单行文字和多行文字
  18.     If AutoSelect Then
  19.         '自动选择方式
  20.         sS.Select acSelectionSetAll, , , fType, fData
  21.     Else
  22.         '提示用户选择
  23.         sS.SelectOnScreen fType, fData
  24.     End If
  25.     If sS.Count = 0 Then Exit Sub
  26.     i = 0

  27.     For Each objLine In sS
  28.         LineDelta = objLine.Delta
  29.         If LineDelta(0) <> 0 Then
  30.             ReDim Preserve removeObjects(i)
  31.             Set removeObjects(i) = objLine
  32.             i = i + 1
  33.         End If
  34.     Next
  35.    
  36.     sS.RemoveItems removeObjects
  37.       
  38.     For Each objLine In sS
  39.         a = objLine.StartPoint
  40.         b = a(0)
  41.         c = c & b & vbNewLine
  42.     Next
  43.    
  44.     MsgBox c

  45.     '删除数组
  46.     Erase fType: Erase fData: Erase removeObjects: Erase LineDelta

  47.     '删除选择集
  48.     sS.Clear: sS.Delete
  49.    
  50.     Set sS = Nothing
  51.     Set objLine = Nothing

  52.     Exit Sub
  53. ErrHandle:
  54.     MsgBox Err.Description, vbCritical, "产生了以下错误:"
  55.     Err.Clear
  56. End Sub
发表于 2011-11-10 16:42:42 | 显示全部楼层
领教了,沙发高手。是我们学习的榜样。谢谢。
 楼主| 发表于 2011-11-11 09:36:41 | 显示全部楼层
wylong 发表于 2011-11-10 15:08

谢谢wylong的答案 ,有个问题不太明白   a,b,c都没有定义呀, c = c & b & vbNewLine
这条语句的作用是什么呢?  还有就是 怎么才能判断直线所在的图层啊
发表于 2011-11-11 20:59:31 | 显示全部楼层
可以不定义,VB允许这样,实际为变体数组(包含所有)。b为每个竖直直线的起点的X坐标, c = c & b & vbNewLine作用:所有起点X坐标换行,vbNewline作用换行相当于vbCrLf,它是VB6新增的。这样显示出来的坐标是一行一个。图层名问题: objLine.Layer
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 18:31 , Processed in 0.189591 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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