Перейти к публикации

Рекомендованные сообщения

25.10.2019 в 13:42, vasyam сказал:

Шаг первый ставите Visual Studio

Шаг второй Устанавливаете SolidWorks Api SDK , после этого в Visual Studio появляется шаблон Add-in

Создаете новый проект используя этот шаблон, в нем уже будут созданы события, на нужных событиях вставляете свой код. Остальным макросам ничего мешать не будет, более того можете их потом перенести в Add-In

Не подскажешь как настроить Visual Studio 2019? У меня почему то после установки SDK шаблоны в студии не появляются :(

Ссылка на сообщение
Поделиться на других сайтах


1 час назад, Snake 60 сказал:

Не подскажешь как настроить Visual Studio 2019? У меня почему то после установки SDK шаблоны в студии не появляются :(

В начале ставим студию, а потом SolidWorks Api SDK. Если не помогает то какая-то проблема с путями, русская английская версия, пути для шаблонов в студии изменены и т.д. Вообщем смотрите папку для шаблонов в студии и ищите на компьютере swvbaddin.zip, swcsharpaddin.zip как найдете перекиньте их в папку для шаблонов.

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, vasyam сказал:

В начале ставим студию, а потом SolidWorks Api SDK.

Так и делал.

 

1 час назад, vasyam сказал:

Если не помогает то какая-то проблема с путями, русская английская версия, пути для шаблонов в студии изменены и т.д.

Студия на русском языке. SDK инсталятор тоже был на русском (брал с диска дистрибутива SW 2018 SP5.0) Пути к шаблонам не менял.

 

1 час назад, vasyam сказал:

Ищите на компьютере swvbaddin.zip, swcsharpaddin.zip как найдете перекиньте их в папку для шаблонов.

Прогнал поиском, нет таких файлов... Не могли бы поделиться своими?

Ссылка на сообщение
Поделиться на других сайтах

@pps27031991

12 часов назад, pps27031991 сказал:

похоже справится обычная таблица параметров в Excel

Не ответите по таблицам, а там Вам в личку накорябал )

Ссылка на сообщение
Поделиться на других сайтах
12 часов назад, pps27031991 сказал:

похоже справится обычная таблица параметров в Excel

 

12 часов назад, v-david сказал:

пристегните таблицу параметров к модели и будет вам счастье в один клик

Спасибо всем за  подсказки.

За видео тоже +

Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, Snake 60 сказал:

Прогнал поиском, нет таких файлов... Не могли бы поделиться своими?

Если только дома посмотрю, но они точно должны в установщике посмотрите тут

https://www.codestack.net/solidworks-api/troubleshooting/addins/sdk-installation/

Ссылка на сообщение
Поделиться на других сайтах
23 минуты назад, Snake 60 сказал:

@pps27031991

Не ответите по таблицам, а там Вам в личку накорябал )

в ЛС ничего не пришло

Ссылка на сообщение
Поделиться на других сайтах

@pps27031991

11 минут назад, pps27031991 сказал:

в ЛС ничего не пришло

Отправлял сообщение на вот этот профиль pps270391 это же Вы или я ошибся? Хотел поболтать по вот этой теме

 

Ссылка на сообщение
Поделиться на других сайтах

День добрый!

Роняю знамя изобретателя очередного "велосипеда" (менеджера управлением штриховкой).

Не хватает понимания внутренних механизмов SW генерации видов на чертежах, особенно разрезы.

Если простой разрез вопросов не добавлял, особо. То на ломанных и ступенчатых я зашел в тупик.

 

З.Ы. Для желающих - во вложении исходник и "велосипеда".

 

HatchManager.zip

Ссылка на сообщение
Поделиться на других сайтах
14.12.2020 в 22:28, brigval сказал:

Координаты вершины в точке 0,0 сборки не равны координатам 0,0 полученным программно с вида чертежа. И разница очень существенная. Вот и интересно, что показывают X,Y. 

А вот Z в сборке у меня совпадает с Z с чертежа.

 

Предыдущий мой ответ тоже неправильный. Если вы получали данные вершины с помощью функции Vertex.GetPoint(), то X и Y в вашем случае показывают координаты вершины детали в системе координат этой детали. Для вашей задачи необходимо использовать также функции View.GetViewXform() и свойства Component2.Transform2 и MathTransform.ArrayData.  View.GetViewXform() преобразовывает начало координат модели в начало координат чертежа (матрица вращения, вектор переноса, масштаб).

