Файл: Лабораторная работа 4 Разработка программных продуктов для двухмерного моделирования с использованием встроенных языков среды сапр.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.01.2024

Просмотров: 175

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНОБРНАУКИ РОССИИФедеральное государственное бюджетное образовательное учреждение высшего образования «Тульский государственный университет»Кафедра вычислительной техникиЛингвистическое и программное обеспечение автоматизированных системЛАБОРАТОРНАЯ РАБОТА №4Разработка программных продуктов для двухмерного моделирования с использованием встроенных языков среды САПРВыполнил: студент группы 220292Рогожин А.Ю.____________Проверил: доц., к.т.н. кафедры ВТ Пестин М.С____________Тула 2023Целью работы является реализация макроса САПР в среде КОМПАС-Макро с использованием языка Python для двухмерного проектирования.Задачами работы являются:

  1. Изучить задание;

  2. Освоить работу с КОМПАС-Макро;

  3. Освоить основы языка Python.
2. Задание на работуВариант №4Создать макрос для параметрического построения данной детали (рисунок 1) в 2D в КОМПАС средствами языка Python.Рисунок 1 – Задание3. Ход работыВозможно два способа создания макросов: вручную на языке Python или путем записи действий пользователя и затем редактирования некоторых параметров макроса. Макрос может не только выполнять построения, но и анализировать уже существующие чертежи.Для того чтобы создать заданный объект необходимо создать текстовый документ и подключить к нему python, а также другие библиотеки (листинг 1).Листинг 1 – Подключение# Подключим pythonimport pythoncomfrom win32com.client import Dispatch, gencacheimport LDefin2Dimport MiscellaneousHelpers as MH# Подключим константы API Компасkompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constantskompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants# Подключим описание интерфейсов API5kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))MH.iKompasObject = kompas_object# Подключим описание интерфейсов API7kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}",0,1,0)application=kompas_api7_module.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID, pythoncom.IID_IDispatch))MH.iApplication = application Далее выполняется подключение активного документа (листинг 2).
Листинг 2 – Подключение документаDocuments = application.Documents# Получим активный документkompas_document = application.ActiveDocumentkompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)iDocument2D = kompas_object.ActiveDocument2D()Затем прописываются координаты линий чертежа, для построения заданного объекта (листинг 3).Листинг 3 – Координатыobj = iDocument2D.ksLineSeg(172.04632660962, 253.49488340422, 152.04632660962, 253.49488340422, 1)obj = iDocument2D.ksLineSeg(152.04632660962, 253.49488340422, 120.850925429149, 237.625197043441, 1)obj = iDocument2D.ksLineSeg(120.850925429149, 237.625197043441, 120.850925429149, 217.625197043441, 1)obj = iDocument2D.ksLineSeg(120.850925429149, 217.625197043441, 130.850925429149, 217.625197043441, 1)obj = iDocument2D.ksLineSeg(130.850925429149, 217.625197043441, 130.850925429149, 207.625197043441, 1)obj = iDocument2D.ksLineSeg(130.850925429149, 207.625197043441, 120.850925429149, 207.625197043441, 1)obj = iDocument2D.ksLineSeg(120.850925429149, 207.625197043441, 120.850925429149, 187.625197043441, 1)obj = iDocument2D.ksLineSeg(120.850925429149, 187.625197043441, 152.663492088135, 173.032027320328, 1)obj = iDocument2D.ksLineSeg(152.663492088135, 173.032027320328, 172.04632660962, 173.032027320328, 1)obj = iDocument2D.ksLineSeg(172.04632660962, 173.032027320328, 172.04632660962, 253.49488340422, 1)obj = iDocument2D.ksLineSeg(120.850925429149, 232.591342732517, 136.757208758642, 232.591342732517, 1)obj = iDocument2D.ksLineSeg(172.04632660962, 230.372197400241, 137.04632660962, 230.372197400241, 1)obj = iDocument2D.ksLineSeg(136.757208758642, 232.591342732517, 137.04632660962, 230.372197400241, 1)obj = iDocument2D.ksLineSeg(136.757208758642, 232.591342732517, 136.757208758642, 227.591342732517, 1)obj = iDocument2D.ksLineSeg(136.757208758642, 227.591342732517, 172.04632660962, 227.591342732517, 1)obj = iDocument2D.ksLineSeg(107.539369151393, 212.625197043441, 187.539369151393, 212.625197043441, 8)obj = iDocument2D.ksLineSeg(136.757208758642, 227.591342732517, 136.757208758642, 212.625197043441, 1)obj = iDocument2D.ksLineSeg(152.663492088135, 173.032027320328, 152.663492088135, 212.625197043441, 1)obj = iDocument2D.ksLineSeg(152.663492088135, 212.625197043441, 136.757208758642, 212.625197043441, 1)obj = iDocument2D.ksLineSeg(172.04632660962, 248.932321997461, 162.04632660962, 248.932321997461, 1)obj = iDocument2D.ksLineSeg(162.04632660962, 248.932321997461, 162.04632660962, 245.560040223831, 1)obj = iDocument2D.ksLineSeg(162.04632660962, 245.560040223831, 172.04632660962, 245.560040223831, 1)Далее задаётся штриховка. Сначала дается команда начала штриховки iHatchParam, затем строятся объекты, образующие ее контур, а затем еще одна команда завершает построение. Параметры штриховки задаются следующим образом (листинг 4).Листинг 4 – Задание штриховкиiHatchParam = kompas6_api5_module.ksHatchParam(kompas_object.GetParamStruct(kompas6_constants.ko_HatchParam))iHatchParam.Init()iHatchParam.ang = 45iHatchParam.color = -16777216iHatchParam.sheeting = 1iHatchParam.step = 3iHatchParam.width = 0iHatchParam.x = 0iHatchParam.y = 0iHatchParam.style = 0iHatchParam.boundaries = iDocument2D.ksNewGroup(1)iDocument2D.ksContour(1)iDocument2D.ksNewGroup(1)obj = iDocument2D.ksLineSeg(152.04632660962, 253.49488340422, 120.850925429149, 237.625197043441, 1)obj = iDocument2D.ksLineSeg(120.850925429149, 237.625197043441, 120.850925429149, 232.591342732517, 1)obj = iDocument2D.ksLineSeg(120.850925429149, 232.591342732517, 136.757208758642, 232.591342732517, 1)obj = iDocument2D.ksLineSeg(136.757208758642, 232.591342732517, 136.757208758642, 227.591342732517, 1)

