МУ_ЛР_ЛиПОАС. Методические указания по выполнению лабораторных работ по дисциплине (модулю) Лингвистическое и программное обеспечение автоматизированных систем
Скачать 2.76 Mb.
|
3.1. Запись макросаВозможно два способа создания макросов: вручную на языке Python или путем записи действий пользователя и затем редактирования некоторых параметров макроса. Чтобы записать Макрос, надо через библиотеку Компас Макро создать макрос. Выбрать – начать запись. Далее создать требуемый чертеж. Затем остановить запись. После этого можно будет посмотреть и отредактировать макрос. Кроме того, макрос может не только выполнять построения, но и анализировать уже существующие чертежи. Посмотрим, что мы можем реализовать в макросе. # -*- coding: utf-8 -*- #|6-1 # Подключим python import pythoncom from win32com.client import Dispatch, gencache import LDefin2D import MiscellaneousHelpers as MH # Подключим константы API Компас kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants # Подключим описание интерфейсов API5 kompas6_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 # Подключим описание интерфейсов API7 kompas_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 Documents = application.Documents # Получим активный документ kompas_document = application.ActiveDocument kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document) iDocument2D = kompas_object.ActiveDocument2D() # Посчитаем количество листов каждого из формата def amount_sheet(doc7): sheets = {"A0": 0, "A1": 0, "A2": 0, "A3": 0, "A4": 0, "A5": 0} for sheet in range(doc7.LayoutSheets.Count): format = doc7.LayoutSheets.Item(sheet).Format # sheet - номер листа, отсчёт начинается от 0 sheets["A" + str(format.Format)] += 1 * format.FormatMultiplicity return sheets # Прочитаем масштаб из штампа, ячейка №6 def stamp_scale(doc7): stamp = doc7.LayoutSheets.Item(0).Stamp # Item(0) указывает на штамп первого листа return stamp.Text(6).Str # Прочитаем основную надпись чертежа def stamp(doc7): for sheet in range(doc7.LayoutSheets.Count): style_filename = os.path.basename(doc7.LayoutSheets.Item(sheet).LayoutLibraryFileName) style_number = int(doc7.LayoutSheets.Item(sheet).LayoutStyleNumber) if style_filename in ['graphic.lyt', 'Graphic.lyt'] and style_number == 1: stamp = doc7.LayoutSheets.Item(sheet).Stamp return {"Scale": re.search(r"\d+:\d+", stamp.Text(6).Str).group(), "Designer": stamp.Text(110).Str} return {"Scale": 'Неопределенный стиль оформления', "Designer": 'Неопределенный стиль оформления'} # Просмотр всех ячеек def parse_stamp(doc7, number_sheet): stamp = doc7.LayoutSheets.Item(number_sheet).Stamp for i in range(10000): if stamp.Text(i).Str: print('Номер ячейки = %-5d Значение = %s' % (i, stamp.Text(i).Str)) # Подсчёт размеров на чертеже, для каждого вида по отдельности def count_dimension(doc7, module7): IKompasDocument2D = doc7._oleobj_.QueryInterface(module7.NamesToIIDMap['IKompasDocument2D'], pythoncom.IID_IDispatch) doc2D = module7.IKompasDocument2D(IKompasDocument2D) views = doc2D.ViewsAndLayersManager.Views count_dim = 0 for i in range(views.Count): ISymbols2DContainer = views.View(i)._oleobj_.QueryInterface(module7.NamesToIIDMap['ISymbols2DContainer'], pythoncom.IID_IDispatch) dimensions = module7.ISymbols2DContainer(ISymbols2DContainer) # Складываем все необходимые размеры count_dim += dimensions.AngleDimensions.Count + \ dimensions.ArcDimensions.Count + \ dimensions.Bases.Count + \ dimensions.BreakLineDimensions.Count + \ dimensions.BreakRadialDimensions.Count + \ dimensions.DiametralDimensions.Count + \ dimensions.Leaders.Count + \ dimensions.LineDimensions.Count + \ dimensions.RadialDimensions.Count + \ dimensions.RemoteElements.Count + \ dimensions.Roughs.Count + \ dimensions.Tolerances.Count return count_dim Рассмотрим основные методы создания 2D геометрии:
В чертежах часто встречается штриховка. Она делается хитрым образом: сначала дается команда начала штриховки iDocument2D.ksHatchByParam(iHatchParam), затем строятся объекты, образующие ее контур, а затем еще одна команда завершает построение. Параметры штриховки задаются следующим образом iHatchParam = kompas6_api5_module.ksHatchParam(kompas_object.GetParamStruct(kompas6_constants.ko_HatchParam)) iHatchParam.Init() iHatchParam.ang = 45 iHatchParam.color = -16777216 iHatchParam.sheeting = 1 iHatchParam.step = 3 iHatchParam.width = 0 iHatchParam.x = 0 iHatchParam.y = 0 iHatchParam.style = 0 iHatchParam.boundaries = iDocument2D.ksNewGroup(1) Контур строится командами iDocument2D.ksContour(1) iDocument2D.ksNewGroup(1) obj = iDocument2D.ksLineSeg(startX-A1, startY, startX-A1, startY-A2, 1) obj = iDocument2D.ksLineSeg(startX-A1, startY-A2, startX-A1+A4, startY-A2, 1) obj = iDocument2D.ksLineSeg(startX-A1+A4, startY-A2, startX-A1+A4, startY-A2-A5, 1) obj = iDocument2D.ksLineSeg(startX-A1+A4, startY-A2-A5, startX-A4, startY-A2-A5, 1) obj = iDocument2D.ksLineSeg(startX-A4, startY-A2-A5, startX-A4, startY-A2, 1) obj = iDocument2D.ksLineSeg(startX-A4, startY-A2, startX, startY-A2, 1) obj = iDocument2D.ksLineSeg(startX, startY-A2, startX, startY, 1) obj = iDocument2D.ksLineSeg(startX, startY, startX-A1, startY, 1) iDocument2D.ksEndGroup() obj = iDocument2D.ksEndObj() Размеры Размерный текст в общем случае состоит из следующих элементов: - текст перед номиналом (±); - символ перед номиналом (); - номинал (100); - отклонение (+0,2 и -0,4); - единица измерения (мм); - текст после номинала (2x45o). При создании размера нужно задать его основные параметры. Например: iLDimParam = kompas6_api5_module.ksLDimParam(kompas_object.GetParamStruct(kompas6_constants.ko_LDimParam)) iDimDrawing = kompas6_api5_module.ksDimDrawingParam(iLDimParam.GetDPar()) iDimDrawing.Init() iDimDrawing.ang = 0 iDimDrawing.lenght = 0 iDimDrawing.pl1 = False iDimDrawing.pl2 = False iDimDrawing.pt1 = 1 iDimDrawing.pt2 = 1 iDimDrawing.shelfDir = 0 iDimDrawing.textBase = 0 iDimDrawing.textPos = 0 iLDimSource = kompas6_api5_module.ksLDimSourceParam(iLDimParam.GetSPar()) iLDimSource.Init() iLDimSource.basePoint = 1 iLDimSource.dx = 27.564634923719 iLDimSource.dy = 0 iLDimSource.ps = 1 iLDimSource.x1 = 155.639999571484 iLDimSource.y1 = 247.511500571188 iLDimSource.x2 = 155.639999571484 iLDimSource.y2 = 198.511500571188 iDimText = kompas6_api5_module.ksDimTextParam(iLDimParam.GetTPar()) iDimText.Init(0) iDimText.bitFlag = 289 iDimText.sign = 0 iDimText.style = 3 iDimText.stringFlag = False iCharArray = kompas6_api5_module.ksDynamicArray(iDimText.GetTextArr()) obj = iDocument2D.ksLinDimension(iLDimParam) Для задания текста до и после размера, необходимо добавить iDimText.SetBitFlagValue(0x4, True)# есть текст До iDimText.SetBitFlagValue(0x80, True) # есть текст После Более подробная информация о каждой из функции представлена в справочной документации SDK. |