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

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

создание собственной подсказки

Ответ
Поиск в этой теме
Непрочитано 16.10.2012, 11:55
создание собственной подсказки
gool
 
Регистрация: 15.11.2007
Сообщений: 52

Как создать подсказку для блока, например, которая будет выводиться при наведении на этот блок? Подобная тема поднималась раньше, но там упоминаются команды note и T2N, а ссылки, где их взять - недоступны. Может, у кого есть?
Спасибо
Просмотров: 19158
 
Автор темы   Непрочитано 17.10.2012, 11:57
#21
gool


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


Дима, гиперссылки мне "угодили", я всего то спрашивала, вдруг можно убрать слова "CTRL+ ....". Разве по этому поводу я непонятно выразилась? Ну нельзя, значит нельзя.
Данные все рассчитаны, хранятся в расширенных данных, и просматриваются через окна, и там куча дополнительных данных, и потери напряжения, и сопротивления, и токи, и типы аппаратуры с их параметрами. Но токи - самое важное при анализе схемы. И хотелось бы их видеть быстро. Правда, эти окна я навесила на горячие клавиши, но все равно не очень удобно. Идешь по цепочке по десяткам элементов, каждый раз открывать и закрывать окно.
Все начиналось в Delphi. Но это не очень удобно, сами понимаете, чертеж то в autocad-е. Пришлось осваивать autocad. До этого работала в нем довольно поверхностно. И пришлось autocad с delphi связывать, т.к. там достаточно много наработок было. Я не думала, что интересен вопрос, как я храню данные, я вытащу то, что нужно показать, вопрос в том, как показать.
Про атрибуты я тоже думала, но отказалась, т.к. в начале рисования схемы их нет, а потом могут налазить на другие элементы схемы. Даже если под эти атрибуты оставлять место, для передачи схемы их нужно отключать, и заказчику будет неясно, зачем тут такие "пустоты"?
Да и тогда нужно следить за атрибутами, чтобы те, которые вычисляются, любой не смог изменить. В атрибутах хранятся, например, типы оборудования, номиналы, позиционные обозначения и.т.д. - та информация, которая д.б. на чертеже всегда.
Вообщем, спасибо всем. Для анализа схем сойдет пока и гиперссылка, будем закрывать глаза на предложение "перейти по ссылке через...".
gool вне форума  
 
Непрочитано 17.10.2012, 12:00
#22
hwd

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


Цитата:
Сообщение от gool Посмотреть сообщение
Вообщем, спасибо всем. Для анализа схем сойдет пока и гиперссылка, будем закрывать глаза на предложение "перейти по ссылке через...".
Ну что же, хозяин - барин, как говорится
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 17.10.2012, 12:06
#23
gool


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


Алексей, я понятие ролловеры слышала, но, оно, по-моему относится к версиям выше 2009. У меня 2006, к сожалению (нелицензионные версии не используем).
hwd, не злитесь, я решила, что тема закрыта.
gool вне форума  
 
Непрочитано 17.10.2012, 12:15
#24
hwd

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


Цитата:
Сообщение от gool Посмотреть сообщение
У меня 2006, к сожалению
Насчёт 2006 не знаю, т.к. не пробовал под него писать на .NET. Те, у кого имеется под рукой AutoCAD 2006, могут попробовать скомпилировать под него этот код. Там же, в мультике демонстрируется принцип работы.

UPD.
Смотрите вложенный файл. Откомпилировал под AutoCAD 2006. Распакуйте его у себя на локальной машине. На компьютере обязательно должен быть установлен .Net Framework 2.0.
Попробуйте загрузить выложенную мною библиотеку в AutoCAD 2006 командой _NETLOAD и проверьте работоспособность. Пришлось внести в исходный код значительные изменения, т.к. .NET API под AutoCAD 2006 более "ущербный".
Вложения
Тип файла: zip BlockReferencesTooltip.zip (2.7 Кб, 35 просмотров)
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 17.10.2012 в 12:38.
hwd вне форума  
 
Непрочитано 17.10.2012, 12:50
#25
Дима_

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


Цитата:
Сообщение от gool Посмотреть сообщение
И пришлось autocad с delphi связывать, т.к. там достаточно много наработок было.
Ну так добавьте на acad.ActiveDocument.SelectionChanged ... функцию анализирующие pickfirstselectionset (если там в самом событии ничего нет, я не помню уж) и у рисуйте у курсора полупрозрачные окошки.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 17.10.2012, 12:59
#26
Кулик Алексей aka kpblc
Moderator

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


