Jump to content

Получение данных из таблицы через API


Recommended Posts

viraeron

Есть большое количество чертежей, который вывалены в кучу и хотелось бы их как то отсортировать. В каждом чертеже есть одна и та же таблица, где изменяется название оборудования, для которого сделан чертеж. я думал через API достать название и дальше создать папки под каждый станок. немного владею c# и написал вот такую вещь:
 

using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using SolidWorks.Interop.swdocumentmgr;
using System.Diagnostics;
namespace GetCellRangeITableAnnotationCSharp.csproj
{
    partial class SolidWorksMacro
    {

        public void Main()
        {
            ModelDoc2 swModel = default(ModelDoc2);
            SelectionMgr swSelectionMgr = default(SelectionMgr);
            DrawingDoc swDrawing = default(DrawingDoc);
            Annotation swAnnotation = default(Annotation);
            TableAnnotation swTableAnnotation = default(TableAnnotation);
            int firstRow = 0;
            int lastRow = 0;
            int firstColumn = 0;
            int lastColumn = 0;
            int idx = 0;

            swModel = (ModelDoc2)swApp.ActiveDoc;
            swSelectionMgr = (SelectionMgr)swModel.SelectionManager;
            swDrawing = (DrawingDoc)swModel;
            string text = "";


            for (idx = 1; idx <= swSelectionMgr.GetSelectedObjectCount2(-1); idx++)
            {
                swTableAnnotation = (TableAnnotation)swSelectionMgr.GetSelectedObject6(idx, -1);
                swAnnotation = (Annotation)swTableAnnotation.GetAnnotation();

                swTableAnnotation.GetCellRange(ref firstRow, ref lastRow, ref firstColumn, ref lastColumn);
                text = swTableAnnotation.get_Text2(1, 4, true); //Достаю нужный текст из (1,4)
                Debug.Print("First selected cell's row     = " + firstRow);
                Console.WriteLine(text);
                Debug.Print("Last selected cell's row      = " + lastRow);
                Debug.Print("First selected cell's column  = " + firstColumn);
                Debug.Print("Last selected cell's column   = " + lastColumn);
                Debug.Print("");


            }

            if ((firstRow == -1))
            {
                Console.WriteLine("Selected entire table!");
            }

            swModel.ClearSelection2(true);
            Console.ReadKey();
        }


        /// <summary>
        /// The SldWorks swApp variable is pre-assigned for you.
        /// </summary>

        public SldWorks swApp;

    }
    class Program
    {
        static void Main(string[] args)
        {
            SolidWorksMacro macro = new SolidWorksMacro();
            macro.swApp = new SldWorks();

            macro.Main();
        }
    }
}

В этом коде text это и есть то что я должен получить. номер ячейки постоянный. проблема этого кода в том, то что необходимо выделить любую ячейку в этой таблице, чтобы он понял что это таблица. но с таким успехом уже проще руками все сделать. хотелось бы чтобы программа сама открывала файл чертежа и доставала данные с таблицы. открыть то чертеж не проблема, но не знаю как весь процесс автоматизировать, чтобы и чертежи сами открывались и данные из таблицы доставались
 

Link to post
Share on other sites


UnPinned posts
Maik812

Если много файлов , то может файловым менеджером воспользоваться ? Тотал командер справлялся на ура! У вас версия файлов Солида какая?

 

Если можно выделить и вывести часть текста в тотале с помощью плагина, то если сделаете под Тотал плагин который сможет вытаскивать часть искомых данных как для pdf файлов сделално было. Было бы круто, я лично был бы благодарен.

подобное поднималось для pdf фвйлов

 

https://wincmd.ru/plugring/WinScriptAdv.html

на основе этого плагина был написан макрос для выявления версии SolidWorks

Можно и выводить данные любые из файла.

Link to post
Share on other sites
Chuvak

@viraeron Попробуйте метод  swView.GetFirstTableAnnotation ,если у Вас всегда одна таблица на чертеже). Или swView.GetTableAnnotations , если несколько.

В документации к API есть примеры, ищите объект View

 
Edited by Chuvak
Link to post
Share on other sites
Maik812
03.01.2025 в 11:15, viraeron сказал:

но не знаю как весь процесс автоматизировать, чтобы и чертежи сами открывались и данные из таблицы доставались

в этом то и проблема тебе все файлы нужно открыть по очереди..

Link to post
Share on other sites
Chuvak

@Maik812 Чертежи можно также с помощью макроса автоматом открывать. Можно использовать методы и свойства FileSysytemObject по работе с папками и файлами или встроенные методы в языке VBA.

Link to post
Share on other sites
Maik812
4 минуты назад, Chuvak сказал:

помощью макроса автоматом открывать.

а сортировать , переносить и удалять?

Link to post
Share on other sites
Chuvak

Все можно, главное ТЗ грамотно составить)

Link to post
Share on other sites
viraeron

@Chuvak @Maik812 swView.GetFirstTableAnnotation, это то что я искал, почему то сам найти не смог. открывать чертежи не проблема, на это уже есть код, его просто в цикл закинуть. сортировка и перенос есть изначально в c#, так что это не такая проблема

 

