| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Проблема с определением координат точки пересечения полилиний. vb.net и AutoCad 2014

Проблема с определением координат точки пересечения полилиний. vb.net и AutoCad 2014

Ответ
Поиск в этой теме
Непрочитано 24.02.2017, 20:05 #1
Проблема с определением координат точки пересечения полилиний. vb.net и AutoCad 2014
samaratopograf
 
Изыскатель
 
Самара
Регистрация: 09.02.2017
Сообщений: 14

Здравствуйте.

Суть такая. Программно создаются 2 полилинии и надо определить координату точки их пересечения.
Причем линии не обязательно должны пересекаться, т.е. может быть, что одна линия не доходит до другой. Тогда точка пересечения будет как продолжение линии.
При попытке получения координат пересечения, с использованием intersectWith возникает ошибка: "Ссылка на объект не указывает на экземпляр объекта"

В этой строке возникает ошибка.
tempTouch.IntersectWith(smoothPolySole, Intersect.ExtendBoth, intPoints, IntPtr.Zero, IntPtr.Zero)

Ниже, код.

<CommandMethod("MyCommandLocal", CommandFlags.Modal)>
Public Sub MyCommandLocal() ' This method can have any name

On Error GoTo Err

Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
Dim acDb As Database = acDoc.Database
Dim acEd As Editor = acDoc.Editor
Dim acTrans As Transaction = acDb.TransactionManager.StartTransaction()


Dim acBlkTbl As BlockTable = Nothing
Dim acBlkTblRec As BlockTableRecord = Nothing

'
Using acTrans

'' Open the Block table for read
acBlkTbl = acTrans.GetObject(acDb.BlockTableId,
OpenMode.ForRead)
'' Open the Block table record Model space for write
acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace),
OpenMode.ForWrite)

' Try
' первая полилиния
Dim smoothPolySole As Polyline = New Polyline
smoothPolySole.ColorIndex = 80

smoothPolySole.AddVertexAt(0, New Point2d(0, 0), 0, 0, 0)
smoothPolySole.AddVertexAt(0, New Point2d(10, 10), 0, 0, 0)
smoothPolySole.AddVertexAt(0, New Point2d(10, 20), 0, 0, 0)
smoothPolySole.AddVertexAt(0, New Point2d(20, 30), 0, 0, 0)
smoothPolySole.AddVertexAt(0, New Point2d(30, 40), 0, 0, 0)

acBlkTblRec.AppendEntity(smoothPolySole)
acTrans.AddNewlyCreatedDBObject(smoothPolySole, True)

' вторая полилиния
Dim tempTouch As Polyline = New Polyline()
tempTouch.AddVertexAt(0, New Point2d(20, 10), 0, 0, 0)
tempTouch.AddVertexAt(1, New Point2d(50, 10), 0, 0, 0)

acBlkTblRec.AppendEntity(tempTouch)
acTrans.AddNewlyCreatedDBObject(tempTouch, True)
acTrans.Commit()

' коллекция для получения координат точек пересечения
Dim intPoints As Point3dCollection = Nothing

tempTouch.IntersectWith(smoothPolySole, Intersect.ExtendBoth, intPoints, IntPtr.Zero, IntPtr.Zero)

' Catch ex As Autodesk.AutoCAD.Runtime.Exception
' acEd.WriteMessage(ex.Message + vbLf + ex.StackTrace)
' End Try
End Using

Exit Sub
Err:
acEd.WriteMessage(Err.Description)
Resume Next
End Sub


----- добавлено через ~2 ч. -----
Кажется нашел ошибку. Стоило только вопрос задать)))

Dim intPoints As Point3dCollection = Nothing
а надо было Dim intPoints As Point3dCollection = New Point3dCollection

В принципе тему можно закрывать...
Просмотров: 6664
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Проблема с определением координат точки пересечения полилиний. vb.net и AutoCad 2014

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с запуском AutoCad This AutoCAD 22 15.02.2016 20:07
Проблема с импортом модели оболочки из autocad 2014 в Лира 9.6 Stranjer Лира / Лира-САПР 5 05.03.2015 11:14
Проблема открытия файлов в Autocad 2010 после установки Autocad 2015 Volodya AutoCAD 18 30.10.2014 14:30
AutoCad 2014 (2013, MEP2013). Win 8. Тормозит при простейших операциях, почему? Prostofoxit AutoCAD 7 12.01.2014 11:44
Проблема в объектном отслеживание (AutoCAD 2013-2014) gomer8 Баги и пожелания в Autodesk 0 19.06.2013 12:22