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

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

Или посовременнее Solidworks GearTrax.

Но это приложение, вроде, только для элементов трансмиссий (то бишь зубьев)???

Для данной темы сойдёт...

А MechSoft немного по-разнообразнее (и крепежи, и другие расчёты) - жалко, что такого уже не делают...

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


ЭЭЭЭЭЭ!!!!!

ИГРАЕМ В ТУПИЛКУ ЧТО-ЛИ?!?!?!??!?

читай вопрос!

Там нее как ПОСТРОИТЬ ЭВОЛЬВЕНТУ.

Там вопрос как сделать макрос, автоматизирующий сей процесс.

У тебя есть мысли как применить VBA в этом деле?

Зачем изобретать велосипед - если все уже изобретено. Макрос я не писал но формулами эвольвенту получал(поищу файл если надо и скину).

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

streamdown

Чудеса просто - снес все под чистую почистил ручками реестр. Поставил Solid2009SP0, установил с того же диска API SDK - в результате в разделе VB появился Workflow а в VC++ так ничего и не появилось. Антивирей вообще нету(Доменная сеть) ставил под админом все.

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

alyaska

Ну, как говорится, вангую)))

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

- У меня стояла 2010 студия. Решил посмотреть на 2012. Поставил. Удалил. 2012 студия, устанавливаясь, переписала кучу библиотек на новые версии, в результате после сноса - 2010 студия ссылалась на библиотеки будущих версий и вываливалась (либы системные - не солидовские, у меня например валился редактор Entity Framework).

Попробуйте <noindex>так</noindex>. Потому что проблема именно локального характера.

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

SW 2012, win7x32

Учусь программировать на vba. Задача слудующая: есть чертеж сборки состоящей из узлов и деталей, расставляю позиции вручную, затем хочу макросом в текст этих позиций втавить свойство пользователя деталей и узлов. С деталями все впорядке нужное свойство вставляется, а вот в узлах вставляется свойство детали узла к которой прикреплена позиция, а не всего узла , а хотелось бы вставить свойство узла в целом.

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

Ребята может кто может скинуть примеры кода с сайта(пароль некий просит...)? а то у меня нет туда доступа :) буду благодарен.

Напишите в личку дам мыло.

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

Приветствую всех. 

 

С названием темы конечно опростоволосился, и не поменять. Прошу пардона.

"Массовая смена конфигураций деталей в сборке"

 

Обычно стараюсь решить все свои проблемы чтением мануалов, но тут что-то совсем застрял.

Подсобите пожалуйста если есть идеи.

Задача - в пределах открытой сборки необходимо для всех подсборок и деталей сменить связанную конфигурацию. 

В интерфейсе перепривязывать конфигурации сотен и тысяч деталей - не вариант (пальцы устают :))

В сборке 2500 деталей в нескольких подсборках. Режим большой сборки включен.

 

Мне как программисту, написать макрос не сложно

Решение в хелпе есть : 



Dim vChildCompArr As Variant
Dim vChildComp As Variant
Dim swChildComp As SldWorks.Component2


vChildCompArr = swComp.GetChildren

For Each vChildComp In vChildCompArr
 Set swChildComp = vChildComp
 swChildComp.ReferencedConfiguration = "такая сякая конфигурация"
Next

Решение работает - делает то что мне надо, однако делает это не то что медленно, а очень медленно. Ждать надо часы. 

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

Пытался воспользоваться инструкцией:

Dim Assem As SldWorks.AssemblyDoc
Set Assem = swModel
Assem.EnableAssemblyRebuild = False

но не помогло ни капельки.

 

Окошко "конфигурация компонента" эту операцию делает без тормозов, перестраивая сборку лишь при закрытии. 

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

 

Куда копать?

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

Попробуйте переключать настройки http://help.solidworks.com/2012/english/api/sldworksapi/rebuild_document_on_activation_example_csharp.htm


А можно ещё попробовать изменять свойства детали

 

Option Explicit 


Dim swApp As SldWorks.SldWorks 
Dim Part As SldWorks.ModelDoc2 
Dim assy As SldWorks.AssemblyDoc 
Dim boolstatus As Boolean 
Sub main() 


Set swApp = Application.SldWorks 


