明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1861|回复: 5

紧急求助,恳请各位大哥帮忙!!!

[复制链接]
发表于 2003-11-24 11:47:00 | 显示全部楼层 |阅读模式
我想摘直线与多段线的交点,将数据存到文本文件中
已知:
1.直线两端点坐标,直线名,如附件1.txt所示
    格式为:直线名,起点x,起点y,终点x,终点y
2.多段线在cad图中,如2.dwg所示
求:
每条直线与所相交的多段线的所有交点坐标
输出城文本格式
     格式为:
cs001(直线名)
x1,y1(交点坐标),xxxx(多段线所在层名)
x1,y1(交点坐标),xxxx(多段线所在层名)
.............
cs002
见附件3.txt
希望各位大哥帮忙给写个完整的vba程序,小弟自己试验了好久都不行


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2003-11-24 12:44:00 | 显示全部楼层
直线用它的StartPoint和EndPoint分别获取起点和终点坐标,用Layer返回层名。
判断相交使用IntersectWith方法。
访问或创建文件:Open,写入文件Print或者Write,关闭文件:Close。


  1. Print # 语句示例

  2. 本示例使用 Print # 语句将数据写入一个文件。

  3. Open "TESTFILE" For Output As #1        ' 打开输出文件。
  4. Print #1, "This is a test"        ' 将文本数据写入文件。
  5. Print #1,        ' 将空白行写入文件。
  6. Print #1, "Zone 1"; Tab ; "Zone 2"        ' 数据写入两个区(print zones)。
  7. Print #1, "Hello" ; " " ; "World"        ' 以空格隔开两个字符串。
  8. Print #1, Spc(5) ; "5 leading spaces "        ' 在字符串之前写入五个空格。

  9. Print #1, Tab(10) ; "Hello"        ' 将数据写在第十列。

  10. ' 赋值 Boolean、Date、Null 及 Error 等。
  11. Dim MyBool, MyDate, MyNull, MyError
  12. MyBool = False : MyDate = #February 12, 1969# : MyNull = Null
  13. MyError = CVErr(32767)
  14. ' True、False、Null 及 Error 会根据系统的地区设置自动转换格式。
  15. ' 日期将以标准的短式日期的格式显示。
  16. Print #1, MyBool ; " is a Boolean value"

  17. Print #1, MyDate ; " is a date"
  18. Print #1, MyNull ; " is a null value"
  19. Print #1, MyError ; " is an error value"
  20. Close #1        ' 关闭文件。
 楼主| 发表于 2003-11-24 13:49:00 | 显示全部楼层
文件操作我会一点
最主要的是我不知道怎样将ModelSpace上的多段线提取出来与直线求教点
我对选择集很不熟悉,因为我只会一点vb,不会vba,:-(
使用下面语句时,我每次都找不到多段线
ZoomAll
intPoints = lineObj.IntersectWith(polylineObj, acExtendNone)
所以还请efan2000斑竹和各位大虾帮忙做一个完整的程序好吗??
发表于 2003-11-24 19:09:00 | 显示全部楼层
选择实体用

object.GetEntity Object, PickedPoint[, Prompt]

Object

Utility
The object or objects this method applies to.

Object

Object; output-only
The picked object. Can be one of any of the Drawing Objects.

PickedPoint

Variant (three-element array of doubles); output-only
A 3D WCS coordinate specifying the point that was selected.

Prompt

Variant (string); input-only; optional
The text to display that prompts the user for input.
发表于 2003-11-24 19:58:00 | 显示全部楼层

  1. Sub Example_Select()
  2.    
  3.     ' 创建选择集
  4.     Dim ssetObj As AcadSelectionSet
  5.    
  6.     On Error Resume Next
  7.     Set ssetObj = ThisDrawing.SelectionSets("SSET")
  8.     If Err Then
  9.         Err.Clear
  10.         Set ssetObj = ThisDrawing.SelectionSets.Add("SSET")
  11.     End If
  12.     ssetObj.Clear
  13.    
  14.     '构造过滤机制
  15.     Dim groupCode(0) As Integer
  16.     Dim dataCode(0) As Variant
  17.     groupCode(0) = 0
  18.     dataCode(0) = "lwPolyline"

  19.     ssetObj.Select acSelectionSetAll, , , groupCode, dataCode
  20.    
  21.     '更好的方法是只选中与直线外框相交或者位于其中的对象
  22.    
  23.     '获取直线的外框
  24.     Dim corner1 As Variant
  25.     Dim corner2 As Variant
  26.     'Dim lineObj As AcadLine
  27.     'Set lineObj = ThisDrawing.ModelSpace(0)
  28.     lineObj.GetBoundingBox corner1, corner2 'lineObj为位于0层的直线
  29.    
  30.     ssetObj.Select acSelectionSetCrossing, corner1, corner2, groupCode, dataCode
  31.    
  32.      '枚举交点,判断是否相交
  33.      Dim Pts As Variant
  34.      Dim i As Integer
  35.      Dim j As Integer
  36.      For i = 0 To ssetObj.Count - 1
  37.         Pts = ssetObj(i).IntersectWith(lineObj, acExtendNone)
  38.         If Not IsEmpty(Pts) Then
  39.             Debug.Print "多段线(" & ssetObj(i).Handle & ")与直线(" & lineObj.Handle & ")相交"
  40.             For j = 0 To UBound(Pts) Step 3
  41.                 Debug.Print "交点:" & Pts(j) & "," & Pts(j + 1) & "," & Pts(j + 2)
  42.             Next
  43.         End If
  44.     Next
  45. End Sub

  46. 多段线(2D)与直线(2B)相交
  47. 交点:128.258445252942,175.187446678566,0
  48. 多段线(2C)与直线(2B)相交
  49. 交点:124.856166338691,177.858572554345,0
  50. 交点:146.95855737489,160.506006788479,0
  51. 交点:176.484246297653,137.325417051576,0
 楼主| 发表于 2003-11-24 21:25:00 | 显示全部楼层
非常感谢,试验中ing
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 13:54 , Processed in 0.167955 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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