Bryco 发表于 2018-4-25 16:50:27

用于dbconnect标签的挂钩

您好,我希望有人知道在dbconnect命令中添加独立标签或附加标签时要查找的钩子。它在begin命令中没有显示uo,所以我不太确定从哪里开始
**** Hidden Message *****

Bryco 发表于 2018-4-25 17:28:45

我启动了autocad并在MgdDbg中打开了一堆事件,并使用dbconnect
添加了一个标签注意1CE和1CF的新字典创建,它们在NOD中,称为CONLDEFDicpedia(1CE),其中包含CablesLink1(1CF),它有一些xdata来保存查询
然后稍后在询问我标签位置之前,它创建了字典1D0和1D1,同样这些在NOD中,称为CONLABELDicpedia(1D0),其中包含CablesLabel1
简短的故事:似乎不是捕获此命令的直接数据库事件。
我认为如果您在ImpDBObject类型上实现一个覆盖,那么当使用这些时您可能能够捕获
可能是帮助您从字典开始,然后了解哪些字典包含标签def,您可以捕获新MTEXT的创建,其中xdata指向标签定义。
Customization file loaded successfully. Customization Group: ACAD
Customization file loaded successfully. Customization Group: CUSTOM
Customization file loaded successfully. Customization Group: MODELDOC
Customization file loaded successfully. Customization Group: CONTENTEXPLORER
Customization file loaded successfully. Customization Group: SKETCHUPIMPORTSKP
Customization file loaded successfully. Customization Group: EXPRESS
Regenerating model.
Loading MgdDbg...
AutoCAD menu utilities loaded.
Command: _RIBBON
Command: COMMANDLINE
Command: properties
Command:
Command:
Command: _MgdDbgEvents
Application Events Turned On ...
Database Events Turned On ...
Database Object Events Turned On ...
Dynamic Linker Events Turned On ...
Command: dbc
: System Var Changing       : DCTMAINdbc
: System Var Changed      : DCTMAINdbc
: System Var Changing       : DCTMAINdbc
: System Var Changed      : DCTMAINdbc
: System Var Changing       : DCTCUSTdbc
: System Var Changed      : DCTCUSTdbc
: System Var Changing       : DCTCUSTdbc
: System Var Changed      : DCTCUSTDBCONNECT
: Module Loading            : c:\program files\autodesk\autocad 2014\condlg.arx
: Module Loading            : ase.arx
: Module Loading            : acmted2.arx
: Module Loading            : acmted2.crx
: Module Loaded             : ase.arx
: Module Loaded             : acmted2.crx
: Module Loaded             : acmted2.arx
: Module Loaded             : c:\program files\autodesk\autocad 2014\condlg.arx
Command:
Command:
: Database ConstructedDBC
DBCONNECT
Command:
: Object Opened For Modify:
: Object Opened For Modify:
: Object Appended         :
: Object Modified         :
: Object Opened For Modify:
: Object Opened For Modify:
: Object Appended         :
: Object Modified         :
: Object Opened For Modify:
: Object Opened For Modify:
: Object Appended         :
: Object Modified         :
: Object Modified         :
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUPREC
: System Var Changing       : AUPREC
: System Var Changed      : AUPREC
: System Var Changed      : AUPREC
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: System Var Will Change    : AUNITS
: System Var Changing       : AUNITS
: System Var Changed      : AUNITS
: System Var Changed      : AUNITS
: Object Opened For Modify:
: Object Opened For Modify:
: Object Appended         :
: Object Modified         :
: Object Opened For Modify:
: Object Opened For Modify:
: Object Appended         :
: Object Modified         :
: Object Modified         : Specify point for label:
: System Var Changing       : VIEWBACKSTATUS
: System Var Changed      : VIEWBACKSTATUS
: Object Opened For Modify:
: Object Opened For Modify:
: Object Appended         :
: Object Modified         :
: Object Modified         :
: Object Modified         :
: Object Opened For Modify:
: Object Modified         : 1 Record(s) linked with 1 Label(s)
Command:
: Object Opened For Modify:
: Object Appended         :
: Object Modified         :
: Object Opened For Modify:
: Object Modified         :