Дима_, насколько я понял, подсказка нужна не в момент выбора, а в момент "подвода" курсора к примитиву. Так что SelectionChanged тут будет ни к селу, ни к городу. ЯТД.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.10.2012, 13:01
#27
hwd

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Дима_, насколько я понял, подсказка нужна не в момент выбора, а в момент "подвода" курсора к примитиву. Так что SelectionChanged тут будет ни к селу, ни к городу. ЯТД.
+1
Offtop: не стал об этом писать .
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 17.10.2012, 13:12
#28
Олег (jr.)

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


Попробуй такой вариант без использования GRREAD:
Код:
[Выделить все]
;;-----------------------------------------------------------------------;;
			(vl-load-com)
	
			;;Задай имя атрибута здесь:
			(setq *strTag* "KP");глобальная переменная

(defun C:ATP(/  attData blk isOK  sset strVal)
(while
		    (setq sset (ssget "_:S:E:L" (list (cons 0  "insert")(cons 66 1))))
		     (progn
		       
		       (setq blk (vlax-ename->vla-object (ssname sset 0)))
		
		       (setq attData
			      (mapcar (function
					(lambda	(at)
					  (list	(vla-get-tagstring at)
						(vla-get-textstring at))
					  ))
				      (vlax-invoke
					blk
					'Getattributes)
				      )
			     )
		       (if (setq IsOk
				  (car (vl-remove-if-not
					 '(lambda (x)
					    (eq (car x) *strTag*)
					    )
					 attData)))
			 (progn
			
			   (setq strVal (cadr IsOk))
			   
			 (alert  (strcat "Блок: " (vla-get-effectivename blk)"\nЗначение: " strval))
			   )
			 (alert  (strcat "Атрибут: " *strTag* " не найден."))
			 )
		       
		       )
		    
		     )
  (princ)
  )
;;-----------------------------------------------------------------------;;
Олег (jr.) вне форума  
 
Непрочитано 17.10.2012, 13:20
#29
hwd

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


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Попробуй такой вариант
Это совершенно не то, о чём спрашивала автор топика:
Цитата:
создать подсказку для блока, например, которая будет выводиться при наведении на этот блок?
gool
Ну и чего молчим?

Миниатюры
Нажмите на изображение для увеличения
Название: is-it-working-ru.jpg
Просмотров: 298
Размер:	11.2 Кб
ID:	88668  
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 17.10.2012, 13:39
#30
Дима_

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


Да это я тоже знаю, просто через лисп и активикс (в чем у автора есть какое-то понимание), это надо через голову перепрыгнуть чтоб реализовать без щелчка, а если там уже что-то на дельфях прикрученно, то есть ли смысл автору с 2006 .Net'ом заморачиватся.
з.ы лично для меня щелчок в такой задаче был-бы предпочтительней (но автору конечно видней)
з.з.ы тут все меняется т.к. hwd уже и 2006 нашел и переделал, только данные у автора в расширенныз сидят (и не факт что они одинаковые у всех вхождений блока, а т.к. формат автор дружелюбно не выдал - то ему либо самому разруливать, либо опять Андрея просить).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 17.10.2012, 13:40
#31
gool


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


hwd, спасибо! библиотеку взяла, но при загрузке выдает:
"Не удалось загрузить сборку. Сведения об ошибке:
System.BadImageFormatException: Недопустимый формат файла
'BlockReferencesTooltip.dll'...."
Я еще посмотрю. Это первая проба.
Дима, это тоже идея. Хоть и не наведение курсора, а при выборе, но это побыстрее, чем у меня сейчас открывать и закрывать окна.
Олег! а вашу функцию я попробовала. Все ок. И хотя у меня информация в расширенных данных, это я изменю, без проблем.
Самой мне эти идеи в голову не пришли. Зациклилась на подсказках.
Ребята, вы супер, я уже писала.
gool вне форума  
 
Непрочитано 17.10.2012, 14:02
#32
hwd

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


Цитата:
Сообщение от gool Посмотреть сообщение
при загрузке выдает:
"Не удалось загрузить сборку. Сведения об ошибке:
System.BadImageFormatException: Недопустимый формат файла
'BlockReferencesTooltip.dll'...."
Подозреваю, что AutoCAD 2006 использует .Net Framework 1.0 или 1.1, а не версию 2.0. Я не смогу скомпилировать под 1.0 и 1.1, т.к. моя MS Visual Studio 2010 не поддерживает эти устаревшие версии платформы. Да и код нужно будет снова править, т.к. в обозначенных версиях ещё отсутствовали Generics.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 17.10.2012, 14:11
#33
gool


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


hwd, спасибо, не заморачивайтесь. Действительно, framework 1.1. так что я сделаю попроще, как подсказали ребята - через activeX или как посоветовал Олег.
gool вне форума  
 
