(изменено: Дмитрий Привалов, 12 апреля 2013г. 21:38:07)

Тема: PreviewIcon для блока

Прочитал предыдущие темы, но не нашел того, что нужно. Подскажите пожалуйста, кто знает.
При попытке получить иконки блока следующим способом:

BlockTableRecord btr = (BlockTableRecord)tr.GetObject(id, OpenMode.ForRead, false);//определение блока
Bitmap bm2 = btr.PreviewIcon;//Получаем иконку предпросмотра блока

Выходят не все иконки или не соответствующие действительности.

В предыдущих темах указано, что нужно предварительно вызвать команду для обновления иконок блоков.

doc.SendStringToExecute("(command \"_.blockicon\" \"*\")(princ) ", false, false, false);//Обновление блоков

И собственно вопросы:
1. Есть ли аналог без SendStringToExecute, чтобы вызвать обновление иконок блоков сразу, до загрузки формы
2. Если нет, как гарантированно вызвать SendStringToExecute до открытия формы, т.к. обычно команда выполняется уже после ее закрытия.

Re: PreviewIcon для блока

Если ты хочешь показывать пользователю предварительное изображение блока в виде картинки в некотором диалоговом окне, то иконка - не самое лучшее решение в виду её маленького размера и низкого качества изображения. Если это иконка для кнопки, то, на мой взгляд, содержимое иконки не имеет особого значения, т.к. содержимое иконки плохо видно. Для получения точного, качественного изображения нужного размера можно, как вариант, использовать такой способ. Его можно применять и для получения изображения, размеры которого (длина х ширина) равны размерам иконки, чтобы обновлять их на палитре инструментов (если уж так приспичит).

Re: PreviewIcon для блока

Решения по скриншоту экрана видел, но это больше для сложных больших блоков. И насколько понимаю все они основаны на предварительном скриншотировании, по одному, уже вставленных элементов и последующее их использование. У меня задачи связаны с блоками изображающие элементы топоплана, растительность, опоры и т.д. т.е. достаточно простые блоки с количеством примерно 100шт, для которых нет смысла снимать скриншот.

Re: PreviewIcon для блока

Тебе надо сюда заглянуть
http://adndevblog.typepad.com/autocad/2 … locks.html

(изменено: Дмитрий Привалов, 15 апреля 2013г. 02:44:37)

Re: PreviewIcon для блока

fixo пишет:

Тебе надо сюда заглянуть

Спасибо огромнейшее то, что надо!
Немного переделал пример. Проще выполнить в самом начале обновление всех блоков, а затем получать иконки нужных, т.к. выскакивает окошко обновления блоков и происходит небольшая задержка.(если конечно приложение не подгружает их динамически)

object app = Application.AcadApplication;
object ActiveDocument = app.GetType().InvokeMember("ActiveDocument", System.Reflection.BindingFlags.GetProperty, null, app, null);
object[] dataArry = new object[1];
dataArry[0] = "_.BLOCKICON *\n";
ActiveDocument.GetType().InvokeMember("SendCommand", System.Reflection.BindingFlags.InvokeMethod, null, ActiveDocument, dataArry);