Set Part = swApp.ActiveDoc 
Set assy = Part 
boolstatus = Part.Extension.SelectByID2("Part1-1@Assem1", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) 
'Part.CompConfigProperties4 2, 0, True, "Conf1", False 
assy.CompConfigProperties4 2, 0, True, True, "Conf2", False 
Part.ClearSelection2 True 
boolstatus = Part.EditRebuild3 End Sub 
Ссылка на сообщение
Поделиться на других сайтах

Спасибо! К сожалению не помогает. Во всех вариантах - одинаковая скорость обработки.

Инструкции EnableGraphicsUpdate и скрытие документа тоже эффекта не дают. Видимо придется смирится. 

Единственный вариант, который отрабатывает быстро 

boolstatus = Part.Extension.SelectAll
Part.CompConfigProperties4 2, 0, True, "Conf1", False 

Но он по логике не подходит. 

Есть подозрение что все-таки это сборка такая тормозная (сам виноват, на основе файла уравнений все), правда как работает окошко "конфигурация компонента" остается загадкой :)

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

 

Кстати

Extension.SelectAll

как-то странно, не лучше ли пробегаться по деталям сборки?

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

Решение работает - делает то что мне надо, однако делает это не то что медленно, а очень медленно. Ждать надо часы. 

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

Пытался воспользоваться инструкцией:

Dim Assem As SldWorks.AssemblyDoc
Set Assem = swModel
Assem.EnableAssemblyRebuild = False

но не помогло ни капельки.

 

Окошко "конфигурация компонента" эту операцию делает без тормозов, перестраивая сборку лишь при закрытии. 

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

 

Куда копать?

Работа с компонентами в сборке у SW довольно трудоемкая операция даже стандартными методами, например, замена компонента или замена конфигурации. Наилучшая скорость достигается, когда приложение реализовано в виде addins-а (dll), то есть работает в одном адресном пространстве с SW. Разница может достигать двух порядков по сравнению, например, с приложением, реализованным в виде *.exe или макросом... Попробовал сделать смену конфигураций у компонентов через addins, и вот что получилось.

post-3876-0-77616300-1378410740.jpg

 

Быстрее, если менять конфигурацию у каждого компонента, вряд ли получится....

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

Потому что конфигураций более чем две, и надо переключать их интеллектуально. 

грубо говоря, если выбрана Conf1, то подменить на ConfAlt1, Conf на ConfAlt, и т.д. 


Наилучшая скорость достигается, когда приложение реализовано в виде addins-а (dll),

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

Задача - в пределах открытой сборки необходимо для всех подсборок и деталей сменить связанную конфигурацию.

 

Ждать надо часы.

 

 

Для начала немного изменим условие: проделаем тоже самое не с открытой а с закрытой сборкой :)

 

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

Чтобы ее подключить для VBA заходим в Tools->References, там ставим галку напротив "SWDocumentMgr 2012 Type Library"

Справка лежит в "...\SolidWorks\api\swdocmgrapi.chm"

Public swClass As SwDMClassFactory
Public SDM As SwDMApplication
Public MainAsm As SwDMDocument14
Public Part As SwDMComponent8
Public ConfMng As SwDMConfigurationMgr
Public Conf As SwDMConfiguration13
Public CList As Variant
Public PList As Variant

Sub main()

Set fs = CreateObject("Scripting.FileSystemObject")
Set swClass = CreateObject("SwDocumentMgr.SwDMClassFactory")
Set SDM = swClass.GetApplication("")  ' СМ. ПРИМЕЧАНИЕ ПОСЛЕ КОДА!!!!!!

stemp = "C:\TST\Сборка1.SLDASM" ' имя сборки в которой необходимо заменить конфигурации

Set MainAsm = SDM.GetDocument(stemp, swDmDocumentUnknown, False, 0)

Set ConfMng = MainAsm.ConfigurationManager
CList = ConfMng.GetConfigurationNames
Set Conf = ConfMng.GetConfigurationByName(CList(0))

PList = Conf.GetComponents  ' список всех компонентов сборки

For i = 0 To UBound(PList) ' тут нужен необходимый алгоритм замены конфигураци (в данном примере замена поголовная)
    Set Part = PList(i)
    ok = Part.Replace(Part.PathName, "00", False)
Next i

MainAsm.Save
MainAsm.CloseDoc

End Sub

ПРИМЕЧАНИЕ

 