obj = iDocument2D.ksLineSeg(136.757208758642, 227.591342732517, 172.04632660962, 227.591342732517, 1)obj = iDocument2D.ksLineSeg(172.04632660962, 227.591342732517, 172.046326609619, 245.560040223831, 1)obj = iDocument2D.ksLineSeg(172.04632660962, 245.560040223831, 162.04632660962, 245.560040223831, 1)obj = iDocument2D.ksLineSeg(162.04632660962, 245.560040223831, 162.04632660962, 248.932321997461, 1)obj = iDocument2D.ksLineSeg(162.04632660962, 248.932321997461, 172.04632660962, 248.932321997461, 1)obj = iDocument2D.ksLineSeg(172.04632660962, 248.932321997461, 172.04632660962, 253.49488340422, 1)obj = iDocument2D.ksLineSeg(172.04632660962, 253.49488340422, 152.04632660962, 253.49488340422, 1)iDocument2D.ksEndGroup()obj = iDocument2D.ksEndObj()После чего сохраняем данный документ в формате cdm, после этого макрос будет готов к использованию в среде разработки КОМПАС 3d. Для того чтобы запустить и проверить работоспособность макроса необходимо в менеджере библиотек выбрать папку прочие и перейти в КОМПАС-макро. Далее следует открыть макросы путем нажатия на соответствующую кнопку (рисунок 2). Рисунок 2 – МакросыДалее необходимо нажать выполнить, после чего макрос мгновенно начертит заданный ранее чертёж (рисунок 3). , Рисунок 3 - РезультатЧтобы можно было параметрически изменять значения размеров модели (т.е. не строить одну и ту же муфту, а иметь возможность построения целого семейства параметрических конструкций), необходимо обеспечить ввод значений пользователем. Проще всего это сделать при помощи встроенных в сам КОМПАС диалоговых окон (листинг 4).Сначала необходимо инициализировать переменную (в данном случае r) любым значением. Далее у объекта iKompasObject (ссылка на который получается командой iKompasObject = KAPI.KompasObject(iKompasObject) в начале программы) имеется ряд свойств, выводящих на экран КОМПАС диалоговые окна ввода данных (рисунок 4).Листинг 4 – Задание диалоговых оконr=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]
iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)4. Вывод В данной лабораторной работе были получены знания по работе с КОМПАС-Макро, а также был написан собственный макрос с возможностью ввода параметров для создания 2D объектов. ПРИЛОЖЕНИЕ# -*- coding: cp1251 -*-#|11import Kompas10API5 as KAPIimport Kompas10API7 as KAPI7import pythoncomfrom win32com.client import Dispatchimport LDefin2Dimport LDefin3Dimport ksConstants as CONST2D7import ksConstants3D as CONST3D7import MiscellaneousHelpers as MHiKompasObject = Dispatch('KOMPAS.Application.5')iKompasObject = KAPI.KompasObject(iKompasObject)MH.iKompasObject = iKompasObjectiApplication = Dispatch('KOMPAS.Application.7')iApplication = KAPI7.IApplication(iApplication)MH.iApplication = iApplicationiDocument2D = iKompasObject.ActiveDocument2D()iDocument = iApplication.ActiveDocumentiKompasDocument2D = KAPI7.IKompasDocument2D(iDocument)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]
r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]iDocument2D.ksLineSeg(r,r1,r3,r4,1)r=0.0r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1]r1=0.0r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1]r3=0.0r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1]r4=0.0r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1]