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

Статьи => Опубликованные статьи => Тема начата: Александр Ривилис от 21-10-2013, 05:30:03

Название: Изменение цвета вложенных примитивов AutoCAD с помощью .NET
Отправлено: Александр Ривилис от 21-10-2013, 05:30:03
Изменение цвета вложенных примитивов AutoCAD с помощью .NET
Название: Re: Изменение цвета вложенных примитивов AutoCAD с помощью .NET
Отправлено: doctorRAZ от 29-07-2021, 16:05:04
в строке 29
  doc.TransactionManager.StartTransaction();и 64
doc.TransactionManager.StartTransaction();опечатки, не с документом (doc) транзакция, а с базой (db)
Название: Re: Изменение цвета вложенных примитивов AutoCAD с помощью .NET
Отправлено: Александр Ривилис от 29-07-2021, 16:11:30
doctorRAZ,
Это не опечатки. У документа (Document) тоже есть свойство TransactionManager:

(https://live.staticflickr.com/65535/51342156597_6ec2ef0241_o.png)

Название: Re: Изменение цвета вложенных примитивов AutoCAD с помощью .NET
Отправлено: doctorRAZ от 29-07-2021, 16:37:26
Александр Ривилис,
Спасибо. Разбираюсь потихоньку
В AutoCAD я как раз и не проверил(((
Импортозамещение на нанотехнологии
т.е. так сработает?
Код - C# [Выбрать]
  1. Transaction tr = Application.DocumentManager.MdiActiveDocument.TransactionManager.StartTransaction();
в приведенном коде именно так получается, если заменить doc на присваивание
Название: Re: Изменение цвета вложенных примитивов AutoCAD с помощью .NET
Отправлено: doctorRAZ от 29-07-2021, 16:41:46
так работает
Код - C# [Выбрать]
  1. Transaction tr = doc.Database.TransactionManager.StartTransaction();
или так
Код - C# [Выбрать]
  1. Transaction tr = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction();
Название: Re: Изменение цвета вложенных примитивов AutoCAD с помощью .NET
Отправлено: Александр Ривилис от 29-07-2021, 17:40:57
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()
Название: Re: Изменение цвета вложенных примитивов AutoCAD с помощью .NET
Отправлено: Александр Ривилис от 29-07-2021, 17:42:12
Импортозамещение на нанотехнологии
У нас на форуме это не обсуждается!
Название: Re: Изменение цвета вложенных примитивов AutoCAD с помощью .NET
Отправлено: doctorRAZ от 29-07-2021, 21:00:04
Спасибо,  проверил,  в AutoCAD это именно так и работает.
Без разницы DB или DOC
Название: Re: Изменение цвета вложенных примитивов AutoCAD с помощью .NET
Отправлено: doctorRAZ от 31-07-2021, 13:42:53
Этот код до входа в рекурсию  меняет цвет примитивов(Entity) в ModelSpace.
Проверяет каждую вставку блока в ModelSpace (даже если одно определение)
По задумке должен менять цвет только примитивам внутри блоков имеющих вхождения в ModelSpace
Название: Re: Изменение цвета вложенных примитивов AutoCAD с помощью .NET
Отправлено: Александр Ривилис от 31-07-2021, 15:04:20
По задумке должен менять цвет только примитивам внутри блоков имеющих вхождения в ModelSpace
Да. Можно было бы сделать проще. Просто пройти по всем BlockTableRecord в BlockTable и менять цвет для всех Entity в BlockTableRecord. После этого выполнить Editor.Regen(). Тут и рекурсия не нужна.
Название: Re: Изменение цвета вложенных примитивов AutoCAD с помощью .NET
Отправлено: doctorRAZ от 01-08-2021, 19:54:24
Еще вопрос
Возможно слегка за рамками этого топа.
В этом коде мы меняем цвет всем Entity (если я правильно понял, то вся графика в Space и базе чертежа наследники Entity)
Если я меняю атрибутам блока свойства: слой, или цвет на по слою..
В атрибутах вхождений блоков на чертеже эти изменения не отобразятся (кроме если явно указать цвет атрибута, то сразу)
т.е. надо обновлять атрибуты.
Собственно вопрос.. как это сделать из кода: обновить вид атрибутов (цвет, слой)
Название: Re: Изменение цвета вложенных примитивов AutoCAD с помощью .NET
Отправлено: Александр Ривилис от 01-08-2021, 20:34:28
Возможно слегка за рамками этого топа.
Поэтому создай для этого вопроса отдельную тему.