ADN Club > AutoCAD .NET API

Работа с маскировкой

(1/3) > >>

xSAKABSx:
Обрекла меня жизнь на то что надо включать и отключать контура маскировок через .net

но дальше  данного кода я не ушел,
потому как не могу понять что за обьект мне отдают


--- Код - C# [Выбрать] ---[CommandMethod("wptest")]        public static void wptest()        {            Document acDoc = Application.DocumentManager.MdiActiveDocument;            Editor acEd = acDoc.Editor;            Database acDB = acDoc.Database;             using (Transaction acTrans = acDB.TransactionManager.StartTransaction())            {                try                {                    DBDictionary theNOD = acTrans.GetObject(acDB.NamedObjectsDictionaryId, OpenMode.ForRead) as DBDictionary;                    string wipeotVarName = "ACAD_WIPEOUT_VARS";                    foreach (DBDictionaryEntry dEntry in theNOD)                     {                    acEd.WriteMessage("\n {0}",dEntry.Key);                    if (dEntry.Key == wipeotVarName)                     {                        DBObject currOBJ = acTrans.GetObject(dEntry.Value, OpenMode.ForRead) as DBObject;                        acEd.WriteMessage("\n " + currOBJ.GetType());                                                                }}                              }                catch{}}        } 
Помогите люди добрые =)

xSAKABSx:
Сам нашел ответ и он простой  с версии R19.0 появилась системная переменная WIPEOUTFRAME
В  18 её нет
 

--- Цитата: Kean Walmsley ---
Not that I'm aware of. I see there's a read-only property Wipeout.HasFrame, but I can't see a way to control that programmatically (whether in the Wipeout class, its parent RasterImage class or the parallel COM interface).

You might try ADN or the AutoCAD .NET Discussion Group (please let me know what you find out).

Regards,

--- Конец цитаты ---

Андрей Бушман:
Я вообще не понял ту муть, что написана в коде первого сообщения. Решение простое, насколько я вижу в документации:

--- Код - C# [Выбрать] ---Wipeout.HasFrame

xSAKABSx:

--- Цитата: Андрей Бушман от 04-12-2013, 16:35:47 ---Я вообще не понял ту муть, что написана в коде первого сообщения. Решение простое, насколько я вижу в документации:

--- Код - C# [Выбрать] ---Wipeout.HasFrame
--- Конец цитаты ---
Андрей  в документации оно рид/врайт, по факту только рид (проверено на R18)

Андрей Бушман:

--- Цитата: xSAKABSx от 04-12-2013, 16:59:10 ---Андрей  в документации оно рид/врайт, по факту только рид (проверено на R18)
--- Конец цитаты ---

В R17.2 оно доступно для чтения\записи но, как оказалось, на видимость wipeout не влияет. Видимостью каждого wipeout можно управлять индивидуально, при желании, через свойство Visible. Набросал код по мотивам обозначенной в комментариях статьи:


--- Код - C# [Выбрать] ---// AutoCAD 2009// Based on the http://through-the-interface.typepad.com/through_the_interface/2007/12/creating-an-aut.htmlusing cad = Autodesk.AutoCAD.ApplicationServices.Application;using App = Autodesk.AutoCAD.ApplicationServices;using Db = Autodesk.AutoCAD.DatabaseServices;using Ed = Autodesk.AutoCAD.EditorInput;using Rtm = Autodesk.AutoCAD.Runtime;using Gem = Autodesk.AutoCAD.Geometry; namespace WipeoutApplication {    public class Commands : Rtm.IExtensionApplication {         static Db.ObjectId id = Db.ObjectId.Null;         [Rtm.CommandMethod("wshow")]        public void wshow() {            set_visibility(true);        }         [Rtm.CommandMethod("whide")]        public void whide() {            set_visibility(false);        }         void set_visibility(System.Boolean value) {            if (id != Db.ObjectId.Null && !id.IsErased && id.IsValid) {                App.Document doc = cad.DocumentManager.MdiActiveDocument;                Db.Database db = doc.Database;                 using (Db.Transaction tr = db.TransactionManager.StartTransaction()) {                    Db.Wipeout wo = tr.GetObject(id, Db.OpenMode.ForWrite) as Db.Wipeout;                    wo.Visible = value;                    tr.Commit();                }            }        }         public void Initialize() {            App.Document doc = cad.DocumentManager.MdiActiveDocument;            Db.Database db = doc.Database;            Ed.Editor ed = doc.Editor;            ed.WriteMessage("The library is loaded.\n");             using (Db.Transaction tr = db.TransactionManager.StartTransaction()) {                Db.BlockTable bt = (Db.BlockTable)tr.GetObject(                    db.BlockTableId, Db.OpenMode.ForRead, false);                Db.BlockTableRecord btr = (Db.BlockTableRecord)tr.GetObject(                    bt[Db.BlockTableRecord.ModelSpace], Db.OpenMode.ForWrite, false);                 Gem.Point2dCollection pts = new Gem.Point2dCollection(5);                 pts.Add(new Gem.Point2d(0.0, 0.0));                pts.Add(new Gem.Point2d(100.0, 0.0));                pts.Add(new Gem.Point2d(100.0, 100.0));                pts.Add(new Gem.Point2d(0.0, 100.0));                pts.Add(new Gem.Point2d(0.0, 0.0));                 Db.Wipeout wo = new Db.Wipeout();                wo.SetDatabaseDefaults(db);                wo.SetFrom(pts, new Gem.Vector3d(0.0, 0.0, 0.1));                                wo.Visible = false; // Look at this.                 btr.AppendEntity(wo);                tr.AddNewlyCreatedDBObject(wo, true);                id = wo.ObjectId;                tr.Commit();            }        }         public void Terminate() {            // throw new System.NotImplementedException();        }    }}
В результате создаётся wipeout, отображением которого управляем индивидуально. Однако этот вариант годится скорее для таких случаев, когда ты хочешь перехватить управление отображением wipeout.

В более ранних версиях AutoCAD, где не доступна указанная тобою переменная WIPEOUTFRAME, можно прибегнуть к синхронному вызову команд в командной строке AutoCAD, запустив обозначенным способом команду FRAME с соответствующей опцией и присвоением ей нужного значения (ON\OFF) - тынц.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии