06/08/2014
Запись и чтение Lisp-переменных в .NET API
Мы знаем, что записывать и читать lisp-переменные можно при помощи P/Invoke функций acedGetSym/acedPutSym из ObjectARX. Однако начиная с AutoCAD 2013 мы можем воспользоваться методами SetLispSymbol и GetLispSymbol класса Document.В следующем примере мы обратим внимание на запись нескольких фрагментов данных в lisp-переменную. Для этой цели используем тип TypedValue со значением перечисления LispDataType
Код - C#: [Выделить]
- public static void PutSymbol()
- {
- Document d = Application.DocumentManager.MdiActiveDocument;
- Database db = d.Database;
- // Создаем список
- TypedValue[] tValue = new TypedValue[7];
- tValue.SetValue(new TypedValue((int)LispDataType.ListBegin), 0);
- tValue.SetValue(new TypedValue((int)LispDataType.Text,
- "Элемент 1 гланого списка"), 1);
- tValue.SetValue(new TypedValue((int)LispDataType.ListBegin), 2);
- tValue.SetValue(new TypedValue((int)LispDataType.Text,
- "Элемент 1 вложенного списка"), 3);
- tValue.SetValue(new TypedValue((int)LispDataType.Text,
- "Элемент 2 вложенного списка"), 4);
- tValue.SetValue(new TypedValue((int)LispDataType.ListEnd), 5);
- tValue.SetValue(new TypedValue((int)LispDataType.ListEnd), 6);
- d.SetLispSymbol("lst", tValue);
- }
- public static void GetSymbol()
- {
- Document d = Application.DocumentManager.MdiActiveDocument;
- Editor ed = d.Editor;
- PromptResult res = ed.GetString("\nИмя lisp-переменной: ");
- if (res.Status == PromptStatus.OK)
- {
- TypedValue[] tValue = (TypedValue[])d.GetLispSymbol(res.StringResult);
- if (tValue == null) return;
- foreach (TypedValue tV in tValue)
- {
- ed.WriteMessage("\n");
- ed.WriteMessage(tV.TypeCode + "," + tV.Value);
- }
- }
- }
Источник: http://adndevblog.typepad.com/autocad/2014/08/set-or-get-lisp-symbol-in-net.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=891
Опубликовано 06.08.2014