Там придется использовать матричные вычисления. Так что задача непростая.

Ссылка на сообщение
Поделиться на других сайтах

 ... и опять, здравствуйте !

Не пошла штриховочка в  автоматическом режиме, появился намек на полуавтоматический ( @Shvg спасибо на наводки).

Программа начитывает компоненты из сборки (по пути к модели, идентифицирует как уникальные), и, задает каждому компоненту свой угол штриховки ( для примера и наглядности).

При выборе на любом виде заштрихованную поверхности, макрос определяет выбранный компонент и назначает данной поверхности угол штриховки из сгенерированного списка.

Если не получается ( в настоящий момент точно известно, что не работает на ломаных и ступенчатых разрезах), выводит сообщение что не удалось изменить штриховку, выдает наименование компонента и угол штриховки из списка (для корректировки вручную) .

 

З.Ы. за внешность исполнения, просьба, сильно не бить, ибо рабочий прототип...

HatchHelper.zip

Изменено пользователем nicomed
Ссылка на сообщение
Поделиться на других сайтах
16.12.2020 в 14:00, Shvg сказал:

Предыдущий мой ответ тоже неправильный. Если вы получали данные вершины с помощью функции Vertex.GetPoint(), то X и Y в вашем случае показывают координаты вершины детали в системе координат этой детали.

Не уверен, что это так. Одна из вершин находится в Исходной точке 0,0 детали и в сборке она же находится в Исходной точке 0,0.

Требуется найти ее координаты в пространстве сборочного чертежа.

Или относительно координат вида, или относительно координат листа.

Функция Vertex.GetPoint() показывает для указанной вершины X = 174 мм, например.

От левого нижнего угла вида вершина отстоит примерно на 4 мм.

От левого нижнего угла чертежа вершина отстоит по Х, примерно на 70-80 мм.

Собственно, поэтому и возник вопрос.

Координаты отностельно чего показывает Vertex.GetPoint()?

И можно ли от них перейти к координатам листа?

16.12.2020 в 14:00, Shvg сказал:

Для вашей задачи необходимо использовать также функции View.GetViewXform() и свойства Component2.Transform2 и MathTransform.ArrayData.  View.GetViewXform() преобразовывает начало координат модели в начало координат чертежа (матрица вращения, вектор переноса, масштаб).

Там придется использовать матричные вычисления. Так что задача непростая.

 

Посмотрю...

Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, brigval сказал:

Не уверен, что это так. Одна из вершин находится в Исходной точке 0,0 детали и в сборке она же находится в Исходной точке 0,0.

Требуется найти ее координаты в пространстве сборочного чертежа.

Или относительно координат вида, или относительно координат листа.

Функция Vertex.GetPoint() показывает для указанной вершины X = 174 мм, например.

От левого нижнего угла вида вершина отстоит примерно на 4 мм.

От левого нижнего угла чертежа вершина отстоит по Х, примерно на 70-80 мм.

Собственно, поэтому и возник вопрос.

Координаты отностельно чего показывает Vertex.GetPoint()?

И можно ли от них перейти к координатам листа?

Функцией Vertex.GetPoint() показывают координаты выбранной вершины детали относительно системы координат именно этой детали, а не компонента в сборке. Перейти к координатам листа можно. Функция View.GetViewXForm() возвращает массив из 13 значений, где первые 9 элементов - это матрица вращения, которая показывает поворот системы координат сборки относительно системы координат чертежа, следующие 3 элемента - это вектор переноса начала системы координат сборки в систему координат чертежа, 13 - элемент - масштаб. Свойствами Component2.Transform2 и MathTransform.ArrayData получаете также матрицу вращения, вектор переноса и масштаб компонента, то есть его расположение в сборке. А дальше выходите на вершину.  При этом придется использовать матричные вычисления.

P.S. С ходу похожий на ваш пример решить не удалось. С матрицами давно не работал.... Подсборок у меня не было.

Изменено пользователем Shvg
Ссылка на сообщение
Поделиться на других сайтах
17.12.2020 в 17:05, brigval сказал:

....................................

И можно ли от них перейти к координатам листа?

Посмотри этот код. Правда он на C#, но функции SW будут одни и те же.