Непрочитано 17.10.2012, 16:11
#34
Олег (jr.)

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


Можешь попробовать для .NET Framework 1.1,
здесь нет WPF,только обычное автокадовское окошко

Код:
[Выделить все]
        [CommandMethod("mes")]
        public void testGetXdata()
        {
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            Editor ed = doc.Editor;

            ed.PointMonitor+=new PointMonitorEventHandler(ed_PointMonitor);

            using (Transaction tr= db.TransactionManager.StartTransaction())
            {
                try
                {
                    ObjectId[] ids = GetUserPickedObjects(doc);
                    foreach (ObjectId id in ids)
                    {
                        string message = GetToolTip(id);
                        Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(message);
                    }

                }
                catch
                {
                    Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Bad news, mom!");
                  //  ed.PointMonitor -= new PointMonitorEventHandler(ed_PointMonitor);
                }
                finally
                {
                    ed.PointMonitor -= new PointMonitorEventHandler(ed_PointMonitor);
                }
        }
        }
        private static ObjectId[] GetUserPickedObjects(Document dwg)
        {
            List<ObjectId> ids = new List<ObjectId>();
            using (Transaction tran =
                dwg.Database.TransactionManager.StartTransaction())
            {
                bool go = true;
                while (go)
                {
                    go = false;

                    PromptEntityOptions opt =
                        new PromptEntityOptions("\nPick an entity: ");
                    PromptEntityResult res = dwg.Editor.GetEntity(opt);

                    if (res.Status == PromptStatus.OK)
                    {
                        bool exists = false;
                        foreach (ObjectId id in ids)
                        {
                            if (id == res.ObjectId)
                            {
                                exists = true;
                                break;
                            }
                        }

                        if (!exists)
                        {
                            //Highlight
                            Entity ent = (Entity)tran.GetObject(
                                res.ObjectId, OpenMode.ForWrite);

                            ent.Highlight();

                            ids.Add(res.ObjectId);
                            go = true;
                        }
                    }
                }

                tran.Commit();
            }

            return ids.ToArray();
        }


        private void ed_PointMonitor(object sender, PointMonitorEventArgs e)
        {
            //if (_dwg == null)
            //    return;
            //if (!_msgOn) return;
           Editor ed = (Editor) sender;
            Document doc = ed.Document;

            FullSubentityPath[] paths = e.Context.GetPickedEntities();
            if (paths.Length > 0)
            {
                ObjectId[] ids = paths[0].GetObjectIds();
                if (ids.Length > 0)
                {
                    ObjectId selId = ids[ids.Length - 1];
                    string tipText = GetToolTip(selId);
                    e.AppendToolTipText(tipText);
                }
            }
        }
 private string GetToolTip(ObjectId selId)
 {
StringBuilder sb = new StringBuilder();
Entity ent= selId.GetObject( OpenMode.ForRead,false) as Entity;
Database db = ent.OwnerId.OriginalDatabase;
using (Transaction tr= db.TransactionManager.StartTransaction())
if (ent!=null)
{

    try
    {
        BlockReference bref = ent as BlockReference;
      
        ResultBuffer rb = bref.XData;

        if (rb == null)
        {
            sb.Append("\nBlock does not have XData attached.");
        }
        else
        {
            sb.Append("\n-------------------------------------");
            sb.Append("\nBlock Name:: " + EffectiveName(tr, bref) + "\n");
            foreach (TypedValue tv in rb.AsArray())
            {
                sb.Append(string.Format("Code: {0}, Value: {1}\n", tv.TypeCode, tv.Value));
            }
            rb.Dispose();
        }

    }
    catch (System.Exception ex)
    {
        Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(string.Format("\n{0}\n{1}", ex.Message, ex.StackTrace));
    }
}

 return sb.ToString(); 
}
       //      get the real block name.        //    
    static public string EffectiveName(Transaction tr, BlockReference bref)     
   {    
        BlockTableRecord btr = null;    
        if ((bref.IsDynamicBlock) | (bref.Name.StartsWith("*U", StringComparison.InvariantCultureIgnoreCase)))  
          {                btr = tr.GetObject(bref.DynamicBlockTableRecord, OpenMode.ForRead) as BlockTableRecord;      
      }      
      else     
       {        
        btr = tr.GetObject(bref.BlockTableRecord, OpenMode.ForRead) as BlockTableRecord; 
           }
            return btr.Name;     
   }

Последний раз редактировалось Олег (jr.), 17.10.2012 в 18:49. Причина: добавлена библиотечная функция
Олег (jr.) вне форума  
 