Bryco 发表于 2018-4-25 17:37:39

此外,如果有帮助的话,所有内容都由注册的应用程序id DCO15引用(在我的例子中,我怀疑这是针对dbconnect版本编码的)。这包括字典中的ImpDBObjects和任何多行文字标签

Bryco 发表于 2018-4-25 17:44:54

谢谢你的回复,威尔,
我刚找到https://forums.autodesk.com/t5/net/connect-to-sql-database-from-c-plugin/td-p/7295765
其中诺曼提到<pre>But if you indeed want to connect to AutoCAD built-in DBConnect, then you need to add refernce to CAO 10.
我希望这有什么意义

Bryco 发表于 2018-4-26 20:16:16

考虑在对象的封闭方法上使用否决模式,以便在autocad移交后进行更改,但仍处于打开写入状态。
您可以使用任何其他方法中的任何逻辑(如ObjectAppended)来标记您想要控制的项目。

Bryco 发表于 2018-4-28 12:02:59

我对此非常好奇,花了一点时间进行实验。我发现封闭式否决无效。在应用扩展数据过滤器的情况下,它从不在IsNewObject条件下激发

公共void watchLabels()
{
var orule=new MTextWatcher()
orule.SetXDataFilter(“DCO15”)
Overrule.AddOverrule(RXClass.GetClass(typeof(MText)),orrule,true)
否决。否决=真
}
公共类MTextWatcher:ObjectOverrule
{
公共MTextWatcher()
{ed=Application.DocumentManager.MdiActiveDocument.Editor;}
私人编辑ed
公共覆盖无效关闭(DBObject-DBObject)
{
if(dbObject.IsNewObject)
{
ed.WriteMessage(“新对象”)
}
否则如果(dbObject.IsModified)
{
ed.WriteMessage(“修改对象”)
}
base.Close(dbObject)
}
}
相反,我在事件视图下查看了这一点,并创建了一个简单的Mealy机器来捕获新标签的情况。这是一个不错的开始,但需要对扩展数据的内容进行更多的细化,因为在此配置中会捕获两次事件

public void catchDbConnect()
{
Application.DocumentManager.MdiActiveDocument.Database。ObjectOpenedForModify+=数据库_
}
RXClass blocktablerecord=RXClass.GetClass(typeof(BlockTable记录))
RXClass-mtext=RXClass.GetClass(typeof(mtext))
ObjectId:blocktablerecordId=ObjectId.Null
私有void数据库_ObjectOpenedForModify(objectsender,ObjectEventArgs e)
{
var dbObject=e.dbObject
var rxClass=dbObject.GetRXClass()
如果(rxClass==blocktablerecord)
{
blocktablerecordId=e.DBObject.ObjectId
e.DBObject。ObjectClosed+=DBObject_BlockTableRecordClosed
}
否则如果(rxClass==mtext&&dbObject.OwnerId==blocktablerecordId)
{
dbObject。ModifiedXData+=DbObject_ModifiedMtextXdata
}
}
私有void DbObject_ModifiedMtextXdata(对象发送方,事件参数e)
{
((DBObject)发送方)。ObjectClosed-=DbObject_ModifiedMtextXdata
Application.DocumentManager.MdiActiveDocument.Editor。WriteMessage(“\n修改的多行文字扩展数据,新标签?!”)
}

Bryco 发表于 2018-5-1 16:08:24

