Тема: Вставка изображений, используя команду '-image'.

Вставляю картинку в dwg-документ, используя команду '-IMAGE':

acedCommand(
    RTSTR, CMD_INS_IMAGE_XREF,
    RTSTR, PRM_ATTACH,
    RTSTR, Xref,
    RTSTR, DEFAULT_INTERACTIVE_INPUT,
    RTSTR, DEFAULT_SCALE_FACTOR,
    RTSTR, DEFAULT_ROTATION_ANGLE,
    RTNONE
    );

Картинка отлично вставляется с первым параметром 'ATTACH'.
Однако, при повторной вставке одной и той же картинки AutoCAD предлагает ввести другое имя файла, как файл по заданному пути занят. Это действительно так, он сам его и держит.
Если же использовать туже команду, но вызывать ее непосредственно из AutoCAD, то ситуация обстоит иначе:

Image image_name has already been loaded.
Use IMAGE Reload to update its definition.

Т.е. команда '-IMAGE' вызывается вновь, но уже с параметром 'RELOAD'.
Хотелось бы решить проблему минимальными усилиями, например:
- "попросить" AutoCAD отреагировать на повторно вставляемую программно картинку так же, как если бы это происходило при вставке из AutoCAD; скорее всего в данном случае нужно предварительно освобождать занятый AutoCAD'ом файл
- если такое невозможно, то подскажите, пожалуйста, как получить список вставленных картинок из всех открытых в AutoCAD документов с такими свойствами, как имя и путь к файлу либо предложите, пожалуйста, способ проще
Спасибо

Re: Вставка изображений, используя команду '-image'.

"Много буков". Чтобы найти все вставленные в чертеж рисунки смотри сюда: https://www.caduser.ru/forum/topic32384.html

Re: Вставка изображений, используя команду '-image'.

> Александр Ривилис
Спасибо, Александр.
Родился так же такой способ: попробовать открыть файл изображения для записи, если не вышло - попробовать '-IMAGE' с параметром 'Reload'. Если у вас есть серьезные аргументы против такого способа - буду рад критике.

Re: Вставка изображений, используя команду '-image'.

> equilibrium
А если файл изображения на read-only носителе (CD/DVD и т.д.) или просто с атрибутом read-only? smile
Да и не очень понял при чем тут RELOAD - эта подкоманда просто перечитывает файл изображения, а тебе скорее всего необходимо сделать копию AcDbRasterImage (возможно повернутую и отмасштабированную).
P.S.: Кроме того в какой версии AutoCAD -IMAGE не позволяет повторно вставить тот же файл (опция ATTACH)? У меня все нормально вставляется.

Re: Вставка изображений, используя команду '-image'.

Александр Ривилис пишет:

P.S.: Кроме того в какой версии AutoCAD -IMAGE не позволяет повторно вставить тот же файл (опция ATTACH)? У меня все нормально вставляется.

Например, AutoCAD 2006 и 2008 не дают повторно вставить тот же файл изображения.
Вы вставляете картинку, использую '-IMAGE' из arx или из командной строки AutoCAD? В последнем случае у меня проблем не возникает.

Re: Вставка изображений, используя команду '-image'.

> equilibrium
Я вставляю из командной строки. Видимо проблема в том, что у тебя команда не успевает отработать до конца.

Re: Вставка изображений, используя команду '-image'.

> Александр Ривилис
Команда отрабатывает до конца.
Кажется, причина в другом.
Я отдаю AutoCAD относительный путь к картинке. При повторной вставке имею вышеописанную проблему.
Если дать AutoCAD абсолютный путь - проблема не возникает.
Для того, чтобы можно было вставить картинку второй раз - вместо относительного пути к файлу необходимо взять имя, с которым вставилась эта картинка в первый раз.
Т.е. на основе относительного пути, необходимо найти картинку с таким путем сохранения у текущего документа, взять имя этого xref'а и его подставить третьим параметром в '-IMAGE' вместо относительного пути.

Re: Вставка изображений, используя команду '-image'.

Так может вставлять в таком формате:

imagename="path name\long file name.ext"

Re: Вставка изображений, используя команду '-image'.

> Александр Ривилис
Если path name - относительный путь, то такой способ проблему не решает.
Думаю, я буду делать, как описал в предыдущем сообщении.
Но, остается один случай, который я не рассмотрел.
Пытаешься по относительному пути вставить картинку. AutoCAD делает название для xref'a из имени файла.
Насколько я понял, задать новое уникальное имя для xref при выключенных диалогах (из командной строки) не представляется возможным. AutoCAD просит путь и/или имя файла. Поправьте меня, если я не прав.
В таком случае можно извратиться и например, "тихо" переименовать существующий конфликтный xref, сделать свой xref, а затем снова оба переименовать. Не очень красиво, если в предыдущем абзаце я не ошибся.
Сопутствующий вопрос: предоставляет ли SDK доступ к функции, которая генерирует новое "свободное" имя для xref на основе "занятого"?

Re: Вставка изображений, используя команду '-image'.

1) Причем здесь xref - это image, а не xref.
2) Формат имя=путь теоретически должно решать твою проблему. Имя ты задаешь произвольное, а не обязательно имя файла.

Re: Вставка изображений, используя команду '-image'.

> Александр Ривилис
1) image я назвал xref'ом потому, что в AutoCAD 2008 вроде как под это понятие подвели и dwg, и image, и dwf, и dgn. Менеджер у них один.
2) Да, такой формат решает часть проблем (я изначально неправильно понял формат параметра: как в доке, так и при упоминании Вами). Однако все еще придется при необходимости готовить "свободное" имя для image при добавлении или подставлять уже занятое, если image добавлялся ранее, т.к. консоль может быть закрыта и нужно избежать необходимости ручного ввода.
Спасибо Вам большое за помощь.

Re: Вставка изображений, используя команду '-image'.

> equilibrium
Мы же не простые пользователи AutoCAD, а программисты и нам не позволительно смешивать разные понятия (это по поводу xref и image). Это совершенно разные примитивы, совершенно разные классы и т.д.