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

ADN Club => AutoCAD .NET API => Тема начата: Blesya от 25-07-2024, 05:12:49

Название: Обновление геометрии Hatch
Отправлено: Blesya от 25-07-2024, 05:12:49
Длительное время не могу решить проблему, как обновить геометрию штриховки?

Есть замкнутая полилиния с которой ассоциирована штриховка, если изменить полилинию путём перемещения грипов мышкой - то Hatch перестроится, но если изменить полилинию программным путём, то Hatch не перестроит свою геометрию. Связь между Hatch и полилинией не разрывается, последующее изменение полилинии через перемещение грипа вызовет перестроение геометрии штриховки.
На данный момент нашёл единственный вариант: после изменения геометрии полилинии из Hatch удалить луп, и заново добавить через AppendLoop.

Можно ли как-то иначе заставить Hatch перестроить свою геометрию?

Пробовал вызывать EvaluateHatch - не помогает.
Название: Re: Обновление геометрии Hatch
Отправлено: Привалов Дмитрий от 25-07-2024, 09:07:14
Можно ли как-то иначе заставить Hatch перестроить свою геометрию?
Если связь не разрывается, возможно нужно вызвать регенерацию экрана, после изменения контура.
Также можешь попробовать включить/выключить свойство Associative, если связь с контуром не удалится или вызвать метод SetHatchPattern
Название: Re: Обновление геометрии Hatch
Отправлено: Blesya от 25-07-2024, 10:21:23
Цитировать
Если связь не разрывается, возможно нужно вызвать регенерацию экрана, после изменения контура.
Также можешь попробовать включить/выключить свойство Associative, если связь с контуром не удалится или вызвать метод SetHatchPattern

Пробовал все эти варианты, штриховка упорно отказывалась перестраиваться)

Надеюсь найти какой-то вариант, кроме как пересоздавать лупы, а иначе - остановлюсь на нём.
Название: Re: Обновление геометрии Hatch
Отправлено: Привалов Дмитрий от 25-07-2024, 12:14:47
Надеюсь найти какой-то вариант, кроме как пересоздавать лупы, а иначе - остановлюсь на нём.
Возможно это единственный вариант.

Посмотри тут:
https://adndevblog.typepad.com/autocad/2012/07/hatch-using-the-autocad-net-api.html

Поэкспериментируй с этой последовательностью действий:
oHatch.SetHatchPattern
oHatch.Associative = true;
oHatch.AppendLoop
oHatch.EvaluateHatch(true)
Tx.Commit();

Попробуй выполнить все, потом закомментируй AppendLoop,
возможно только oHatch.AppendLoop обновляет, может еще что-то.

Еще можешь попробовать передать не заполненный массив id, возможно этого достаточно для запуска регенерации, примерно так:
var objectIdCollection = new ObjectIdCollection();
Hatch.AppendLoop(HatchLoopTypes, objectIdCollection)

Или так попробовать.
Hatch.AppendLoop(HatchLoopTypes, null)

Название: Re: Обновление геометрии Hatch
Отправлено: Blesya от 25-07-2024, 17:32:43
Цитировать
Еще можешь попробовать передать не заполненный массив id, возможно этого достаточно для запуска регенерации, примерно так:
var objectIdCollection = new ObjectIdCollection();
Hatch.AppendLoop(HatchLoopTypes, objectIdCollection)

Или так попробовать.
Hatch.AppendLoop(HatchLoopTypes, null)

Попробовал, оба варианта не работают и приводят к ошибке)
Выходи, что да: единственный вариант - это пересоздать лупы, но, в целом, меня этот вариант устроил, проблем с производительностью нет.
Спасибо!