好奇心接踵而至...我喜欢偶尔敲打一下低级逻辑这里有一个类,它似乎可以完成您所追求的:公共类DBConnectLabelEvents。
{。
公共DBConnectLabelEvents(数据库数据库,字符串dbcAppname)。
{。
database.ObjectOpenedForModifyDatabase_ObjectOpenedForModify。
database.ObjectAppendedDbConnectEvents_ObjectAppended。
DBCAppname=dbcAppname;。
}。
公共事件EventHandlerLabelAdded;。
受保护的虚拟无效OnLabelAdded(DBConnectLabelEventArgs e)。
{。
如果(LabelAdded!=null)。
LabelAdded(this, e);。
}。
私有字符串DBCAppname;。
私有静态RXClass BlockTableRecordRXClass=RXClass.GetClass类型;。
私有静态RXClass MTextRXClass=RXClass.GetClass(typeof(MText));。
私有空Database_ObjectOpenedForModify(对象发送者,ObjectEventArgs e)。
{。
var dbObject=e.DBObject;。
如果(dbObject.GetRXClass () == BlockTableRecordRXClass)。
{。
Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\n块表记录已打开");。
dbObject.ObjectClosedDBObject_BlockTableRecordClosed。
}。
}。
私有空DbConnectEvents_ObjectAppended(对象发送者,ObjectEventArgs e)。
{。
var dbObject=e.DBObject;。
如果(dbObject.GetRXClass () == MTextRXClass)。
{。
Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\n附加的MText");。
dbObject.ModifiedXDataDbObject_ModifiedMtextXdata。
}。
}。
私有的无效DbObject_ModifiedMtextXdata(对象发送者,EventArgs e)。
{。
var dbObject=(DBObject)发送者;。
dbObject.ModifiedXDataDbObject_ModifiedMtextXdata。
var xdata=dbObject.GetXDataForApplication(DBCAppname);。
if(xdata==null)返回;。
Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(\n添加射击标签);。
OnLabelAdded(新的DBConnectLabelEventArgs(dbObject));。
}。
私有空DBObject_BlockTableRecordClosed(对象发送者,ObjectClosedEventArgs e)。
{。
Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\n块表记录已关闭");。
var BlockTableRecord=(DBObject)发送者;。
BlockTableRecord.ObjectClosedDBObject_BlockTableRecordClosed。
}。
}它需要一个修改的事件args类公共类DBConnectLabelEventArgs: EventArgs。
{。
公共DBConnectLabelEventArgs(DBObject dBObject)。
{。
DBObject=dBObject;。
}。
公共DBObject DBObject{get;内部集;}。
}并且可以像这样使用:[命令方法("CatchDbConnect")]。
公共无效catchDbConnect()。
{。
var catcher=新的DBConnectLabelEvents(Application.DocumentManager.MdiActiveDocument.Database,"DCO15");。
catcher.LabelAddedCatcher_LabelAdded。
}。

私有空Catcher_LabelAdded(对象发送者,DBConnectLabelEventArgs e)。
{。
var ed=Application.DocumentManager.MdiActiveDocument.Editor;。
ed.WriteMessage("\n插入标签:{0}",e.DBObject.Handle);。
}。

Bryco 发表于 2018-5-7 14:26:40

我很抱歉没有回复威尔,这看起来真的很好。我希望下周能玩它 {。
e . dbobject . erase();。
var ed =应用程序,document manager . mdiactivedocument . editor;。
ed,write message(" \ n插入的标签:{0} ",e . dbobject . handle);。
});。
for (int i = actions,count-1;I > = 0;我- )。
{。
动作,invoke();。
动作,remove at(I);。
}。
}。
终于到了。
{。
if(e . dbobject . isnotifyenabled)。
e . dbobject . degrade to notify(doWeModify);。
}。
}。

Bryco 发表于 2018-5-18 18:47:51

testopennotify在选定的标签上工作正常,但使用CatchDbConnect时
多行文字就不正常了。IsNotifyEnabled,但为。是通知,不允许我降级或升级。
因此,以后我可能必须让绘图员手动选择多行文字。
页: [1]
查看完整版本: 用于dbconnect标签的挂钩