# -*- coding: utf-8 -*-
#|1

import pythoncom
from win32com.client import Dispatch, gencache


#  Подключим константы API Компас
const = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
const_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Подключим описание интерфейсов API5
KAPI = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
iKompasObject = KAPI.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(KAPI.KompasObject.CLSID, pythoncom.IID_IDispatch))

#  Подключим описание интерфейсов API7
KAPI7 = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
iApplication = KAPI7.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(KAPI7.IApplication.CLSID, pythoncom.IID_IDispatch))


#  Получим активный документ
iKompasDocument = iApplication.ActiveDocument
iKompasDocument2D = KAPI7.IKompasDocument2D(iKompasDocument)
iDocument2D = iKompasObject.ActiveDocument2D()


# Подсчёт элементов на чертеже
iViewsAndLayersManager = iKompasDocument2D.ViewsAndLayersManager
iViews = iViewsAndLayersManager.Views
for i in range(iViews.Count):
    iView = iViews.ViewByNumber(i)
    Name = iView.Name
    iSymbols2DContainer = KAPI7.ISymbols2DContainer(iView)

    iLineDimensions = iSymbols2DContainer.LineDimensions
    for j in range(len(iLineDimensions)):
        iLineDimension = iLineDimensions.LineDimension(j)
        iDimensionText = KAPI7.IDimensionText(iLineDimension)
        iNominalText = iDimensionText.NominalText
        Str = iNominalText.Str
        print("Линейный размер - ", Str, " ", Name)

    iDiametralDimensions = iSymbols2DContainer.DiametralDimensions
    for j in range(len(iDiametralDimensions)):
        iDiametralDimension = iDiametralDimensions.DiametralDimension(j)
        iDimensionText = KAPI7.IDimensionText(iDiametralDimension)
        iNominalText = iDimensionText.NominalText
        Str = iNominalText.Str
        print("Диаметральный размер - ", Str, " ", Name)

    iTolerances = iSymbols2DContainer.Tolerances
    for j in range(len(iTolerances)):
        iTolerance = iTolerances.Tolerance(j)
        iToleranceParam = KAPI7.IToleranceParam(iTolerance)
        Val = iToleranceParam.Value
        print("Допуск формы - ", Val, " ", Name)