Скрытый текст

        private void cmdVertex_Click(object sender, EventArgs e)
        {
            SldWorks swApp = GetActiveSolidWorks();
            if (swApp == null)
                return;
            ModelDoc2 swModel = swApp.IActiveDoc2;
            if (swModel == null)
                return;
            int docType = swModel.GetType();
            if (docType != (int)swDocumentTypes_e.swDocDRAWING)
                return;

            SelectionMgr swSelMgr = swModel.ISelectionManager;
            int selCount = swSelMgr.GetSelectedObjectCount();
            if (selCount != 2)
                return;
            SwView swView = null;
            SwEntity swEntity = null;
            Vertex swVertex = null;

            for (int i = 1; i <= selCount; i++)
            {
                swSelectType_e selType = (swSelectType_e)swSelMgr.GetSelectedObjectType2(i);
                switch (selType)
                {
                    case swSelectType_e.swSelDRAWINGVIEWS:
                        swView = swSelMgr.GetSelectedObject5(i) as SwView;
                        break;
                    case swSelectType_e.swSelVERTICES:
                        swVertex = swSelMgr.GetSelectedObject5(i) as Vertex;
                        swEntity = swVertex as SwEntity;
                        break;
                }

            }

            if (swView == null)
                return;
            if (swVertex == null)
                return;

            Sheet swSheet = swView.Sheet;
            double[] arrPrpSheet = swSheet.GetProperties2() as double[]; // нас в этом массиве интересует 3 и 4 члены. Это масштаб листа

            double scale_1 = arrPrpSheet[2];
            double scale_2 = arrPrpSheet[3];


            Component2 swComponent = swEntity.IGetComponent2();
            MathTransform swMathTransform = swComponent.Transform2;
            double[] arrComponentTransform = swMathTransform.ArrayData as double[];

            MathUtility swMathUtility = swApp.IGetMathUtility();

            // получаем необходимые массивы для дальнейшей работы
            double[] mathViewXForm = swView.GetViewXform() as double[]; // 10, 11 и 12 элемент массива - начало координат сборки на виде в системе
                                                                        //  координат листа с учетом масштаба листа. 13 элемент - масштаб листа

            // =====================================================
            // следующие два массива не потребуются. Даны для того, чтобы показать, что ноль вида может не совпадать с нулем сборки на виде.
            double[] mathXForm = swView.GetXform() as double[];
            double[] arrViewPos = swView.Position as double[];
            // =====================================================

            double[] coordVertex = swVertex.GetPoint() as double[]; // координаты вершины в системе коородинат компонента.

            // создаем данные для матрицы 4x4, так как размер mathViewXForm 3x4, а чтобы создать MathTransform нужно иметь массив 4x4
            double[] arrViewXForm = new double[16];
            for (int i = 0; i < 13; i++)
                arrViewXForm[i] = mathViewXForm[i];

            arrViewXForm[13] = 0.0;
            arrViewXForm[14] = 0.0;
            arrViewXForm[15] = 0.0;

            double[] arrComp = new double[3]; 

            // начало системы координат компонента в системе координат сборки.
            arrComp[0] = arrComponentTransform[9];
            arrComp[1] = arrComponentTransform[10];
            arrComp[2] = arrComponentTransform[11];

            // создаем вектор переноса из системы координат сборки в систему координат компонента.
            MathVector vTranslate = swMathUtility.CreateVector(arrComp) as MathVector;

            // создаем вектор выбранной вершины компонента, где начало вектора в начале координат компонента
            MathVector vectorVertex_1 = swMathUtility.CreateVector(coordVertex) as MathVector;
            
            // Тот же вектор, та же точка ноль, только оси X, Y, Z направлены так же как и оси системы координат сборки.
            MathVector swVectorVertex_1 = vectorVertex_1.IMultiplyTransform(swMathTransform) as MathVector;
            // координаты выбранной вершины относительно нуля компонента в координатных осях сборки. В коде не используются
            double[] arrVectorVertex_1 = swVectorVertex_1.ArrayData as double[]; 
                                                                                
            // складываем два вектора 
            MathVector swVectorVertex_2 = vTranslate.Add(swVectorVertex_1) as MathVector;
            // получаем координаты вершины в системе координат сборки. В коде не используются
            double[] arrVectorVertex_2 = swVectorVertex_2.ArrayData as double[];

            // Создаем матрицу 4х4 из данных полученных функцией swView.GetViewXform()
            MathTransform swViewXForm = swMathUtility.CreateTransform(arrViewXForm) as MathTransform;

            // получаем вектор из начала координат сборки до выбранной вершины, только направление осей X, Y, Z 
            // совпадают с осями X, Y, Z чертежа
            MathVector swVectorVertex_3 = swVectorVertex_2.IMultiplyTransform(swViewXForm) as MathVector;
            double[] arrVectorVertex_3 = swVectorVertex_3.ArrayData as double[];

            // учитываем масштаб листа, если нужно.
            double dScale = scale_2 / scale_1;

            // получаем координаты выбранной вершины на сборке в виде в системе координат листа в мм
            double dX_Sheet = (mathViewXForm[9] * dScale + arrVectorVertex_3[0] * dScale)* 1000.0;
            double dY_Sheet = (mathViewXForm[10] * dScale + arrVectorVertex_3[1] * dScale)* 1000.0;

        }

 

  

