Как присвоить стрелку размеру

Автор Тема: Как присвоить стрелку размеру  (Прочитано 2547 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн avcАвтор темы

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Если пользователь меняет у размера стандартную стрелку на другой блок, то Автокад где-то находит стандартные блоки стрелок (типа _DotBlank) даже когда таких блков нет ни в чертеже, ни в шаблоне. Вопрос в том, как мне в программе присвоить RotatedDimension.Dimblk1 стрелку _DotBlank, если такого блока пока нет? Нашел только что в ObjectARX свойство Dimblk1 не ObjectId, а текстовое - там все просто
Код - C++ [Выбрать]
  1. pAlignedDim->setDimblk1(_T("None" ));

А как такое реализовать в .Net? Загружать блоки из другого файла я умею, но откуда загрузить?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Как присвоить стрелку размеру
« Ответ #1 : 19-05-2017, 18:33:49 »
Может быть, они ниоткуда не грузятся? Не удивлюсь, если где-то прямо в коде прописано программное создание этих блоков в чертеже. Они довольно примитивны (особенно, блок _None  ;)).
P.S. Хех: http://adndevblog.typepad.com/autocad/2012/06/modifying-arrow-head-of-dimensionleader.html

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Как присвоить стрелку размеру
« Ответ #2 : 19-05-2017, 18:37:52 »
Ответ тут
Код - C# [Выбрать]
  1. static ObjectId GetArrowObjectId(string newArrName)
  2.     {
  3.       ObjectId arrObjId = ObjectId.Null;
  4.  
  5.       Document doc =
  6.         Application.DocumentManager.MdiActiveDocument;
  7.       Database db = doc.Database;
  8.  
  9.       // Get the current value of DIMBLK
  10.       string oldArrName =
  11.         Application.GetSystemVariable(
  12.           "DIMBLK"
  13.         ) as string;
  14.  
  15.       // Set DIMBLK to the new style
  16.       // (this action may create a new block)
  17.       Application.SetSystemVariable(
  18.         "DIMBLK",
  19.         newArrName
  20.       );
  21.  
  22.       // Reset the previous value of DIMBLK
  23.       if (oldArrName.Length != 0)
  24.         Application.SetSystemVariable(
  25.           "DIMBLK",
  26.           oldArrName
  27.         );
  28.  
  29.       // Now get the objectId of the block
  30.       Transaction tr =
  31.         db.TransactionManager.StartTransaction();
  32.       using(tr)
  33.       {
  34.         BlockTable bt =
  35.           (BlockTable)tr.GetObject(
  36.             db.BlockTableId,
  37.             OpenMode.ForRead
  38.           );
  39.  
  40.         arrObjId = bt[newArrName];
  41.         tr.Commit();
  42.       }
  43.       return arrObjId;
  44.     }

Оффлайн avcАвтор темы

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Re: Как присвоить стрелку размеру
« Ответ #3 : 19-05-2017, 19:09:26 »
ха! Системная переменная в самом деле текстовая. Оригинальный костыль :)
Проверил, работает.
Спасибо!