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

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

Страницы: 1 ... 8 9 [10]
91
Уважаемый Александр. Спасибо за содержательное разъяснение. Но осталась одна проблема:
Динамический блок содержал атрибут в который по умолчанию было вставлено поле, которое ссылается на свойство этого же блока (BlockPlaceholder), например Position.
Так вот при вставке BlockReference используя выше приведенный код - поле "ломается".
Может Вы знаете как это исправить?

p.s. Покапался на форуме, вроде нашел что нужно:
https://adn-cis.org/forum/index.php?topic=9353.msg39198#msg39198
Буду проверять.
92
AutoCAD .NET API / Re: Доработка формы поиска
« Последний ответ от trir 26-07-2024, 14:43:41 »
Цитировать
местоположение layouts
Чё? :o
93
AutoCAD .NET API / Re: Доработка формы поиска
« Последний ответ от Алексей Кулик 26-07-2024, 12:31:30 »
Как привести val2 ?  И дальше прогнать по алгоритму приведенному ниже. И вывести в грид найденное в чертеже в описании блоков(мтекст, текст).
Код - C# [Выбрать]
  1. if (LikeOperator.LikeString(Versioned.TypeName(val2), "*IAcad*Text*", CompareMethod.Binary) && LikeOperator.LikeString(Strings.LCase(Cable_Net.Привести_к_Русскому_без_пробелов(Conversions.ToString(NewLateBinding.LateGet(val2, null, "TextString", new object[0], null, null, null)))), pattern, CompareMethod.Binary))
  2.  
  3.                     {
  4.                  ModuleZoom.Найдено = true;
  5.  
  6.  string text3 = ((!LikeOperator.LikeString(Versioned.TypeName(val2), "IAcadMText*", CompareMethod.Binary)) ? Conversions.ToString(NewLateBinding.LateGet(val2, null, "TextString", new object[0], null, null, null)) : searchBox.Text);
  7.  string name = val.Name;
  8.  
  9.  string handle = val2.Handle;
  10.  
  11.  Grid.Rows.Add(text3, name, handle, Conversions.ToString(checked(Grid.Rows.Count - 0)));
  12.  

У меня находит текст на чертеже и даже местоположение указывает, если итерацию в layout задать . Только найденные значения повторяются по много раз.  Итерация не заканчивается. На чертеже находит больше 70к объектов

Угу, а проверять наличие такого же текста - никак?
94
AutoCAD .NET API / Re: Доработка формы поиска
« Последний ответ от Kirill2001 26-07-2024, 11:37:51 »
Как привести val2 ?  И дальше прогнать по алгоритму приведенному ниже. И вывести в грид найденное в чертеже в описании блоков(мтекст, текст).
Код - C# [Выбрать]
  1. if (LikeOperator.LikeString(Versioned.TypeName(val2), "*IAcad*Text*", CompareMethod.Binary) && LikeOperator.LikeString(Strings.LCase(Cable_Net.Привести_к_Русскому_без_пробелов(Conversions.ToString(NewLateBinding.LateGet(val2, null, "TextString", new object[0], null, null, null)))), pattern, CompareMethod.Binary))
  2.  
  3.                     {
  4.                  ModuleZoom.Найдено = true;
  5.  
  6.  string text3 = ((!LikeOperator.LikeString(Versioned.TypeName(val2), "IAcadMText*", CompareMethod.Binary)) ? Conversions.ToString(NewLateBinding.LateGet(val2, null, "TextString", new object[0], null, null, null)) : searchBox.Text);
  7.  string name = val.Name;
  8.  
  9.  string handle = val2.Handle;
  10.  
  11.  Grid.Rows.Add(text3, name, handle, Conversions.ToString(checked(Grid.Rows.Count - 0)));
  12.  

У меня находит текст на чертеже и даже местоположение указывает, если итерацию в layout задать . Только найденные значения повторяются по много раз.  Итерация не заканчивается. На чертеже находит больше 70к объектов
95
AutoCAD .NET API / Re: Доработка формы поиска
« Последний ответ от Алексей Кулик 26-07-2024, 10:46:49 »
Не пойму, что делал неправильно вот код без транзакций, блоки находи. Но теперь местоположение layouts не показывает при нажатии на найденную позицию в datagridview. Мтекст находит но символы в ячейке datagridview  отображаются пустыми


Код - C# [Выбрать]
  1. foreach (AcadLayout item in (IAcadLayouts)layouts)
  2.                 {
  3.                         AcadLayout val = item;
  4.                         AcadBlock block = ((IAcadLayout)val).Block;
На выходе получаю одинаковые строки если добавить AcadLayout


Код - C# [Выбрать]
  1. AcadLayouts layouts = ModuleZoom.ThisDrawing.Layouts;
  2. foreach (AcadBlock item in ModuleZoom.ThisDrawing.Blocks)
  3. {
  4.     AcadBlock val = item;
  5.  
  6.     foreach (AcadEntity item2 in val)
  7.     {
  8.         AcadEntity val2 = item2;
  9. internal static void ActivViePortLock()
  10. {
  11.     if (LikeOperator.LikeString(ThisDrawing.ActiveLayout.Block.Name, "*Paper*", CompareMethod.Binary) && ThisDrawing.MSpace)
  12.     {
  13.         ThisDrawing.MSpace = false;
  14.     }
  15.            string name = val.Name;
  16.  
  17.            string handle = val2.Handle;
  18.  
  19. Grid.Rows.Add(text3, name, handle, Conversions.ToString(checked(Grid.Rows.Count - 0)));
  20.  

Как сделать так что бы и блоки искало и местоположение показывало при нажатии на найденный текст в ячейке :) ?
Очень похоже на работу с CAD через COM вместо того, чтоб работать "напрямую". Напоминает вырезание гланд автогеном.
---
Добавлено: и есть логический вопрос - один и тот же текст входит в описания 2 разных блоков. Первый вставлен 2 раза - один раз в пространстве модели, второй раз - внутри третьего блока. Второй блок вообще не имеет вхождений. Чего делать надо?
96
Разное / Re: AutoCAD Help
« Последний ответ от Алексей Кулик 25-07-2024, 20:41:00 »
IP РФ блокированы. Лечится только VPN или установкой локальной копии справки
97
AutoCAD .NET API / Re: Обновление геометрии Hatch
« Последний ответ от Blesya 25-07-2024, 17:32:43 »
Цитировать
Еще можешь попробовать передать не заполненный массив id, возможно этого достаточно для запуска регенерации, примерно так:
var objectIdCollection = new ObjectIdCollection();
Hatch.AppendLoop(HatchLoopTypes, objectIdCollection)

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

Попробовал, оба варианта не работают и приводят к ошибке)
Выходи, что да: единственный вариант - это пересоздать лупы, но, в целом, меня этот вариант устроил, проблем с производительностью нет.
Спасибо!
98
AutoCAD .NET API / 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)

99
AutoCAD .NET API / Re: Доработка формы поиска
« Последний ответ от Kirill2001 25-07-2024, 10:57:40 »
Не пойму, что делал неправильно вот код без транзакций, блоки находи. Но теперь местоположение layouts не показывает при нажатии на найденную позицию в datagridview. Мтекст находит но символы в ячейке datagridview  отображаются пустыми


Код - C# [Выбрать]
  1. foreach (AcadLayout item in (IAcadLayouts)layouts)
  2.                 {
  3.                         AcadLayout val = item;
  4.                         AcadBlock block = ((IAcadLayout)val).Block;
На выходе получаю одинаковые строки если добавить AcadLayout


Код - C# [Выбрать]
  1. AcadLayouts layouts = ModuleZoom.ThisDrawing.Layouts;
  2. foreach (AcadBlock item in ModuleZoom.ThisDrawing.Blocks)
  3. {
  4.     AcadBlock val = item;
  5.  
  6.     foreach (AcadEntity item2 in val)
  7.     {
  8.         AcadEntity val2 = item2;
  9. internal static void ActivViePortLock()
  10. {
  11.     if (LikeOperator.LikeString(ThisDrawing.ActiveLayout.Block.Name, "*Paper*", CompareMethod.Binary) && ThisDrawing.MSpace)
  12.     {
  13.         ThisDrawing.MSpace = false;
  14.     }
  15.            string name = val.Name;
  16.  
  17.            string handle = val2.Handle;
  18.  
  19. Grid.Rows.Add(text3, name, handle, Conversions.ToString(checked(Grid.Rows.Count - 0)));
  20.  

Как сделать так что бы и блоки искало и местоположение показывало при нажатии на найденный текст в ячейке :) ?
100
AutoCAD .NET API / Re: Обновление геометрии Hatch
« Последний ответ от Blesya 25-07-2024, 10:21:23 »
Цитировать
Если связь не разрывается, возможно нужно вызвать регенерацию экрана, после изменения контура.
Также можешь попробовать включить/выключить свойство Associative, если связь с контуром не удалится или вызвать метод SetHatchPattern

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

Надеюсь найти какой-то вариант, кроме как пересоздавать лупы, а иначе - остановлюсь на нём.
Страницы: 1 ... 8 9 [10]