Изменение цвета вложенных примитивов AutoCAD с помощью .NET

Автор Тема: Изменение цвета вложенных примитивов AutoCAD с помощью .NET  (Прочитано 11824 раз)

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

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн doctorRAZ

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: doctorraz
в строке 29
  doc.TransactionManager.StartTransaction();и 64
doc.TransactionManager.StartTransaction();опечатки, не с документом (doc) транзакция, а с базой (db)

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
doctorRAZ,
Это не опечатки. У документа (Document) тоже есть свойство TransactionManager:



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн doctorRAZ

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: doctorraz
Александр Ривилис,
Спасибо. Разбираюсь потихоньку
В AutoCAD я как раз и не проверил(((
Импортозамещение на нанотехнологии
т.е. так сработает?
Код - C# [Выбрать]
  1. Transaction tr = Application.DocumentManager.MdiActiveDocument.TransactionManager.StartTransaction();
в приведенном коде именно так получается, если заменить doc на присваивание
« Последнее редактирование: 29-07-2021, 17:33:41 от Александр Ривилис »

Оффлайн doctorRAZ

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: doctorraz
так работает
Код - C# [Выбрать]
  1. Transaction tr = doc.Database.TransactionManager.StartTransaction();
или так
Код - C# [Выбрать]
  1. Transaction tr = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction();
« Последнее редактирование: 29-07-2021, 17:34:00 от Александр Ривилис »

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
doctorRAZ,
Обрати внимание на правило форматирования кода на форуме (у меня в подписи) и соблюдай его!
так работает
Код - C# [Выбрать]

    Transaction tr = doc.Database.TransactionManager.StartTransaction();

или так
Код - C# [Выбрать]

    Transaction tr = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction();
Autodesk.AutoCAD.ApplicationServices.TransactionManager наследник Autodesk.AutoCAD.DatabaseServices.TransactionManager. Так что в данном случае можно использовать любой из них. Но если бы тебе понадобилось вызвать TransactionManager.FlushGraphics(), то doc.TransactionManager.FlushGraphics(), а не doc.Database.TransactionManager.FlushGraphics()
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Импортозамещение на нанотехнологии
У нас на форуме это не обсуждается!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн doctorRAZ

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: doctorraz
Спасибо,  проверил,  в AutoCAD это именно так и работает.
Без разницы DB или DOC

Оффлайн doctorRAZ

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: doctorraz
Этот код до входа в рекурсию  меняет цвет примитивов(Entity) в ModelSpace.
Проверяет каждую вставку блока в ModelSpace (даже если одно определение)
По задумке должен менять цвет только примитивам внутри блоков имеющих вхождения в ModelSpace

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
По задумке должен менять цвет только примитивам внутри блоков имеющих вхождения в ModelSpace
Да. Можно было бы сделать проще. Просто пройти по всем BlockTableRecord в BlockTable и менять цвет для всех Entity в BlockTableRecord. После этого выполнить Editor.Regen(). Тут и рекурсия не нужна.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн doctorRAZ

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: doctorraz
Еще вопрос
Возможно слегка за рамками этого топа.
В этом коде мы меняем цвет всем Entity (если я правильно понял, то вся графика в Space и базе чертежа наследники Entity)
Если я меняю атрибутам блока свойства: слой, или цвет на по слою..
В атрибутах вхождений блоков на чертеже эти изменения не отобразятся (кроме если явно указать цвет атрибута, то сразу)
т.е. надо обновлять атрибуты.
Собственно вопрос.. как это сделать из кода: обновить вид атрибутов (цвет, слой)

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Возможно слегка за рамками этого топа.
Поэтому создай для этого вопроса отдельную тему.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение