Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Алексей (IdeaSoft) от 31-03-2019, 22:59:49

Название: Работа метода clone
Отправлено: Алексей (IdeaSoft) от 31-03-2019, 22:59:49
Если я вызываю метод

Entity.clone();

А потом этот клон хочу добавить в другую базу данных. Должен ли я позаботиться, например, о создании слоя в котором находился примитив?
Или метод добавления в базу данных сделает все сам?
Я помню вроде есть метод SetDefaultDataBase
Название: Re: Работа метода clone
Отправлено: Александр Ривилис от 31-03-2019, 23:15:55
Или метод добавления в базу данных сделает все сам?
Нет. Тебе нужно делать все самому.
Название: Re: Работа метода clone
Отправлено: Дмитрий Загорулькин от 01-04-2019, 00:40:35
Если я вызываю метод

Entity.clone();

А потом этот клон хочу добавить в другую базу данных.
Хм... А это сработает? Есть же специальный метод для переноса объектов в другую БД.
Название: Re: Работа метода clone
Отправлено: Александр Ривилис от 01-04-2019, 01:43:45
Хм... А это сработает?
Для простейших примитивов - возможно.
Есть же специальный метод для переноса объектов в другую БД.
Вот им и следует воспользоваться: Database.WblockCloneObjects

Название: Re: Работа метода clone
Отправлено: Алексей (IdeaSoft) от 01-04-2019, 07:14:23
Для простейших примитивов - возможно
А у меня как раз случай когда объекты простой геометрии вставок блоков нет.
Название: Re: Работа метода clone
Отправлено: Привалов Дмитрий от 01-04-2019, 07:27:20
А у меня как раз случай когда объекты простой геометрии вставок блоков нет.
А почему Database.WblockCloneObjects не хочешь использовать? Ведь даже его бывает недостаточно, например при клонировании блоков.
Или ты хочешь чтобы объект не тащил в новую базу стили и т.д.?
Название: Re: Работа метода clone
Отправлено: Дмитрий Загорулькин от 01-04-2019, 10:31:17
Ведь даже его бывает недостаточно, например при клонировании блоков.
Почему недостаточно? Были какие-то случаи сбоев?
Название: Re: Работа метода clone
Отправлено: Привалов Дмитрий от 01-04-2019, 12:01:19
Почему недостаточно? Были какие-то случаи сбоев?
нет, дело не в сбоях.
1. WblockCloneObjects не клонирует порядок прорисовки, по крайней мере в AutoCAD2010. В некоторых блоках это важно, т.к. штриховка(маскировка)  может перекрывать линии.
2. При WblockCloneObjects с параметром replace для динамического блока и блока с атрибутами, этого не достаточно. Т.к. вставки блоков не обновятся полностью.
3. И если ничего не путаю, тут на форуме обсуждали, что вложенные xrecord не клонируется WblockCloneObjects.

наверняка есть еще нюансы.
Название: Re: Работа метода clone
Отправлено: Дмитрий Загорулькин от 01-04-2019, 12:37:22
1. WblockCloneObjects не клонирует порядок прорисовки, по крайней мере в AutoCAD2010. В некоторых блоках это важно, т.к. штриховка(маскировка)  может перекрывать линии.
Да, точно, я с таким сталкивался при программном переносе блоков из другого чертежа. Есть хитрый манёвр при создании блоков чтобы не было таких проблем: надо создавать объекты в порядке, обратном прорисовке. То есть, например, если в блоке есть штриховка, то её надо создавать в первую очередь. А всё остальное - рисовать поверх неё. В таком случае получается эдакий "врождённый" порядок прорисовки, который не нарушается при переносе блока в другой чертёж. Т.к. я теперь всегда так делаю, то уже забыл, что есть эта особенность :)
С двумя другими проблемами не сталкивался.
Название: Re: Работа метода clone
Отправлено: Привалов Дмитрий от 01-04-2019, 13:00:24
Есть хитрый манёвр при создании блоков чтобы не было таких проблем: надо создавать объекты в порядке, обратном прорисовке.
Тоже вариант. Но мне было проще дополнительно скопировать порядок прорисовки в чертеж, т.к. блоки могут создавать разные люди в  разное время.
Благо на этом форуме почти все есть))))
http://adn-cis.org/soxranenie-poryadka-otrisovki-primitivov-pri-operaczii-klonirovaniya-blokov.html