Если есть пересечение, то площадь не соответствует значению в Property.Если есть самопересечение, то площадь не имеет смысла. Да и не думаю, что с такими полилиниями имеет смысл работать. Я бы сообщил пользователю, что полилиния некорректная. А на рисунках у тебя вообще как я понял разомкнутые полилинии.
Рекомендую взять за правило выполнять проверку MdiActiveDocument на равенство null, прежде чем начинать работать с ним.Код - C# [Выбрать]
Document acDoc = acDocMgr.MdiActiveDocument; Database acCurDb = acDoc.Database; Editor ed = acDoc.Editor;
P.S.: Но если ты не будешь сообщать пользователю, что полилиния самопересекающаяся - это будет очень плохо.В моём случае могут быть контуры одной полилинией
Рекомендую взять за правило выполнять проверку MdiActiveDocument на равенство null, прежде чем начинать работать с ним.Буду иметь в виду.
Спасибо, работает! Есть какая либо документация о разнице объектов NET и COM?Есть документация по AutoCAD AciveX/COM API и есть по AutoCAD .NET API. Это независимые API, но имеют некоторое пересечение по функциональности.
Заливки. Сейчас заметил, что заливки, полученные из MPolygon (по предыдущей теме) тоже получаются без геометрии Area.Странно, но почему так я предположить не могу.
то как добавлять в транзакцию? Или есть другие способы?Зачем? По этим обрывкам мыслей и кода я не могу понять что ты собираешься получить в конце.
что ты собираешься получить в конце.Получить надо Hatch из Polyline или MPolygon с геометрией Area
каким образом объекты COM подтверждаются в транзакции?Несколько раз прочёл, но так и не понял этой фразы.
Если да, то каким образом объекты COM подтверждаются в транзакции?Никаим - они друг о друге ничего не знают, все "общее"здесь - это COM может объявить о начале и конце отмены - метод Document'а Start/EndUndoMark.
Получить надо Hatch из Polyline или MPolygon с геометрией AreaПохоже это в общем случае нереально. Я посмотрел что штриховки (Hatch) достаточно часто не имеют площади. Так что считать тебе придется самостоятельно не полагаясь на свойство Area (ни из AutoCAD .NET API, ни из AutoCAD ActiveX/COM). Во всяком случае если они приводят к exception или значения Hatch.Area и AcadHatch.Area не совпадают.
Ещё площади есть у областей (Region).Насколько мне известно точность вычисления площади у Region значительно ниже, чем у Polyline/Hatch. Относительная погрешность не меньше чем 1e-6. Во всяком случае если мне не изменяет память.
на рисунке заливки, созданные вручнуюИ? Судя во всему программно так сделать не получится. Впрочем по возможности проверю.
А как решить проблему с полигонами? У MPolygon уже не подправить HatchLoopTypes.Почему же не подправить? Нужно проанализировать получившийся Hatch и на основе его сделать новый, но с правильными Loop.
Нужно проанализировать получившийся Hatch и на основе его сделать новый, но с правильными Loop.Да, так и получилось из MPolygon получить заливку с площадью
1. Если штриховка содержит несколько петель (Loop), то толко одна из них может быть HatchLoopTypes.External. Остальные рекомендуется ставить HatchLoopTypes.Default1. MPolygon приходят из MapInfo и все Loop имеет тип Polyline, даже если состоят из одного контура. А при добавлении всех Loop как HatchLoopTypes.Default пропадает Area.
2. Можно обойтись без создания временных полилиний, которые потом еще и удаляются если воспользоваться методом
Hatch.AppendLoop Method (HatchLoopTypes, Point2dCollection, DoubleCollection)
А при добавлении всех Loop как HatchLoopTypes.Default пропадает Area.Я имел в виду что внешний контур добавляется как HatchLoopTypes.External, а остальные как HatchLoopTypes.Default
MPolygon приходят из MapInfoКстати, это утверждение не верно в общем случае, так как MPolygon можно создать в чистом AutoCAD средствами ObjectARX/AutoCAD .NET API.
Имел ввиду, что "мои" MPolygon приходят из MapInfo и у них все контуры HatchLoopTypes.PolylineАндрей. Ты не понимаешь о чем я говорю. Вот код:
Пример
Посмотрел статью, но пока не нашел ответа на свой вопрос. Как дать понять что параметр "Area" отсутствует.Что имеется в виду под отсутствующей площадью?
Посмотрел статью, но пока не нашел ответа на свой вопрос. Как дать понять что параметр "Area" отсутствует.Что имеется в виду под отсутствующей площадью?
А какое у тебя значение получается в этом случае?Посмотрел статью, но пока не нашел ответа на свой вопрос. Как дать понять что параметр "Area" отсутствует.Что имеется в виду под отсутствующей площадью?
При выборе штриховки отсутствует свойство площади. А мне нужно дать понять в условии что если отсутствует этот атрибут, то выполнять другое условие.
if (htc.Area != double.NaN)
ExportWord.ExportTableMinEnergo1(pLines, htc.Area, mtt1[0].ToString().Trim(), posf);
else
ExportWord.ExportTableMinEnergo2(pLines, mtt1[0].ToString().Trim(), posf);