@Maik812 через тотал идея конечно интересная, но у меня чертежи все сохранены в tif. чисто технически можно все перевести в pdf, и работать через тотал, но это нужна еще дополнительно куча действий. я посмотрел в интернете и есть сервисы которые достают таблицы из пдф файлов, но не уверен как такие сервисы поведут себя со штампом в чертеже

 

Link to post
Share on other sites
Maik812
6 часов назад, viraeron сказал:

через тотал идея конечно интересная, но у меня чертежи все сохранены в tif. чисто технически можно все перевести в pdf, и работать через тотал, но это нужна еще дополнительно куча действий. я посмотрел в интернете и есть сервисы которые достают таблицы из пдф файлов, но не уверен как такие сервисы поведут себя со штампом в чертеже

Ты не прав :) Обычно делается так с архивом. Тема кстати с pdf была поднята именно с переименование pdf файлов полученых из скана архива , кучей графических картинок к которым не как не подойти. Я вот не понимаю если чертежи в тифе причем тут апи Солида :)

Ну ладно суть простая , открывается Файн ридер и ему скармливается прям вся папка архива, после распознавание все сохраняется в pdf со слоем, учти там разные форматы пдф подберешь. Если заполнены рамки не рукой то 100% распознавание номера чертежа.  Как только вывел в столбец номер чертежа, групповое переименование  в имени плагин и фильтр который вывел текст в столбец, предворительно показывает результат. Клик и все переименовано по рамке или любому другому тексту от регулярки зависет!

Наименование не смог выделить.

Ну если напишешь крутое регулярное выражение, прошу поделись!!! Можешь воспользоваться всей темой и поднять ее там же.

P.S. работая тоталом и переименовывать иногда не требуется :) Работаю по столбцу или копирую значения в mPDM.wdx и работаю уже с этим столбцом, туда же ты можешь портировать данные найдены любыми регулярными выражениями и обычным поиском какого то слова или текста.

Edited by Maik812
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.



  • Сообщения

    • Chester
      это я понял. мне надо, чтобы сож включалась при старте первого инструмента (вроде сделал),  потом, если инструмент не меняется, то сож не выключается, если меняется, то сож после перехода выключается, а после смены включается опять.   @start_of_job                                                        тут включается в начале обработки.          ;call @usr_Cooling((1)) ;Coolant on     call @usr_SpecCharChange(job_name)     {nb, "(",dup("=",strlen(job_name)), ")"}     {nb, "("upper(job_name), ")"}     {nb, "(",dup("=",strlen(job_name)), ")"}     l_FirstSpin = true     l_FirstMove = true endp     @end_program                                                    тут выключается в конце обработки     call @usr_Cooling((3)) ;Coolant off     {nb, (5):mcode_f}     call @usr_SafePosition((1)) ;Tool retract in XYZ axis     {nb, (30):mcode_f} endp   а вот в середине программы иногда делает, иногда нет. М8 и М9 руками расставляю.   блок @usr_Cooling(integer type) большой, поэтому весь пост прикреплю. SINO V-8D_3x.gpp
    • Leon
      Да, после того как таблица вставлена на лист вы можете двигать, удалять и добавлять строки как угодно. Макрос собственно этим и занимается.
    • andref
      А это вам  нужно не из за появления ошибки по смазки шпинделя?  На DMU 80 залили немного другое масло была такая ошибка. УЧПУ iTNC530 
    • tb_ogmet
      Я так и делаю, просто бывают криволинейные поверхности, это долго. В компасе можно выбрать "штриховка по контуру" к тому же ширину выступания штрихов еще назначать. Думал может в Т-Флекс  тоже что то подобное имеется.
    • Chester
      всем привет. у меня обратная проблема. мне НЕ надо, чтоб создаваемый переход видел (знал) предыдущие переходы и не обрабатывал мне остаток. зачем это надо. иногда нужно с нижней стороны, например, снести плоскость, которая в тисках была. в powermill я просто делал проходы сверху и называл программу 2_установ.  а тут не могу понять, где в создаваемом переходе поставить какую-нибудь галку, чтоб было игнорирование предыдущих обработок. 
    • Марсель
      Снаружи, внутри через путь зараз. Потом штриховка в неавтоматическом выборе. Внешний контур обвести линиями изображения.
    • alex68nic
      то есть, чтобы не было проблем писать из CAM системы с расширением .H и спокойно работать? верно?
    • tb_ogmet
      Добрый день! Друзья, как в Т-Флекс выполнить такую штриховку (по контуру). 
    • Koels
      Цепь ESP я так понимаю идёт на контактах cx1a и cx1b? Если да то там же просто 220вольт подключено, и эти разъёмы есть только на силовом и шпиндельном драйвере. Поправьте пожалуйста если я не прав    Я так понял вы про это Они распаяны и не смогу поменять
    • eljer0n
      Большое спасибо за ответ! Т.е. теоретически, препятствий отсортировать всю сборку по всем уровням вложенности нет? Я так понял из обсуждений в интернете, что из коробки сортировка подсборок в солиде не работает, сортирует только верхний уровень (по схеме раздел -> обозначение -> наименование). Мои эксперименты это подтвердили.
×
×
  • Create New...