Главная страница
Навигация по странице:

  • Подключим python

  • Подключим описание интерфейсов API7

  • Получим активный документ

  • sheet - номер листа, отсчёт начинается от 0

  • Просмотр всех ячеек

  • Складываем все необходимые размеры

  • Примитив Метод Параметры

  • МУ_ЛР_ЛиПОАС. Методические указания по выполнению лабораторных работ по дисциплине (модулю) Лингвистическое и программное обеспечение автоматизированных систем


    Скачать 2.76 Mb.
    НазваниеМетодические указания по выполнению лабораторных работ по дисциплине (модулю) Лингвистическое и программное обеспечение автоматизированных систем
    Дата12.04.2023
    Размер2.76 Mb.
    Формат файлаdoc
    Имя файлаМУ_ЛР_ЛиПОАС.doc
    ТипМетодические указания
    #1057976
    страница26 из 32
    1   ...   22   23   24   25   26   27   28   29   ...   32

    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 геометрии:

    Примитив

    Метод

    Параметры

    точка

    ksPoint(x,y,style)

    ставит точку с координатами x,y и стилем style. Стили точек приведены в приложении 1

    отрезок

    ksLineSeg(x1,y1,x2,y2,type)

    проводит отрезок стилем линии type из точки (x1,y1) в точку (x2,y2)

    прямая

    ksLine(x,y,angle)

    проводит бесконечную прямую через точку x,y под углом в градусах angle к положительному направлению оси ОХ

    дуга

    ksArcBy3Points (x1, y1, x2,

    y2, x3, y3, type)



    строит дугу по трем точкам стилем линии type

    дуга

    ksArcByAngle (xc, yc,

    rad, f1, f2, direction,

    type)


    строит дугу:

    xc, yc - координаты центра дуги, rad - радиус дуги,

    f1, f2 - начальный и конечный угол дуги в градусах,

    direction - направление отрисовки дуги:

    1 - против часовой стрелки,

    -1 - по часовой стрелке,

    type - стиль линии

    дуга

    ksArcByPoint (xc, yc,

    rad, x1, y1, x2, y2,

    direction, type)

    строит дугу:

    xc, yc - координаты центра дуги, rad - радиус дуги, x1, y1 - координаты начальной точки дуги, x2, y2 - координаты конечной точки дуги, direction - направление отрисовки дуги:

    1 - против часовой стрелки,

    -1 - по часовой стрелке,

    type - стиль линии.

    окружность

    ksCircle(xc, yc, rad, type)

    строит окружность с центром в точке xc,yc, радиусом rad и стилем линии type


    В чертежах часто встречается штриховка. Она делается хитрым образом: сначала дается команда начала штриховки 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.
    1   ...   22   23   24   25   26   27   28   29   ...   32


    написать администратору сайта