Ссылка на сообщение
Поделиться на других сайтах
8 часов назад, Shvg сказал:

Посмотри этот код. Правда он на C#, но функции SW будут одни и те же.

  Скрыть содержимое


        private void cmdVertex_Click(object sender, EventArgs e)
        {
            SldWorks swApp = GetActiveSolidWorks();
            if (swApp == null)
                return;
            ModelDoc2 swModel = swApp.IActiveDoc2;
            if (swModel == null)
                return;
            int docType = swModel.GetType();
            if (docType != (int)swDocumentTypes_e.swDocDRAWING)
                return;

            SelectionMgr swSelMgr = swModel.ISelectionManager;
            int selCount = swSelMgr.GetSelectedObjectCount();
            if (selCount != 2)
                return;
            SwView swView = null;
            SwEntity swEntity = null;
            Vertex swVertex = null;

            for (int i = 1; i <= selCount; i++)
            {
                swSelectType_e selType = (swSelectType_e)swSelMgr.GetSelectedObjectType2(i);
                switch (selType)
                {
                    case swSelectType_e.swSelDRAWINGVIEWS:
                        swView = swSelMgr.GetSelectedObject5(i) as SwView;
                        break;
                    case swSelectType_e.swSelVERTICES:
                        swVertex = swSelMgr.GetSelectedObject5(i) as Vertex;
                        swEntity = swVertex as SwEntity;
                        break;
                }

            }

            if (swView == null)
                return;
            if (swVertex == null)
                return;

            Sheet swSheet = swView.Sheet;
            double[] arrPrpSheet = swSheet.GetProperties2() as double[]; // нас в этом массиве интересует 3 и 4 члены. Это масштаб листа

            double scale_1 = arrPrpSheet[2];
            double scale_2 = arrPrpSheet[3];


            Component2 swComponent = swEntity.IGetComponent2();
            MathTransform swMathTransform = swComponent.Transform2;
            double[] arrComponentTransform = swMathTransform.ArrayData as double[];

            MathUtility swMathUtility = swApp.IGetMathUtility();

            // получаем необходимые массивы для дальнейшей работы
            double[] mathViewXForm = swView.GetViewXform() as double[]; // 10, 11 и 12 элемент массива - начало координат сборки на виде в системе
                                                                        //  координат листа с учетом масштаба листа. 13 элемент - масштаб листа

            // =====================================================
            // следующие два массива не потребуются. Даны для того, чтобы показать, что ноль вида может не совпадать с нулем сборки на виде.
            double[] mathXForm = swView.GetXform() as double[];
            double[] arrViewPos = swView.Position as double[];
            // =====================================================

            double[] coordVertex = swVertex.GetPoint() as double[]; // координаты вершины в системе коородинат компонента.

            // создаем данные для матрицы 4x4, так как размер mathViewXForm 3x4, а чтобы создать MathTransform нужно иметь массив 4x4
            double[] arrViewXForm = new double[16];
            for (int i = 0; i < 13; i++)
                arrViewXForm[i] = mathViewXForm[i];

            arrViewXForm[13] = 0.0;
            arrViewXForm[14] = 0.0;
            arrViewXForm[15] = 0.0;

            double[] arrComp = new double[3]; 

            // начало системы координат компонента в системе координат сборки.
            arrComp[0] = arrComponentTransform[9];
            arrComp[1] = arrComponentTransform[10];
            arrComp[2] = arrComponentTransform[11];

            // создаем вектор переноса из системы координат сборки в систему координат компонента.
            MathVector vTranslate = swMathUtility.CreateVector(arrComp) as MathVector;

            // создаем вектор выбранной вершины компонента, где начало вектора в начале координат компонента
            MathVector vectorVertex_1 = swMathUtility.CreateVector(coordVertex) as MathVector;
            
            // Тот же вектор, та же точка ноль, только оси X, Y, Z направлены так же как и оси системы координат сборки.
            MathVector swVectorVertex_1 = vectorVertex_1.IMultiplyTransform(swMathTransform) as MathVector;
            // координаты выбранной вершины относительно нуля компонента в координатных осях сборки. В коде не используются
            double[] arrVectorVertex_1 = swVectorVertex_1.ArrayData as double[]; 
                                                                                
            // складываем два вектора 
            MathVector swVectorVertex_2 = vTranslate.Add(swVectorVertex_1) as MathVector;
            // получаем координаты вершины в системе координат сборки. В коде не используются
            double[] arrVectorVertex_2 = swVectorVertex_2.ArrayData as double[];

            // Создаем матрицу 4х4 из данных полученных функцией swView.GetViewXform()
            MathTransform swViewXForm = swMathUtility.CreateTransform(arrViewXForm) as MathTransform;

            // получаем вектор из начала координат сборки до выбранной вершины, только направление осей X, Y, Z 
            // совпадают с осями X, Y, Z чертежа
            MathVector swVectorVertex_3 = swVectorVertex_2.IMultiplyTransform(swViewXForm) as MathVector;
            double[] arrVectorVertex_3 = swVectorVertex_3.ArrayData as double[];

            // учитываем масштаб листа, если нужно.
            double dScale = scale_2 / scale_1;

            // получаем координаты выбранной вершины на сборке в виде в системе координат листа в мм
            double dX_Sheet = (mathViewXForm[9] * dScale + arrVectorVertex_3[0] * dScale)* 1000.0;
            double dY_Sheet = (mathViewXForm[10] * dScale + arrVectorVertex_3[1] * dScale)* 1000.0;

        }

 

  

