# -*- coding: utf-8 -*-
#|L_Group

import pythoncom
from win32com.client import Dispatch, gencache

import LDefin2D
import MiscellaneousHelpers as MH

#  Подключим константы API Компас
const_2d = 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_5 = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
iKompas_5 = kapi_5.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kapi_5.KompasObject.CLSID, pythoncom.IID_IDispatch))
MH.iKompasObject = iKompas_5

#  Подключим описание интерфейсов API7
kapi_7 = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
iApplication_7 = kapi_7.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kapi_7.IApplication.CLSID, pythoncom.IID_IDispatch))
MH.iApplication = iApplication_7


iDocuments_7 = iApplication_7.Documents
#  Получим активный документ
iDocument_7 = iApplication_7.ActiveDocument
iDocument2D_7 = kapi_7.IKompasDocument2D(iDocument_7)
iDocument2D_5 = iKompas_5.ActiveDocument2D()

# Работа с группами в API5

# Вставить фрагмент из файла
##iFragment_5 = kapi_5.ksFragment(iDocument2D_5.GetFragment())
##iDefinition_5 = iFragment_5.ksFragmentDefinition("D:/Уроки программированию в КОМПАС/Python курс 2/Пример Фрагмента.frw", "Фрагмент из файла", 1)
##iPlacementParam_5 = kapi_5.ksPlacementParam(iKompas_5.GetParamStruct(const_2d.ko_PlacementParam))
##iPlacementParam_5.Init()
##iPlacementParam_5.angle = 0
##iPlacementParam_5.scale_ = 1
##iPlacementParam_5.xBase = 80
##iPlacementParam_5.yBase = 200
##obj_5 = iFragment_5.ksInsertFragment(iDefinition_5, True, iPlacementParam_5)

# Вставить фрагмент из библиотеки
##iDefinition_5 = iFragment_5.ksFragmentDefinition("C:/Program Files/ASCON/KOMPAS-3D v20/Libs/GRAPHIC.KLE|Втулка 1  M8@24.frw", "Фрагмент из библиотеки", 0)
##iPlacementParam_5.Init()
##iPlacementParam_5.angle = 0
##iPlacementParam_5.scale_ = 1
##iPlacementParam_5.xBase = 50
##iPlacementParam_5.yBase = 150
##obj_5 = iFragment_5.ksInsertFragment(iDefinition_5, False, iPlacementParam_5)

# Локальный фрагмент
##iFragment_5 = kapi_5.ksFragment(iDocument2D_5.GetFragment())
##iPlacementParam_5 = kapi_5.ksPlacementParam(iKompas_5.GetParamStruct(const_2d.ko_PlacementParam))
##iFragment_5.ksLocalFragmentDefinition("LocalFrag")
##
##iFragment_5_Doc = iKompas_5.ActiveDocument2D()
##iFragment_5_Doc.ksLineSeg(0, 0, 10, 0, 1)
##iFragment_5_Doc.ksLineSeg(0, 0, 0, 10, 1)
##iLocalFragmentDefinition_5 = iFragment_5.ksCloseLocalFragmentDefinition()
##
##iPlacementParam_5.Init()
##iPlacementParam_5.angle = 0
##iPlacementParam_5.scale_ = 1
##iPlacementParam_5.xBase = 100
##iPlacementParam_5.yBase = 250
##obj_5 = iFragment_5.ksInsertFragmentEx(iLocalFragmentDefinition_5, True, iPlacementParam_5, False)

# Макрообъект
##iDocument2D_5.ksMacro(1)
##iDocument2D_5.ksCircle(100, 100, 20, 1)
##iDocument2D_5.ksLineSeg(100, 100, 120, 120, 1)
##iMacroo_Obj_5 = iDocument2D_5.ksEndObj()
##iDocument2D_5.ksSetMacroPlacement(iMacroo_Obj_5,0,0,0,0)

# Группы

# Временная
##iGroupV_5 = iDocument2D_5.ksNewGroup(1)
##iDocument2D_5.ksCircle(0, 0, 20, 1)
##iDocument2D_5.ksLineSeg(0, 0, 20, 20, 1)
##iDocument2D_5.ksEndGroup()
##iDocument2D_5.ksStoreTmpGroup(iGroupV_5)
##
##iDocument2D_5.ksMoveObj(iGroupV_5, 50, 100)
##iDocument2D_5.ksClearGroup(iGroupV_5, True)

# Модельная
##iGroupM_5 = iDocument2D_5.ksNewGroup(0)
##iDocument2D_5.ksCircle(0, 0, 10, 1)
##iDocument2D_5.ksLineSeg(0, 0, 10, 0, 1)
##iDocument2D_5.ksEndGroup()
##
##iDocument2D_5.ksMoveObj(iGroupM_5, 140, 100)
##iDocument2D_5.ksSaveGroup(iGroupM_5, "MyGroup2")
##
##iGroupC_5= iDocument2D_5.ksGetGroup("MyGroup2")
##iDocument2D_5.ksMoveObj(iGroupC_5, 30, 0)

# Работа с группами в API7
iViewsAndLayersManager = iDocument2D_7.ViewsAndLayersManager
iViews_7 = iViewsAndLayersManager.Views
iView_7 = iViews_7.ActiveView

iDrawingContainer_7 = kapi_7.IDrawingContainer(iView_7)
iInsertionsManager = kapi_7.IInsertionsManager(iDocument_7)

# Вставить фрагмент из файла
##iInsertionObjects_7 = iDrawingContainer_7.InsertionObjects
##
##iInsertionDefinition_7 = iInsertionsManager.AddDefinition(1, "Фрагмент из файла", "D:/Уроки программированию в КОМПАС/Python курс 2/Пример Фрагмента.frw")
##
##iInsertionObject_7 = iInsertionObjects_7.Add(iInsertionDefinition_7)
##
##iInsertionFragment_7 = kapi_7.IInsertionFragment (iInsertionObject_7)
##iInsertionFragment_7.MultiLayer = True
##
##iInsertionObject_7.SetPlacement( 100, 200, 0, False)
##iInsertionObject_7.Update()
##
# Вставить фрагмент из библиотеки
##iInsertionObjects_7 = iDrawingContainer_7.InsertionObjects
##
##iInsertionDefinition_7 = iInsertionsManager.AddDefinition(1, "Фрагмент из библиотеки", "C:/Program Files/ASCON/KOMPAS-3D v20/Libs/GRAPHIC.KLE|Втулка 1  M8@24.frw")
##
##iInsertionObject_7 = iInsertionObjects_7.Add(iInsertionDefinition_7)
##
##iInsertionFragment_7 = kapi_7.IInsertionFragment (iInsertionObject_7)
##iInsertionFragment_7.MultiLayer = True
##
##iInsertionObject_7.SetPlacement( 50, 150, 0, False)
##iInsertionObject_7.Update()

# Макрообъект
iMacroObjects_7 = iDrawingContainer_7.MacroObjects

iMacroObject_7 = iMacroObjects_7.Add()
objCircle_5 = iDocument2D_5.ksCircle(50, 100, 20, 1)
objLine_5 = iDocument2D_5.ksLineSeg(50, 100, 70, 120, 1)

iMacroObject_7.AddObjects(objCircle_5)
iMacroObject_7.AddObjects(objLine_5)

iMacroObject_7.AddDefaultHotPoint(50, 100)

iMacroObject_7.Name = "Макрообъект"
iMacroObject_7.SetPlacement(100,0,0,0,0)
iMacroObject_7.Update()
