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

ADN Club => AutoCAD .NET API => Тема начата: Yusuf от 10-09-2020, 12:34:38

Название: Выборка ячеек таблицы рамкой?
Отправлено: Yusuf от 10-09-2020, 12:34:38
здравствуйте, подскажите как можно выбрать ячейки таблицы рамкой на С#?
Еще подскажите где можно найти информации при autocad api в в виде дерева как revit api, например  autocad.net developers guide ничего про таблицы не нашел ?
И как можно установить autocad wizard 2019 на visual studio 2019?
Спасибо
Название: Re: Выборка ячеек таблицы рамкой?
Отправлено: Александр Ривилис от 10-09-2020, 12:44:59
Yusuf,
Приветствую на форуме!
На нашем форуме принято правило "один вопрос - одна тема". В этой теме я отвечу только на вопрос, заданный в названии темы. На остальные создавай отдельные темы.
Для того чтобы выбрать ячейки рамкой тебе нужно при помощи двух вызовов задать угловые точки рамки:
1) Editor.GetPoint
2) Editor.GetCorner
По этим двум точкам при помощи Editor.SelectWindow (или Editor.SelectCrossingWindow) находишь саму таблицу.
Ну а при помощи метода Table.SelectSubRegion  выделяешь нужные ячейки.
Название: Re: Выборка ячеек таблицы рамкой?
Отправлено: Yusuf от 10-09-2020, 14:06:06
Yusuf,
Приветствую на форуме!
На нашем форуме принято правило "один вопрос - одна тема". В этой теме я отвечу только на вопрос, заданный в названии темы. На остальные создавай отдельные темы.
Для того чтобы выбрать ячейки рамкой тебе нужно при помощи двух вызовов задать угловые точки рамки:
1) Editor.GetPoint
2) Editor.GetCorner
По этим двум точкам при помощи Editor.SelectWindow (или Editor.SelectCrossingWindow) находишь саму таблицу.
Ну а при помощи метода Table.SelectSubRegion  выделяешь нужные ячейки.
Спасибо, как добраться до id таблицы, не получается дальше продвинутся, можете посмотреть код res выводит ошибку?

 
Код - C# [Выбрать]
  1. [CommandMethod("selCelTable")]
  2.         public void CellOfTable()
  3.         {
  4.             Document document = Application.DocumentManager.MdiActiveDocument;
  5.             Editor ed = document.Editor;
  6.             Database db = document.Database;
  7.             Editor acDocEd = Application.DocumentManager.MdiActiveDocument.Editor;
  8.            
  9.             PromptPointResult pPtRes;
  10.             PromptPointOptions pPtOpts = new PromptPointOptions("");
  11.             // Prompt for the start point
  12.             pPtOpts.Message = "\nEnter the start point: ";
  13.             pPtRes = document.Editor.GetPoint(pPtOpts);
  14.             Point3d ptStart = pPtRes.Value;
  15.             // Exit if the user presses ESC or cancels the command
  16.             if (pPtRes.Status == PromptStatus.Cancel) return;
  17.             // Prompt for the end point
  18.             pPtOpts.Message = "\nEnter the end point: ";
  19.             pPtOpts.UseBasePoint = true;
  20.             pPtOpts.BasePoint = ptStart;
  21.             pPtRes = document.Editor.GetCorner(pPtOpts);
  22.  
  23.             Point3d ptEnd = pPtRes.Value;
  24.  
  25.             if (pPtRes.Status == PromptStatus.Cancel) return;
  26.  
  27.             PromptSelectionResult res = ed.SelectWindow(ptStart, ptEnd);
  28.  
  29.             if (res.Status != PromptStatus.OK)
  30.                 return;
  31.  
  32.             SelectionSet sset = res.Value;
  33.  
  34.             if (sset.Count == 0)
  35.                 return;
  36. }
  37.  
Название: Re: Выборка ячеек таблицы рамкой?
Отправлено: Александр Ривилис от 10-09-2020, 14:08:36
можете посмотреть код res выводит ошибку?
В какой строке кода? И какую ошибку?
Стоп. Я понял. В рамку у тебя не попадает таблица полностью. Соответственно она не выбирается. Так что нужно использовать Editor.SelectCrossingWindow, чтобы она была выбрана.
Ну и лучше использовать метод Editor.SelectCrossingWindow(Point3d, Point3d, SelectionFilter) чтобы быть уверенным что выберется именно таблица (создать правильный SelectionFilter).
Название: Re: Выборка ячеек таблицы рамкой?
Отправлено: Yusuf от 10-09-2020, 15:57:47
можете посмотреть код res выводит ошибку?
В какой строке кода? И какую ошибку?
Стоп. Я понял. В рамку у тебя не попадает таблица полностью. Соответственно она не выбирается. Так что нужно использовать Editor.SelectCrossingWindow, чтобы она была выбрана.
Ну и лучше использовать метод Editor.SelectCrossingWindow(Point3d, Point3d, SelectionFilter) чтобы быть уверенным что выберется именно таблица (создать правильный SelectionFilter).

Спасибо, до таблицы добрался, только не могу найти FullSubentityPath[] ? И что такое hitTestViewDirection ?
Название: Re: Выборка ячеек таблицы рамкой?
Отправлено: Александр Ривилис от 10-09-2020, 16:05:36
И что такое hitTestViewDirection ?
Направление взгляда. Если вид сверху, то Vector3d.ZAxis
не могу найти FullSubentityPath[] ?
Зачем его искать?
Название: Re: Выборка ячеек таблицы рамкой?
Отправлено: Yusuf от 10-09-2020, 16:12:50
Зачем его искать?
Table.SelectSubRegion хочет его
Название: Re: Выборка ячеек таблицы рамкой?
Отправлено: Александр Ривилис от 10-09-2020, 16:14:33
Зачем его искать?
Table.SelectSubRegion хочет его
Цитировать
If Paths is not null, the cell subentities, including bounding grid lines, MTexts, and block inserts, will be returned in Paths.
Передай вместо него null.

Название: Re: Выборка ячеек таблицы рамкой?
Отправлено: Yusuf от 11-09-2020, 06:43:23
Передай вместо него null.
получилось, указываем 2 точки находим выбранные верхние, нижние строки и левый и правый колонки потом итерацией получаю значения. Спасибо