Спасибо.

К сожалению, сейчас нет физической возможности посидеть и повторить. Как удастся, отпишу.

Ссылка на сообщение
Поделиться на других сайтах
  • 3 месяца спустя...

Приветствую, подскажите. Средствами API возможно ли, чтобы при открытии файла из сборки (в отдельном окне, не в контексте) автоматически выполнялась команда "Получить доступ для записи"? То есть такой макрос запускался при открытии детали. Без нажатия на кнопку запуска макроса.

Изменено пользователем makarov
Ссылка на сообщение
Поделиться на других сайтах
13 часов назад, makarov сказал:

То есть такой макрос запускался при открытии детали. Без нажатия на кнопку запуска макроса.

https://www.codestack.net/solidworks-api/document/macro-feature/model-load-watcher/

Ссылка на сообщение
Поделиться на других сайтах

Добрый день, коллеги, прошу помощи с  WeldSymbol.

Здача: на чертеже есть обозначения мест пайки и клейки, которые ссылаются на пункт ТТ. необходимо во всех обозначениях заменить текст.

Снимок.JPG

В документации есть IWeldSymbol. SetText(….), выглядит так:

swWeldSymbol.SetText(true, "Left", "BUTT", "Right", "Stagger", (int)swWeldSymbolContourTypes_e.swWeldContourNone);

Успешно работает для всех стандартов кроме ГОСТ. ГОСТовский символ по-видимому устроен как-то иначе и игнорирует значения которые устанавливает SetText().

Прочитать  нужный текст получилось с помощью GetTextAtIndex()


 

Скрытый текст

                    for (int i =0;i<=3;i++)

                    {

                        Debug.Print(aWeldSymbol.GetTextAtIndex(i));                      

                    }

 

Но как этот текст изменить ?!

В Note, например есть SetTextFormatAtIndex(), но в WeldSymbol  или в Annotation, который можно с него получить ничего подобного нет.

Как быть ? 

 

Изменено пользователем AuthorITet
Ссылка на сообщение
Поделиться на других сайтах
5 часов назад, AuthorITet сказал:

Как быть ? 

Ни как - в API нет инструмента для изменения этих параметров.

Только что стучать разработчикам, что бы поправили/добавили в API, а пока, менять ручками.

 

 

Ссылка на сообщение
Поделиться на других сайтах
19 часов назад, AuthorITet сказал:

Как быть ? 

Можно разместить заметку над полкой сварки, сгруппировать их. Получается как одно целое.

Текст искать и заменять в заметке.

Скрытый текст

VT2.jpg

 

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   1 пользователь

    • Liga



×
×
  • Создать...