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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA. Программная вставка внешней ссылки. Ошибка в A2012..

VBA. Программная вставка внешней ссылки. Ошибка в A2012..

Ответ
Поиск в этой теме
Непрочитано 29.08.2012, 12:54
VBA. Программная вставка внешней ссылки. Ошибка в A2012..
AlexV
 
Инженер
 
С-Пб
Регистрация: 02.10.2008
Сообщений: 3,686

Собственно, вот оно код, вставляющий нужный мне файл внешней ссылкой, "биндящий" его, и после удаляющий блок и описание блока..
Код:
[Выделить все]
...
Dim I_Point(0 To 2) As Double
  I_Point(0) = 0: I_Point(1) = 1: I_Point(2) = 0
  Dim Block_P As AcadExternalReference
  If ThisDrawing.FullName <> path Then
    Set Block_P = ThisDrawing.ModelSpace.AttachExternalReference(path, "ёклмн", I_Point, 1, 1, 1, 0, False)
    ThisDrawing.Blocks.Item(Block_P.Name).Bind True
    Block_P.Delete
    ThisDrawing.Blocks.Item("ёклмн").Delete
End If
Не берусь судить, насколько правильно написан, но в 2008 работает нормально, в 2012 тормозит на строке Block_P.Delete, ругаясь вот такими окнами:


Может, кто знает, где собака зарылась?

Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.JPG
Просмотров: 620
Размер:	10.3 Кб
ID:	86220  

__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
Просмотров: 8886
 
Непрочитано 03.09.2012, 17:37
#21
hwd

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
AlexVА если сделать сначала Bind, потом объекту Explode, и только потом уже Erase на вхождение блока и Delete на описание?
гы. если ты его уже взорвал, то какое может быть вхождение?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 03.09.2012, 17:43
#22
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Может это какой-то частный случай?
На другом примере попробуй проделать то же самое.
Попробовал простой пример, по типу с 1 поста, все нормально работает. Автокад 2013 правда.
Vildar вне форума  
 
Непрочитано 03.09.2012, 17:48
#23
hwd

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


2 топикстартер
Подозреваю, что под "базой данных" подразумевается объект Database. Проверь у Block_P значение свойств ObjectId.IsValid, а так же проверь у него значение свойства ObjectId.Database.
Цитата:
Пробовал, эксплодить тоже не дает.. "неприменимо", понимаешь..
а "эксплодить" внешнюю ссылку в принципе невозможно. "Эксплодить" можно результат биндинга - вхождения блоков.
Цитата:
Видно, много чего поменялось в объектной модели автокада 2012..
я всё же склоняюсь к версии, что проблема в том, откуда растут руки как нацарапан код.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 03.09.2012 в 17:54.
hwd вне форума  
 
Автор темы   Непрочитано 03.09.2012, 17:50
#24
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,686


Цитата:
Сообщение от hwd Посмотреть сообщение
гы. если ты его уже взорвал, то какое может быть вхождение?
Ну да.. я пробовал, -
Код:
[Выделить все]
...
Dim explodedObjects As Variant
explodedObjects = Block_P.Explode
...
вхождение не стирать, а взорвать (тем более, в нем по факту нету ни одного примитива),- но не дается, зараза... ни взрываться, ни перемещаться, ни копироваться не желает. Хотя командами автокада все это - без проблем.

Цитата:
"а "эксплодить" внешнюю ссылку в принципе невозможно. "Эксплодить" можно результат биндинга - вхождения блоков... я всё же склоняюсь к версии, что проблема в том, откуда растут руки как нацарапан код."
Ну да, руки растут безнадежно не оттуда, и вообще бессистемно как сорняки.. Но учитывая, что руки одни и те же, а код в предыдущих версиях работает, то все таки и внутри автокада чой-то переставили с места на место..

свойств ObjectId.IsValid и ObjectId.Database я у Block_P не обнаружил...

P.S. Проблема криво, но решилась...
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!

Последний раз редактировалось AlexV, 03.09.2012 в 18:24.
AlexV вне форума  
 
Непрочитано 03.09.2012, 22:31
#25
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844


Цитата:
Сообщение от hwd Посмотреть сообщение
гы. если ты его уже взорвал, то какое может быть вхождение?
Применение метода Explode к вхождению блока не удаляет само вхождение.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.09.2012, 23:04
#26
hwd

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Применение метода Explode к вхождению блока не удаляет само вхождение.
Полез в справку, попробовал на практике: да, так и есть. Честно говоря, я был уверен, что метод Explode будет работать аналогично команде _EXPLODE, а оно в .NET работает иначе, как оказалось... Спасибо за инфу, буду знать теперь Там два метода представляют собой интерес: ExplodeToOwnerSpace и Explode.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 04.09.2012, 10:12
#27
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от hwd Посмотреть сообщение
Полез в справку, попробовал на практике: да, так и есть. Честно говоря, я был уверен, что метод Explode будет работать аналогично команде _EXPLODE
Offtop: Я тоже как-то на этом попался
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 04.09.2012, 12:53
#28
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


А зачем через внешнюю ссылку, если файл библиотеки можно вставить как блок? То есть использовать не AttachExternalReference+Bind а InsertBlock. После вставки удаляем этот блок, удаляем его описание, а описания всех вложенных блоков останутся в чертеже.
Do$ вне форума  
 
Непрочитано 04.09.2012, 12:58
#29
hwd

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


Цитата:
Сообщение от Do$ Посмотреть сообщение
А зачем через внешнюю ссылку, если файл библиотеки можно вставить как блок?
А зачем через внешнюю ссылку, когда вообще можно сделать банальный импорт нужных определений блоков? Ответ автор указал выше: потому что по др. он не умеет, а иные способы осваивать не хочет.
Но он там выше где-то отметил, что проблема у него уже отвалилась.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 04.09.2012, 13:29
#30
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,686


Цитата:
Сообщение от Do$ Посмотреть сообщение
А зачем через внешнюю ссылку, если файл библиотеки можно вставить как блок? То есть использовать не AttachExternalReference+Bind а InsertBlock. После вставки удаляем этот блок, удаляем его описание, а описания всех вложенных блоков останутся в чертеже.
Do$, и правда.. однако, блин,- стереотипы мышления! Элементарная вроде мысля, а в голову не пришла..
Цитата:
Сообщение от hwd Посмотреть сообщение
А зачем через внешнюю ссылку, когда вообще можно сделать банальный импорт нужных определений блоков? Ответ автор указал выше: потому что по др. он не умеет, а иные способы осваивать не хочет.
Ну почему же не хочу, хочу.. Если их преимущество очевидно, а затраты времени на изучение невелики. Вот Do$ подсказал способ - на доступном мне уровне, - я сразу побежал AttachExternalReference на InsertBlock править.. (у меня проблема отвалилась, но гораздо более дурным способом..)
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA. Программная вставка внешней ссылки. Ошибка в A2012..

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите узнать номер строки в котрой произошла ошибка в программе на VBA МишаИнженер Программирование 3 27.05.2012 23:27
VBA: Вставка блока - ошибка файлера (filer error) vlalexey Программирование 4 09.11.2010 12:13
Несоответствие результатов в Лире s.vas Лира / Лира-САПР 19 11.11.2009 07:31
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47