Где можно смотреть такие нюансы объектов?В даном случае я смотрел в документации ObjectARX для "native" метода класса AcDbMpolygon, для которого .NET-класс MPolygon является оберткой.
Returns a pointer to the AcDbMPolygon internal AcDbHatch member. The AcDbMPolygon uses the internal AcDbHatch member for rendering and other work.Из этого я сделал вывод, что эта штриховка "живет" не больше одного сеанса работы с чертежом и если она нужна - нужно сделать её копию и работать с ней.
Из этого я сделал вывод, что эта штриховка "живет" не больше одного сеанса работы с чертежом и если она нужна - нужно сделать её копию и работать с ней.Насколько я вижу, автор в коде присваивает переменной Hatch ссылку на объект Hatch, полученный из Database и повторно пытается его же всунуть в Database, где он уже и так существует. Не удивительно, что возникает ошибка. И вполне логично, что Clone() отработает как полагается.
Насколько я вижу, автор в коде присваивает переменной Hatch ссылку на объект Hatch, полученный из Database и повторно пытается его же всунуть в Database, где он уже и так существует.Неа. Это MPolygon содержится в Database, а MPolygon.Hatch - это внутренняя штриховка, которая живет только пока Database открыт. Если бы Hatch уже была бы в Database, то у неё был бы свой собственный ObjectId и тогда метод BlockTblRec.AppendEntity(acHatch); не сработал бы сразу, а не возникла бы ошибка при закрытии чертежа.
Если бы Hatch уже была бы в Database, то у неё был бы свой собственный ObjectId и тогда метод BlockTblRec.AppendEntity(acHatch); не сработал бы сразу, а не возникла бы ошибка при закрытии чертежа.Полагаю сие (красным) есть "очепятка". Про то, что ошибка возникает при закрытии, а не при сохранении в Database я, честно говоря, прозевал.
Полагаю сие (красным) есть "очепятка".Какая же это "очепятка". Если объект уже в базе, то вызов для него метода AppendEntity приводит к:
Какая же это "очепятка".С утра не проснулся и видимо поэтому неверно прочитал вашу конструкцию "не ... а не ...". :)