ADN Open CIS
Сообщество программистов Autodesk в СНГ

06/08/2014

Запись и чтение Lisp-переменных в .NET API

Мы знаем, что записывать и читать lisp-переменные можно при помощи P/Invoke функций acedGetSym/acedPutSym из ObjectARX. Однако начиная с AutoCAD 2013 мы можем воспользоваться методами SetLispSymbol и GetLispSymbol класса Document.

В следующем примере мы обратим внимание на запись нескольких фрагментов данных в lisp-переменную. Для этой цели используем тип TypedValue со значением перечисления LispDataType

Код - C#: [Выделить]
  1.  
  2. public static void PutSymbol()
  3. {
  4.   Document d = Application.DocumentManager.MdiActiveDocument;
  5.   Database db = d.Database;
  6.   // Создаем список
  7.   TypedValue[] tValue = new TypedValue[7];
  8.   tValue.SetValue(new TypedValue((int)LispDataType.ListBegin), 0);
  9.   tValue.SetValue(new TypedValue((int)LispDataType.Text,
  10.                                   "Элемент 1 гланого списка"), 1);
  11.   tValue.SetValue(new TypedValue((int)LispDataType.ListBegin), 2);
  12.   tValue.SetValue(new TypedValue((int)LispDataType.Text,
  13.                                   "Элемент 1 вложенного списка"), 3);
  14.   tValue.SetValue(new TypedValue((int)LispDataType.Text,
  15.                                   "Элемент 2 вложенного списка"), 4);
  16.   tValue.SetValue(new TypedValue((int)LispDataType.ListEnd), 5);
  17.   tValue.SetValue(new TypedValue((int)LispDataType.ListEnd), 6);
  18.   d.SetLispSymbol("lst", tValue);
  19. }
  20.  
  21. public static void GetSymbol()
  22. {
  23.   Document d = Application.DocumentManager.MdiActiveDocument;
  24.   Editor ed = d.Editor;
  25.   PromptResult res = ed.GetString("\nИмя lisp-переменной: ");
  26.   if (res.Status == PromptStatus.OK)
  27.   {
  28.       TypedValue[] tValue = (TypedValue[])d.GetLispSymbol(res.StringResult);
  29.       if (tValue == null) return;
  30.       foreach (TypedValue tV in tValue)
  31.       {
  32.           ed.WriteMessage("\n");
  33.           ed.WriteMessage(tV.TypeCode + "," + tV.Value);
  34.       }
  35.    }
  36. }

Источник: 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