Если вы хотите назначить определению блока некоторую текстовую информацию, которая должна отображаться в виде всплывающей подсказки при наведении курсора мыши на вхождения этого блока, то в качестве варианта можно воспользоваться обозначенным далее решением.
За основу взят код Kean Walmsley, с учётом поправок от Tony Tanzillo. Во всплывающей подсказке будет отображаться тот текст, который будет задан пользователем в редакторе блока, для свойства Description:
За основу взят код Kean Walmsley, с учётом поправок от Tony Tanzillo. Во всплывающей подсказке будет отображаться тот текст, который будет задан пользователем в редакторе блока, для свойства Description:
Для начала, маленький мультик, демонстрирующий работу библиотеки:
Теперь, собственно сам исходный код:
Теперь, собственно сам исходный код:
// Based on
http://through-the-interface.typepad.com/through_the_interface/2009/07/providing-information-on-autocad-objects-in-a-tooltip-using-net.html
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class PointMonitorTooltips : IExtensionApplication
{
public static void
StartMonitor() {
Document
doc = Application.DocumentManager.MdiActiveDocument;
Editor
ed = doc.Editor;
ed.PointMonitor += new PointMonitorEventHandler(ed_PointMonitor);
}
static void DocumentManager_DocumentActivated(object sender, DocumentCollectionEventArgs
e) {
StopMonitor();
StartMonitor();
}
public static void
StopMonitor() {
Document
doc = Application.DocumentManager.MdiActiveDocument;
Editor
ed = doc.Editor;
ed.TurnForcedPickOn();
ed.PointMonitor -= new PointMonitorEventHandler(ed_PointMonitor);
}
static void ed_PointMonitor(object
sender, PointMonitorEventArgs e) {
Editor
ed = (Editor)sender;
Document
doc = ed.Document;
try
{
FullSubentityPath[]
paths = e.Context.GetPickedEntities();
StringBuilder
sb = new StringBuilder();
Transaction
tr = doc.TransactionManager.StartTransaction();
using
(tr) {
foreach (FullSubentityPath
path in paths) {
ObjectId[] ids = path.GetObjectIds().Where(n =>
n.ObjectClass.Name
== "AcDbBlockReference").ToArray();
foreach (ObjectId
id in ids) {
BlockReference blockRef = tr.GetObject(id, OpenMode.ForRead)
as BlockReference;
BlockTableRecord tabRec =
tr.GetObject(blockRef.BlockTableRecord,
OpenMode.ForRead) as
BlockTableRecord;
sb.AppendLine(tabRec.Comments);
}
}
tr.Commit();
}
if
(sb.ToString() != "")
e.AppendToolTipText(sb.ToString());
}
catch
{
//
Not sure what we might get here, but not real action
//
needed (worth adding an Exception parameter and a
//
breakpoint, in case things need investigating).
}
}
public void Initialize() {
StopMonitor();
StartMonitor();
Application.DocumentManager.DocumentActivated
+=
new
DocumentCollectionEventHandler(DocumentManager_DocumentActivated);
}
public void Terminate() {
//throw
new System.NotImplementedException();
}
}
Комментариев нет:
Отправить комментарий