Z Аксонометрия в моделях и сборках

Автор biomotor, 06.02.20, 08:59:42

« назад - далее »

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

biomotor

Задача:
написать в компас макро код для переворачивания моделей и сборок в Z Аксонометрию.

в справке SDK есть событие ksViewProjectionScheme с параметром ksVPSZAxonometric, но как применить не пойму.

я думал что-то типа...
iDocument3D = kompas_object.ActiveDocument3D()
iViewProjectionCollection = ViewProjectionScheme.Add(kompas6_constants_3d.ksVPSYAxonometric)
но все равно ничего не работает... что я не так делаю?

P.S. для чего вообще изменили аксонометрию "по умолчанию" ?

maminagadost

kompas_document = application.ActiveDocument
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
iDocument3D = kompas_object.ActiveDocument3D()
ksViewProjectionCollection = iDocument3D.GetViewProjectionCollection()
ProtectionType = 4# Номер типа проекции
ksViewProjectionCollection.viewProjectionScheme = ProtectionType
print(ProtectionType)

maminagadost

А вот вид поменять у меня не получается при помощи ksViewProjection

ksViewProjectionCollection = iDocument3D.GetViewProjectionCollection()
ProtectionType = ksViewProjectionCollection.ksViewProjection
print(ProtectionType)


хз как исправить

Slaviation

Добрый день. Этот пример изменит тип проекции в виде с модели

# -*- coding: utf-8 -*-
import pythoncom
from win32com.client import Dispatch, gencache, VARIANT
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = kompas_api_object.Application
kompas_document = application.ActiveDocument
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
kompas_document_2d1 = kompas_api7_module.IKompasDocument2D1(kompas_document_2d)
views_and_layers_manager = kompas_document_2d.ViewsAndLayersManager
views = views_and_layers_manager.Views
view = views.View(1) # Номер вида может быть другим
association_view = kompas_api7_module.IAssociationView(view)
association_view.ProjectionName = "#Изометрия" #Cпереди Сзади, Сверху, Снизу, Слева, Справа, Изометрия, Диметрия
view.Update()
hide_message = application.HideMessage
application.HideMessage = kompas6_constants.ksHideMessageYes
kompas_document_2d1.RebuildDocument()
application.HideMessage = hide_message

biomotor

Цитата: maminagadost от 06.02.20, 10:17:40kompas_document = application.ActiveDocument
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
iDocument3D = kompas_object.ActiveDocument3D()
ksViewProjectionCollection = iDocument3D.GetViewProjectionCollection()
ProtectionType = 4# Номер типа проекции
ksViewProjectionCollection.viewProjectionScheme = ProtectionType
print(ProtectionType)

Все верно, получилось. работает.
а можно еще автоматически ориентацию поменять по текущему типу проекции?

maminagadost

Цитата: biomotor от 06.02.20, 13:14:26Все верно, получилось. работает.
а можно еще автоматически ориентацию поменять по текущему типу проекции?
Не понял вашего вопроса. Ориентацию в смысле вид спереди, сверху и тп? Я это сейчас пытаюсь сделать пока не разобрался.

biomotor

К тому что имеется хочу добавить нажатие на эту кнопку...

Screenshot_1.jpg

biomotor

Цитата: biomotor от 06.02.20, 15:57:06К тому что имеется хочу добавить нажатие на эту кнопку...

Screenshot_1.jpg

Может уже где-то было на форуме, киньте ссылочку пожалуйста....

IViewProjection.SetCurrent - Установить данную проекцию отображения модели в окне текущей.

biomotor

Цитата: Sabahs от 07.02.20, 12:00:28IViewProjection.SetCurrent - Установить данную проекцию отображения модели в окне текущей.

NameError: name 'iViewProjection' is not defined

maminagadost

Цитата: maminagadost от 06.02.20, 15:22:53Не понял вашего вопроса. Ориентацию в смысле вид спереди, сверху и тп? Я это сейчас пытаюсь сделать пока не разобрался.

Вот: разобрался.

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

kompas_document = application.ActiveDocument
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
iDocument3D = kompas_object.ActiveDocument3D()
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
iDocument2D = kompas_object.ActiveDocument2D()

Documents = application.Documents
#  Получим активный документ
kompas_document = application.ActiveDocument
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
iDocument3D = kompas_object.ActiveDocument3D()

ksViewProjectionCollection = iDocument3D.GetViewProjectionCollection()
ProtectionType = 4
ksViewProjectionCollection.viewProjectionScheme = ProtectionType


GetByIndex = ksViewProjectionCollection.GetByIndex(7)# Номер соответствует изометрии
GetByIndex.SetCurrent()

biomotor

большое спасибо, для себя подправил так...

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pythoncom
from win32com.client import Dispatch, gencache
import MiscellaneousHelpers as MH

#  Подключим константы API Компас
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_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
iDocument3D = kompas_object.ActiveDocument3D()

ksViewProjectionCollection = iDocument3D.GetViewProjectionCollection()
ProjectionType = 1      # Номер типа проекции
ksViewProjectionCollection.viewProjectionScheme = ProjectionType
   
GetByIndex = ksViewProjectionCollection.GetByIndex(7)      # Номер соответствует изометрии
GetByIndex.SetCurrent()

evgs

А как программно нажать на эту кнопку?