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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > разбиение блоков .NET BlockReferense.ExplodeToOwnerSpace

разбиение блоков .NET BlockReferense.ExplodeToOwnerSpace

Ответ
Поиск в этой теме
Непрочитано 23.11.2010, 14:28 #1
разбиение блоков .NET BlockReferense.ExplodeToOwnerSpace
xsakabsx
 
Регистрация: 18.04.2010
Сообщений: 46

Autocad 2011

после после внедрения xref-ов в пространстве модели xref-ы становятса простыми блоками с теми же id что были и у блоков!

через транзакцию получаю обьект по id типа blockReferense
соответственно вызываю метод для этого обьекта ExplodeToOwnerSpace
Код:
[Выделить все]
foreach (ObjectId objId in xrefIds) 
                       {
                           BlockReference blckRef = acTrans.GetObject(objId, OpenMode.ForWrite) as BlockReference;
                           blckRef.ExplodeToOwnerSpace();
                           acTrans.Commit();
                       }
на этом месте автокад просто вылетает с предложение сохранить фаил !


id были получены в начале через GetSelection
потом через филтрацию попали в ObjectIDCollection а потом уже в масив типа objectId[]
Просмотров: 3772
 
Непрочитано 23.11.2010, 17:04
#2
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Несколько наводящих вопросов:
1. BlockReference в пространстве модели?
2. Оно (пространство) доступно для того, чтобы быть открытым для записи (т.е. не открыто еще ни для чтения, ни для записи)?
3. На какой строке точно происходит вылет (проверь через отладчик или через отладочную печать/диалог)?
4. Зачем ты в цикле вызываешь acTrans.Commit(); если его можно вызвать после цикла?
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 23.11.2010, 17:15
#3
xsakabsx


 
Регистрация: 18.04.2010
Сообщений: 46


С этим я разобрался вся проблема как раз была в Trans.Commit

но появилась новая проблема

что делать если во внешней ссылке есть другая внешняя ссылка а в ней может быть еще одна



Задача токова что надо втянуть все Xref потом те блоки что появились после хрефов разбить

если вложенных хрефов нет то то все работает !
обидно даже
xsakabsx вне форума  
 
Непрочитано 23.11.2010, 17:16
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


добавлю: после первого
Код:
[Выделить все]
acTrans.Commit();
все очередные попытки вызвать
Код:
[Выделить все]
acTrans.Commit();
всегда будут приводить к ошибке, т.к. сохранять транзакцию нужно лишь один раз - в самом конце.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 23.11.2010, 17:36
#5
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Задача в чем? Избавится от всех внешних ссылок? Тогда как вариант для каждого BlockReference использовать метод explode. Получится DBObjectCollection. Каждый из элементов этой коллекции проверяешь на BlockReference и то, что это внешняя ссылка. Если нет, то добавляешь к пространству модели, если да, то снова explode и т.д. Затем все неиспользуемые BlockTableRecord можешь удалить.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 23.11.2010, 18:06
#6
xsakabsx


 
Регистрация: 18.04.2010
Сообщений: 46


1 Задача внедрить все ссылки
2 разбить все блоки которые появились после внедрения (то есть бывшие ссылки)

-------------------------------------------------------
примерный ход действий
создаю коллекцию всех обьектов в чертеже(transaction.GetAllOBjects)
потом оттуда выкидываю все кроме хрефов
Код:
[Выделить все]
if (object.GetType() != BlockReferense)
{
DBObjectCollection.remove(object)
}
код примерный !

а вот как создать коллецию обьектов из blockReferense.explodetoownerspace
xsakabsx вне форума  
 
Непрочитано 23.11.2010, 18:22
#7
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


1. Не BlockReferense а BlockReference
2. Я что-то сказал про blockReferense.ExplodeToOwnerSpace? Я говорил про BlockReference.Explode и "ручное" добавление в пространство модели.
Читай внимательнее то, что тебе пишут!
Александр Ривилис вне форума  
 
Непрочитано 23.11.2010, 18:25
#8
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от xsakabsx Посмотреть сообщение
...
Modis? )
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 23.11.2010, 19:23
#9
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от hwd Посмотреть сообщение




Цитата:
Сообщение от xsakabsx
...

Modis? )
Не похоже по стилю
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 23.11.2010, 21:36
#10
xsakabsx


 
Регистрация: 18.04.2010
Сообщений: 46


не я не модис

Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
1. Не BlockReferense а BlockReference
2. Я что-то сказал про blockReferense.ExplodeToOwnerSpace? Я говорил про BlockReference.Explode и "ручное" добавление в пространство модели.
Читай внимательнее то, что тебе пишут!
еще раз хочу пояснить
С# и Autocad .net Api я начал заниматься только 2 недели назад по тому могу не совсем внятно понимать ваши ответы
xsakabsx вне форума  
 
Непрочитано 23.11.2010, 22:59
#11
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от xsakabsx Посмотреть сообщение
С# и Autocad .net Api я начал заниматься только 2 недели назад по тому могу не совсем внятно понимать ваши ответы
В таком случае лучше мануал почитать для начала (имхо).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 24.11.2010, 15:42
#12
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от xsakabsx Посмотреть сообщение
еще раз хочу пояснить
С# и Autocad .net Api я начал заниматься только 2 недели назад по тому могу не совсем внятно понимать ваши ответы
Не обижайся. Просто ты не достаточно внимателен. Если что-то непонятно - спрашивай.
Александр Ривилис вне форума  
 
Непрочитано 21.12.2010, 12:29
#13
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


Цитата:
Сообщение от hwd Посмотреть сообщение
Цитата:
Сообщение от xsakabsx Посмотреть сообщение
...
Modis? )
Нет, не я
Я вопросы по .NET спрашиваю на другом форуме, сам знаешь!
Modis вне форума  
 
Непрочитано 21.12.2010, 12:32
#14
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Modis Посмотреть сообщение
Нет, не я
Я вопросы по .NET спрашиваю на другом форуме, сам знаешь!
Offtop: а на этом - только короткие рекламы с печальными последствиями?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 21.12.2010, 12:50
#15
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


Цитата:
Сообщение от hwd Посмотреть сообщение
Offtop: а на этом - только короткие рекламы с печальными последствиями?
Буга-га! На этом форуме нет выделенной ветки для .NET - а в общей куче не очень удобно. Да и на том другом форуме - намного больше материала касаемо .NET
По теме:
Цитата:
что делать если во внешней ссылке есть другая внешняя ссылка а в ней может быть еще одна
Думаю тут пригодится рекурсия

Последний раз редактировалось Modis, 21.12.2010 в 12:58.
Modis вне форума  
 
Непрочитано 21.12.2010, 13:06
#16
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Какая рекурсия? У вас же компонентное программирование автокад все за вас сделает нужно только правильный метод найти. в объектной модели был метод Bind я не знаю, но думаю что и в АПИ он присутствует.
Вобщем нужно сначала затянуть внешние ссылки с помощью bind, а потом делать explode для блоков.
Sleekka вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > разбиение блоков .NET BlockReferense.ExplodeToOwnerSpace

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен макрос на разбиение блоков dallaskassel Программирование 6 29.10.2010 16:33
Тормозит команда расчленения набора блоков batmax Программирование 4 31.08.2010 17:37
Подсчет и сортировка блоков на текущем слое. Помогите отредактировать. Kortes Программирование 17 26.03.2010 18:46
Самопроизвольное разбиение блоков. Как устранить? Tannik AutoCAD 7 12.04.2009 03:05
разбиение блоков и процедура автосохранения Visla AutoCAD 6 23.03.2004 12:23