Непрочитано 17.10.2012, 16:14
#35
hwd

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


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Можешь попробовать для .NET Framework 1.1,
Насколько я понял, автор не умеет компилировать код, написанный на .NET и возможно, что даже отсутствует нужная версия IDE MS Visual Studio. Хотя, кто знает...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 17.10.2012, 16:38
#36
gool


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


Ребята, спасибо, но я действительно не умею на .NET. Но учиться никогда не поздно. Мне хочется давно попробовать хоть что-то. Не подскажете, с чего начать, какую-нибудь литературу доступную "для чайников", что ли, в этом вопросе...
gool вне форума  
 
Непрочитано 17.10.2012, 16:45
#37
hwd

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


Цитата:
Сообщение от gool Посмотреть сообщение
Ребята, спасибо, но я действительно не умею на .NET. Но учиться никогда не поздно. Мне хочется давно попробовать хоть что-то. Не подскажете, с чего начать, какую-нибудь литературу доступную "для чайников", что ли, в этом вопросе...
Всё зависит от серьёзности намерения.
.NET, это не язык программирования для AutoCAD, вроде AutoLISP. На .NET (вообще-то это группа языков) можно писать не только плагины, но и самостоятельные приложения, в том числе сайты, службы. Т.о. если браться изучать .NET, то нужно быть готовым к тому, что это несколько растянутое по времени занятие. Если усваиваете информацию шустро, то достаточно быстро сможете писать простые вещи. Только нужно сначала определиться, на каком именно .NET языке хотите учиться писать код. Все .NET языки совместимы между собой, т.е. в одном языке свободно можно использовать результат того, что написан на другом.

.NET - это платформа, предназначенная для программирования под разные операционные системы (Windows\LINUX\MAC OS). Код "условно" кроссплатформенный. "Условно", потому что есть нюансы, которые следует обходить, чтобы он действительно был кроссплатформенным.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 17.10.2012, 17:04
#38
gool


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


Я примерно так и представляла, но вы hwd, все четко выразили. Уж насколько шустро работает голова, наверное, не мне судить, но потому что мне все интересно, поэтому и пишу что-то сама прожив около 6-ти десятков. Нельзя ли с Вами связаться как-то лично по этому вопросу, чтобы не "захламлять" форум ?
gool вне форума  
 
Непрочитано 17.10.2012, 17:09
#39
hwd

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


Цитата:
Сообщение от gool Посмотреть сообщение
Я примерно так и представляла, но вы hwd, все четко выразили. Уж насколько шустро работает голова, наверное, не мне судить, но потому что мне все интересно, поэтому и пишу что-то сама прожив около 6-ти десятков. Нельзя ли с Вами связаться как-то лично по этому вопросу, чтобы не "захламлять" форум?
Если возникают какие-то вопросы, можете задавать. Мои координаты указаны как в профиле данного форума, так и здесь (если внимательно читать - там и электронная почта указана). Но предупреждаю сразу - обучением я не занимаюсь в виду отсутствия времени, да и, откровенно говоря, желания. Ответить на вопрос - это одно, а сидеть и обучать - это совсем другое...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 17.10.2012, 17:11
#40
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от hwd Посмотреть сообщение
.NET, это не язык программирования для AutoCAD, вроде AutoLISP. На .NET (вообще-то это группа языков) можно писать не только плагины, но и самостоятельные приложения, в том числе сайты, службы. Т.о. если браться изучать .NET, то нужно быть готовым к тому, что это несколько растянутое по времени занятие. Если усваиваете информацию шустро, то достаточно быстро сможете писать простые вещи. Только нужно сначала определиться, на каком именно .NET языке хотите учиться писать код. Все .NET языки совместимы между собой, т.е. в одном языке свободно можно использовать результат того, что написан на другом.

.NET - это платформа, предназначенная для программирования под разные операционные системы (Windows\LINUX\MAC OS). Код "условно" кроссплатформенный. "Условно", потому что есть нюансы, которые следует обходить, чтобы он действительно был кроссплатформенным.
Increase Size Decrease Size Java vs Microsoft .NET Trailer
http://www.youtube.com/watch?v=13A0_QkqtaQ
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > создание собственной подсказки



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание собственной панели инструментов к AutoCAD-у Supermax Программирование 43 18.11.2009 12:01
Создание собственной системы координат для растрового изображения зюс AutoCAD 4 06.05.2009 21:52
Создание собственной текстуры и добавление в Revit Scrubber Revit 14 05.02.2009 15:19
создание собственной подписи??? Робин Бобин Разное 36 17.12.2007 17:15
Создание всплывающей подсказки? draft AutoCAD 5 08.01.2007 17:15