Для инициализации переменной SDM функции GetApplication() необходимо передать лицензионный код.

Этот код можно бесплатно получить у SWR, если у вас есть лиценция на сам солид.

Необходимость данной лиценнзии солидовцы объясняют тем, что данная библиотека "при неправильном использовании, может привести к повреждению данных".

Таким образом вводя лицензионный код вы соглашаетель на добровольное использование библиотеки, снимая с Dassault Systemes ответственность за ваши потенциально кривые руки :)

От себя могу присоединится  к Dassault и посоветовать делать бэкапы перед использованием данной либы.

 

PS если по каким то причинам вы не хотите запрашивать код у официалов, то можно почитать другие ветки форма, напиример  пост №27 вот здесь

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

:happy:  так можно всё переопределить. Вопрос был задан конкретно.

Ссылка на сообщение
Поделиться на других сайтах
:happy: так можно всё переопределить. Вопрос был задан конкретно.

 

Но тем не менее конечный результат достигнут, а как я понял основная проблема была в быстродействии а не в том чтобы посмотреть как солид перестраивает сборку после каждой операции... :smile:

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

Всем добрый день! У меня банальная, но неразрешимая(я пока не нашел) проблема. Пишу я на C#. Задача простая, открыт SolidWorks, запускаем прогу, жмем кнопку - создается новый документ сборки и должна вставится в нее деталь. Все бы прекрасно, но addComponent() возвращает false. Смотрел справку, искал на форумах, писал в тех.поддержку - отдача ноль. Помогите, как правильно?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using SolidWorks.Interop.sldworks;

namespace SW_assembly_example
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SldWorks swApp = new SldWorks();

            swApp.NewAssembly();

            ModelDoc2 swDoc = null;
            AssemblyDoc swAssembly = null;
            bool boolstatus = false;
            swDoc = ((ModelDoc2)(swApp.ActiveDoc));
            swAssembly = ((AssemblyDoc)(swDoc));
            boolstatus = swAssembly.AddComponent("D:\\Part1.SLDPRT", 0, 0, 0);
            if (boolstatus == false)
                System.Windows.Forms.MessageBox.Show("AddComponent() is false");
        }
    }
}

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

 

Всем добрый день! У меня банальная, но неразрешимая(я пока не нашел) проблема. Пишу я на C#. Задача простая, открыт SolidWorks, запускаем прогу, жмем кнопку - создается новый документ сборки и должна вставится в нее деталь. Все бы прекрасно, но addComponent() возвращает false. Смотрел справку, искал на форумах, писал в тех.поддержку - отдача ноль. Помогите, как правильно?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using SolidWorks.Interop.sldworks;

namespace SW_assembly_example
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SldWorks swApp = new SldWorks();

            swApp.NewAssembly();

            ModelDoc2 swDoc = null;
            AssemblyDoc swAssembly = null;
            bool boolstatus = false;
            swDoc = ((ModelDoc2)(swApp.ActiveDoc));
            swAssembly = ((AssemblyDoc)(swDoc));
            boolstatus = swAssembly.AddComponent("D:\\Part1.SLDPRT", 0, 0, 0);
            if (boolstatus == false)
                System.Windows.Forms.MessageBox.Show("AddComponent() is false");
        }
    }
}

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

SldWorks swApp = new SldWorks();

            swApp.NewAssembly();

            ModelDoc2 swDoc = null;
            AssemblyDoc swAssembly = null;
            swDoc = ((ModelDoc2)(swApp.ActiveDoc));
            swAssembly = ((AssemblyDoc)(swDoc));
            Component2 comp = default(Component2);
            swApp.OpenDoc6("C:\\Temp\\Part1.sldprt", 1, 2, "", 0, 0);
            comp = swAssembly.AddComponent4("C:\\Temp\\Part1.SLDPRT", "Default", 0, 0, 0);
            if (comp == null)
                System.Windows.Forms.MessageBox.Show("AddComponent() is false");
            swApp.ActivateDoc(swDoc.GetTitle());
Ссылка на сообщение
Поделиться на других сайтах
верным будет такой код
 

А вы пробовали (согласно справке) сначала открыть деталь и только после этого добавлять компонент? И после открытия запускать AddComponent (без цифры на конце функции)

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

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

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

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

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

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

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

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

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

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

    Нет пользователей, просматривающих эту страницу.




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