doctorraz Posted August 27, 2021 Report Share Posted August 27, 2021 (edited) При поытке получить RXClass объекта MultiCAD, RXObject.GetClass вызывает исключение Цитата System.IndexOutOfRangeException: Индекс находился вне границ массива. в Teigha.Runtime.RXObject.GetClass(Type type) Спойлер можно конечно получить string stOb = pval.ObjectClass.Name; и по нему проверить, но это дольше на треть Подскажите куда копать? Edited August 27, 2021 by doctorraz Quote Link to comment Share on other sites More sharing options...
ISL Posted August 31, 2021 Report Share Posted August 31, 2021 Так нет, видать, такого класса среди зарегистрированных. А если у экземпляра его класс спросить? Quote Link to comment Share on other sites More sharing options...
doctorraz Posted August 31, 2021 Author Report Share Posted August 31, 2021 (edited) 23 минуты назад, ISL сказал: А если у экземпляра его класс спросить? так? string message = "\nВыберите примитив: "; PromptEntityOptions optEnt = new PromptEntityOptions(message); PromptEntityResult psr = ed.GetEntity(optEnt); if (psr.Status == PromptStatus.OK) { ObjectId pval = psr.ObjectId; RXClass rxOb = pval.ObjectClass; ed.WriteMessage("\nName {0} DxfName {1} AppName {2}", rxOb.Name, rxOb.DxfName, rxOb.AppName ); } Так могу получить, могу по Name проверить, что за объект, но это дольше чем сравнивать с RXObject.GetClass ----------- Просто я не знаю, может для объектов МС надо как-то по другому, или невозможно. Студия то класс видит.. Edited August 31, 2021 by doctorraz Quote Link to comment Share on other sites More sharing options...
doctorraz Posted August 31, 2021 Author Report Share Posted August 31, 2021 Спойлер Quote Link to comment Share on other sites More sharing options...
ISL Posted August 31, 2021 Report Share Posted August 31, 2021 RXObject.GetClass() на MultiCAD.NET объектах не работает, т.к. у них нет атрибута HostMgd.Runtime.WrapperClass(), связывающего .NET класс и DXF имя объекта. А нет его там, т.к. MultiCAD.NET не зависит от классического .NET API. RxClass по DXF имени можно получить так: SystemObjects.ClassDictionary.At("AcDbLine"); Quote Link to comment Share on other sites More sharing options...
doctorraz Posted August 31, 2021 Author Report Share Posted August 31, 2021 Спасибо! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.