Последние сообщения

Последние сообщения

Страницы: [1] 2 3 ... 10
1
Здравствуйте, столкнулся с проблемой: EntityColor.TrueColor возвращает не то значение, которое стоит в самом объекте по 420 коду. EntityColor пробовал как создавать из RGB, так и брать напрямую из объекта, результат одинаковый. Объект получается через Editor.SelectAll() с фильтром на текстовые объекты (Mtext, DBText, атрибуты блоков и т.д.).

Скриншоты кода дать не могу, но могу дать входные данные по одному из цветов: есть RGB-цвет (58,209,231), значения по кодам: (420 . 3854823), (62 . 133). Но в коде, при попытке получить TrueColor выдает "TrueColor = -1036332569". Результат одинаковый при создании EntityColor из RGB и при получении из Color.

Подскажите, пожалуйста, что это может быть, а то уже даже не знаю куда смотреть.

Autocad 2022, 2025.

Update:
Как обычно, после того как задал вопрос появляется какое-нибудь решение. Если вручную RGB в TrueColor (0x00RRGGBB) переводить, то всё работает, но вопрос всё так же остается: почему сам EntityColor не хочет правильно преобразовывать?







2
А что именно, hatch.EvaluateHatch(true);? Возможно кому-то пригодится правильный ответ.

А я добавил всё сразу.

Код - C# [Выбрать]
  1.                                                 hatch.EvaluateHatch(true);
  2.                                                 hatch.EvaluateHatch(false);
  3.                                                 hatch.EvaluateHatch(true);
  4.                                                 hatch.RecordGraphicsModified(true);
  5.  

3
AutoCAD .NET API / Re: Копирорование блоков
« Последний ответ от Александр_М 09-07-2025, 00:24:10 »
Еще один рабочий вариант.
Я отредактировал блок, удалил все атрибуты и добавил их последними, стало копироваться нормально.
Изначально блок был сделан в произвольном порядке и штриховки я просто отправил на задний план.
Видимо порядок создания копируется, а вот уже переопределение положения нет.
4
AutoCAD .NET API / Re: Копирорование блоков
« Последний ответ от Привалов Дмитрий 07-07-2025, 09:35:16 »
Всё работает.
Есть еще варианты, может кому-то может пригодятся для борьбы с недоработками определенных версий.
При ручной вставке блока DrawOrderTable обычно копируется и проблем нет.

В AutoCAD 2010  при ручной вставке блока или при вставке блока из палитры, точно не помню, DrawOrderTable не копировался.

В итоге проверил 2 рабочих варианта.
1. В том месте, где штриховка перекрывала объект, подрезал штриховку, избавившись от необходимости в DrawOrderTable.
2. Перестроил блоки программно. Считал порядок следования объектов из DrawOrderTable и пересоздал объекты в блоке. Объекты добавленные последними отображаются сверху.
5
Сработало. Теперь всё корректно.
А что именно, hatch.EvaluateHatch(true);? Возможно кому-то пригодится правильный ответ.
6
AutoCAD .NET API / Re: Копирорование блоков
« Последний ответ от Александр_М 06-07-2025, 22:20:26 »
Спасибо!

Сделал как тут https://adn-cis.org/forum/index.php?topic=9821.msg43667#msg43667
Всё работает.
7
AutoCAD .NET API / Re: Копирорование блоков
« Последний ответ от Александр Ривилис 06-07-2025, 19:03:49 »
Поиграйся с DrawOrderTable для блока. Есть примеры на форуме.
8
AutoCAD .NET API / Копирорование блоков
« Последний ответ от Александр_М 06-07-2025, 15:19:01 »
Добрый день.
Подскажите как решить проблему.

Копирую блок из одного чертежа в другой.
Код - C# [Выбрать]
  1.   public static void CopyBlockDefinition(string sourceDwgPath, string blockName, Database targetDb)
  2.         {
  3.             using (Database sourceDb = new Database(false, true))
  4.             {
  5.                 sourceDb.ReadDwgFile(sourceDwgPath, FileOpenMode.OpenForReadAndAllShare, false, null);
  6.  
  7.                 using (Transaction sourceTrans = sourceDb.TransactionManager.StartTransaction())
  8.                 {
  9.                     BlockTable sourceBt = (BlockTable)sourceTrans.GetObject(sourceDb.BlockTableId, OpenMode.ForRead);
  10.  
  11.                     if (!sourceBt.Has(blockName)) return;
  12.  
  13.                     ObjectId sourceBlockId = sourceBt[blockName];
  14.  
  15.                     using (Transaction targetTrans = targetDb.TransactionManager.StartTransaction())
  16.                     {
  17.                         IdMapping idMap = new IdMapping();
  18.                         sourceDb.WblockCloneObjects(
  19.                             new ObjectIdCollection() { sourceBlockId },
  20.                             targetDb.BlockTableId,
  21.                             idMap,
  22.                             DuplicateRecordCloning.Replace,
  23.                             false);
  24.  
  25.                         targetTrans.Commit();
  26.                     }
  27.  
  28.                     sourceTrans.Commit();
  29.                 }
  30.             }
  31.         }
  32.  

Всё работает, копия создаётся.
Но есть проблема.
В оригинальном блоке назначен порядок прорисовки объектов, а в копии он нарушен.
Порядок прорисовки важен. Получается атрибут закрыт штриховкой и его не видно.

При копировании ctrl+c ctrl+v естественно всё нормально.

Как скопировать блок сохранив порядок прорисовки?
 


9
Спасибо!
попробуй заменить на:
1. hatch.EvaluateHatch(true);
2. hatch.EvaluateHatch(false);
3. hatch.EvaluateHatch(true); hatch.RecordGraphicsModified(true);


Сработало. Теперь всё корректно.
10
hatch.RecordGraphicsModified(true);
hatch.RecordGraphicsModified(true);
попробуй заменить на:
1. hatch.EvaluateHatch(true);
2. hatch.EvaluateHatch(false);
3. hatch.EvaluateHatch(true); hatch.RecordGraphicsModified(true);

еще попробуй добавлять, удалять контур hatch.AppendLoop(...); hatch.EvaluateHatch(false); hatch.RemoveLoopAt(hatch.NumberOfLoops-1);



Страницы: [1] 2 3 ... 10