Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: Blesya от 25-07-2024, 05:12:49
-
Длительное время не могу решить проблему, как обновить геометрию штриховки?
Есть замкнутая полилиния с которой ассоциирована штриховка, если изменить полилинию путём перемещения грипов мышкой - то Hatch перестроится, но если изменить полилинию программным путём, то Hatch не перестроит свою геометрию. Связь между Hatch и полилинией не разрывается, последующее изменение полилинии через перемещение грипа вызовет перестроение геометрии штриховки.
На данный момент нашёл единственный вариант: после изменения геометрии полилинии из Hatch удалить луп, и заново добавить через AppendLoop.
Можно ли как-то иначе заставить Hatch перестроить свою геометрию?
Пробовал вызывать EvaluateHatch - не помогает.
-
Можно ли как-то иначе заставить Hatch перестроить свою геометрию?
Если связь не разрывается, возможно нужно вызвать регенерацию экрана, после изменения контура.
Также можешь попробовать включить/выключить свойство Associative, если связь с контуром не удалится или вызвать метод SetHatchPattern
-
Если связь не разрывается, возможно нужно вызвать регенерацию экрана, после изменения контура.
Также можешь попробовать включить/выключить свойство Associative, если связь с контуром не удалится или вызвать метод SetHatchPattern
Пробовал все эти варианты, штриховка упорно отказывалась перестраиваться)
Надеюсь найти какой-то вариант, кроме как пересоздавать лупы, а иначе - остановлюсь на нём.
-
Надеюсь найти какой-то вариант, кроме как пересоздавать лупы, а иначе - остановлюсь на нём.
Возможно это единственный вариант.
Посмотри тут:
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)
-
Еще можешь попробовать передать не заполненный массив id, возможно этого достаточно для запуска регенерации, примерно так:
var objectIdCollection = new ObjectIdCollection();
Hatch.AppendLoop(HatchLoopTypes, objectIdCollection)
Или так попробовать.
Hatch.AppendLoop(HatchLoopTypes, null)
Попробовал, оба варианта не работают и приводят к ошибке)
Выходи, что да: единственный вариант - это пересоздать лупы, но, в целом, меня этот вариант устроил, проблем с производительностью нет.
Спасибо!