Программирование на Python

Автор bot_on_war3, 23.04.19, 19:01:18

« предыдущая - следующая »

0 Пользователей и 1 гость просматривают эту тему.

bot_on_war3

Не создается фрагмент. Компас запускается, но фрагмент не создается.

import math
from tkinter import *
from tkinter import messagebox

import pythoncom
from win32com.client import Dispatch, gencache

import Kompas6API5 as KAPI

import LDefin3D
import LDefin2D
import MiscellaneousHelpers as MH
from time import sleep

#  Подключим константы 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



def get_kompas_api7():
    module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
    api = module.IKompasAPIObject(
        Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(module.IKompasAPIObject.CLSID,
                                                                 pythoncom.IID_IDispatch))
    const = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
    return module, api, const

def launch_kompas():
    module7, api7, const7 = get_kompas_api7()   # Подключаемся к API7
    app7 = api7.Application                     # Получаем основной интерфейс
    app7.Visible = True                        # Показываем окно пользователю (если скрыто)
    app7.HideMessage = const7.ksHideMessageNo   # Отвечаем НЕТ на любые вопросы программы
    print(app7.ApplicationName(FullName=True))  # Печатаем название программы


def alpha(h1, h2, d1, d2, s):
    r1, r2 = d1/2, d2/2
    if r2 < r1:
        r1, r2 = r2, r1
    if s:
        a = h1+h2
    else:
        a = h1-h2

    f = (r2-r1)/(a-(r2-r1))
    u = math.asin(f)
    u = math.degrees(u)*2
    ug = math.trunc(u)
    u = math.trunc((u-ug)*60)
    gradus = u/60 + ug
    it = ug, '°', u, '′'

    return it, gradus


#Проверка
print(alpha(70, 10, 25, 24, s=0))



#Функционал кнопки(Выполнить)
def click_button():
    try:
        h1 = float(message_entry1.get())
        h2 = float(message_entry2.get())
        d1 = float(message_entry3.get())
        d2 = float(message_entry4.get())
        s = bulging.get()
        rez = alpha(h1, h2, d1, d2, s)[1]

        #Проверка
        if s and h2 > (d2/2):
            messagebox.showinfo('Ошибка', "'h2' имеет неверное значение", icon="warning")

        else:



            launch_kompas()

            Documents = application.Documents
            #  Получим активный документ
            kompas_document = application.ActiveDocument
            kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
            iDocument2D = kompas_object.ActiveDocument2D()
            iKompMath = kompas_object.GetMathematic2D()

            #  Создаем новый документ
            kompas_document = Documents.AddWithDefaultSettings(kompas6_constants.ksDocumentFragment, True)

            kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
            iDocument2D = kompas_object.ActiveDocument2D()

            # Пробуем получить активный 2D-документ (API5)
            iDocument2D = kompas_object.ActiveDocument2D()

            # Если документа нет, его нужно создать
            if iDocument2D is None:
                # Получим коллекцию документов (API7)
                documents = application.Documents
                # Добавим в коллекцию новый документ типа "Фрагмент" (2)
                new_document_2d = documents.Add(2, True)
                # Теперь снова устанавливаем на него ссылку для API5
                if new_document_2d is not None:
                    print('Создан новый документ')
                    iDocument2D = kompas_object.ActiveDocument2D()
                else:
                    # Если не удалось создать документ - выходим
                    print('Не удалось создать чертеж, работа завершена')
                    exit(0)
            else:
                print('Построения в текущем документе')




            r1, r2 = d1/2, d2/2
            if r2 < r1:
                r1, r2 = r2, r1
            if s and h2 <= r2:
                y2 = -(r2 - h2)
            else:
                y2 = -(h2 + r2)
            y1 = -(h1 + r1)
            y1line = y1 - r1*2

            obj = iDocument2D.ksLineSeg(-d2, 0, d2, 0, 1)#Верхняя горизонтальная линия
            obj = iDocument2D.ksLineSeg(-d2, y1line, d2, y1line, 1)#Нижняя горизонтальная линия
            obj = iDocument2D.ksLineSeg(-d2, y1line, -d2, 0, 1)#Левая вертикальная линия
            obj = iDocument2D.ksLineSeg(d2, y1line, d2, 0, 1)#Правая вертикальная линия

            obj = iDocument2D.ksCircle(0, y2, r2, 1)
            obj = iDocument2D.ksCircle(0, y1, r1, 1)

ТрындецЪ

У Вас в коде винегрет.
Функции питон выполняет только есть их вызывать.
В этот коде выполняется только подключение модулей КОМПАСА и строка "print(alpha(70, 10, 25, 24, s=0))". Ещё в конце последней функции на отсутствие блока except ругается.

Fess11

Подскажите пожалуйста мне нужен раскрой в компасе как его сделать? моя почта fess.08@mail.ru