Как стать автором
Обновить

Разработка полноценного API – приложения для программного пакета SolidWorks. Модель болта

Время на прочтение5 мин
Количество просмотров10K

Введение


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

Цели и задачи


Целью данной работы является повышение эффективности труда инженера – конструктора на этапе моделирования конструируемого изделия. В соответствии поставленной цели были выделены следующие задачи:
• Разработка типовой модели болта;
• Создание интерфейса API – приложения;
• Разработка библиотеки, реализующей построение модели;

Инструменты разработки


• SolidWorks;
• C#;
• WPF;
• VSTA (Visual Studio Tools for Applications);

Разработка модели


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

Разработка интерфейса


В качестве инструмента разработки интерфейса приложения была выбрана технология Windows Presentation Foundation. XAML разметка интерфейса приведена в листинге.
<Window x:Class="APIHabr.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="API-приложение" Height="250" Width="375">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"></RowDefinition>
            <RowDefinition Height="auto"></RowDefinition>
            <RowDefinition Height="auto"></RowDefinition>
            <RowDefinition Height="auto"></RowDefinition>
            <RowDefinition Height="auto"></RowDefinition>
            <RowDefinition Height="auto"></RowDefinition>
        </Grid.RowDefinitions>        
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto"></ColumnDefinition>
            <ColumnDefinition Width="auto"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Row="0" Grid.Column="0" Margin="5,5,5,5" FontSize="16" FontWeight="Bold">Параметры изделия:</TextBlock>
        <TextBlock Grid.Row="1" Grid.Column="0" Margin="5,5,5,5" FontSize="16">Диаметр резьбы:</TextBlock>
        <TextBlock Grid.Row="2" Grid.Column="0" Margin="5,5,5,5" FontSize="16">Высота головки:</TextBlock>
        <TextBlock Grid.Row="3" Grid.Column="0" Margin="5,5,5,5" FontSize="16">Размер под ключ:</TextBlock>
        <TextBlock Grid.Row="4" Grid.Column="0" Margin="5,5,5,5" FontSize="16">Длина:</TextBlock>
        <Button Grid.Row="5" Grid.Column="1" Width="170" Height="30" Margin="5,5,5,5" Content="Построить" FontSize="16"></Button>        
        <TextBox Grid.Column="1" Grid.Row="1" Margin="5,5,5,5"></TextBox>
        <TextBox Grid.Column="1" Grid.Row="2" Margin="5,5,5,5"></TextBox>
        <TextBox Grid.Column="1" Grid.Row="3" Margin="5,5,5,5"></TextBox>
        <TextBox Grid.Column="1" Grid.Row="4" Margin="5,5,5,5"></TextBox>       
    </Grid>
</Window>

В результате разработан упрощенный интерфейс приложения, представленный на рисунке ниже.

Программная реализация


public partial class MainWindow : Window
    {
        public MainWindow() {        
            InitializeComponent();
        }

        public SldWorks swApp;

        void Button_Click_1(object sender, RoutedEventArgs e) {        
            ModelDoc2 swDoc = null;
            PartDoc swPart = null;
            DrawingDoc swDrawing = null;
            AssemblyDoc swAssembly = null;
            bool boolstatus = false;
            int longstatus = 0;
            int longwarnings = 0;
            swDoc = ((ModelDoc2)(swApp.ActiveDoc));

            OpenDoc(ref swDoc, ref longstatus, ref longwarnings);
            swApp.ActivateDoc2("Болт", false, ref longstatus);
            swDoc = ((ModelDoc2)(swApp.ActiveDoc));
            
            ModelView myModelView = null;

            boolstatus = GrooveDiameter(swDoc, boolstatus);
            boolstatus = SetBoltHeadHeight(swDoc, boolstatus);
            boolstatus = SetDimensionUnderKey(swDoc, boolstatus);

            boolstatus = SetLength(swDoc, boolstatus);
        }

        //Задать длину болта
        static bool SetLength(ModelDoc2 swDoc, bool boolstatus) {        
            boolstatus = swDoc.Extension.SelectByID2("", "FACE", 0.011912467420266637, 0.01846469011343288, 0.0037872311733622155, false, 0, null, 0);
            boolstatus = swDoc.Extension.SelectByID2("D1@Эскиз1@Болт.SLDPRT", "DIMENSION", 0.047351053302585169, 0.019301296053367275, 0.0028786441805853363, true, 0, null, 0);
            boolstatus = swDoc.EditRebuild3();
            swDoc.ClearSelection2(true);
            return boolstatus;
        }
        
        //Задать размер под ключ болта
        static bool SetDimensionUnderKey(ModelDoc2 swDoc, bool boolstatus) {        
            boolstatus = swDoc.Extension.SelectByID2("", "FACE", -0.00036826155354674484, 0.051999999999850388, -0.0013844273092900039, false, 0, null, 0);
            boolstatus = swDoc.Extension.SelectByID2("D4@Эскиз1@Болт.SLDPRT", "DIMENSION", 0.0079871009577274082, 0.035833016414888383, -0.013439947146820423, true, 0, null, 0);
            boolstatus = swDoc.EditRebuild3();
            swDoc.ClearSelection2(true);
            return boolstatus;
        }
        
        //Задать высоту головки болта
        static bool SetBoltHeadHeight(ModelDoc2 swDoc, bool boolstatus) {        
            boolstatus = swDoc.Extension.SelectByID2("", "FACE", 0.0025916945023696791, 0.022486595775220126, 0.012228373547031879, false, 0, null, 0);
            boolstatus = swDoc.Extension.SelectByID2("D2@Эскиз1@Болт.SLDPRT", "DIMENSION", 0.032400529167230879, 0.043963039647934993, 0, true, 0, null, 0);
            boolstatus = swDoc.EditRebuild3();
            swDoc.ClearSelection2(true);
            return boolstatus;
        }

        //Задать диаметр резьбы болта
        static bool GrooveDiameter(ModelDoc2 swDoc, bool boolstatus) {        
            boolstatus = swDoc.Extension.SelectByID2("", "FACE", -0.00081167638456329516, 0.026711469979688613, 0.0089633242408808655, false, 0, null, 0);
            boolstatus = swDoc.Extension.SelectByID2("D3@Эскиз1@Болт.SLDPRT", "DIMENSION", 0.0056429925389302749, 0.040324953527420437, 0, true, 0, null, 0);
            boolstatus = swDoc.EditRebuild3();
            swDoc.ClearSelection2(true);
            return boolstatus;
        }

        //Открыть документ
        void OpenDoc(ref ModelDoc2 swDoc, ref int longstatus, ref int longwarnings) {        
            swDoc = ((ModelDoc2)(swApp.OpenDoc6("D:\\ХАБР\\Item2\\Болт.SLDPRT", 1, 0, "", ref longstatus, ref longwarnings)));
        }
    }

Заключение


Основная цель подобных API – приложений – автоматизация процесса создания модели. В рамках данной работы была рассмотрена лишь автоматизация моделирования крепежных изделий (болтов). В дальнейшем будут рассмотрены следующие вопросы автоматизации:
• API – приложение для сборки модели типовых конструкций в программном пакете SolidWorks;
• API – приложение для автоматизации разработки конструкторской документации;
• API – приложение для моделирования сложных изделий.
Теги:
Хабы:
Всего голосов 4: ↑4 и ↓0+4
Комментарии0

Публикации