Уважаемые пользователи,
Хотим проинформировать вас о режиме работы регистрации на нашем сайте.
Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).
Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.
Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.
С уважением,
Команда Ascon
Цитата: mikor от Сегодня в 18:57:47Не помогло.Посмотрю подробней. Спасибо.
Цитата: lavgirb от Сегодня в 13:33:17задать ПробелДефисПробел
Цитата: lavgirb от Сегодня в 13:33:17Или два пробела, если их два.
file_path = r"C:\Тест" # путь сохранения
expansion = 3 # 1 - SAT; 2 - X_T; 3 - STEP; 4 - IGES; 5 - VRML; 6 - STL; 8 - JT; (с "-" для открытия документов, пример: -6); 203 - STEP203; 214 - STEP214; 242 - STEP242
#------------------------------Импорт модулей-----------------------------------
from win32com.client import Dispatch, gencache # библиотека API Windows
import os # работа с файовой системой
#-------------------------------------------------------------------------------
KompasConst = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants # константа для скрытия вопросов перестроения и 2D документов
KompasAPI7 = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0) # API7 КОМПАСа
iApplication = Dispatch("Kompas.Application.7") # интерфейс приложения КОМПАС-3D.
if iApplication.Visible == False: # если компас невидимый
iApplication.Visible = True # сделать КОМПАС-3D видемым
KompasAPI5 = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0) # API5 КОМПАСа
iKompasObject = Dispatch("Kompas.Application.5", None, KompasAPI5.KompasObject.CLSID) # интерфейс API КОМПАС
iKompasDocument = iApplication.ActiveDocument # получить текущий активный документ
iDocuments = iApplication.Documents # интерфейс для открытия документов
if iKompasDocument: # если есть активный документ
iKompasDocument3D = KompasAPI7.IKompasDocument3D(iKompasDocument) # интерфейс документов-моделей
iPart7 = iKompasDocument3D.TopPart # интерфейс компонента 3D документа (сам документ)
iParts7 = iPart7.Parts # интерфейс компонента 3D документа
iKompasDocument1 = KompasAPI7.IKompasDocument1(iKompasDocument) # дополнительный интерфейс IKompasDocument
iSaveAsDetailParam = iKompasDocument1.GetInterface(13172) # вспомогательный интерфейс преобразования в дет. (см. KompasAPIObjectTypeEnum)
iSaveAsDetailParam = KompasAPI7.ISaveAsDetailParam(iSaveAsDetailParam) # вспомогательный интерфейс преобразования в дет.
iSaveAsDetailParam.Local = False # сохранить как локальная дет.
iSaveAsDetailParam.SaveInitialObjects = True # оставлять исходные объекты
iSaveAsDetailParam.Unhistored = False # сохранить без истории
iFeature7 = KompasAPI7.IFeature7(iPart7) # интерфейс объекта Дерева построения
iResultBodies = iFeature7.ResultBodies # все тела
if iResultBodies: # если есть тела
if isinstance(iResultBodies, tuple): # если выбрано несколько тел (кортеж тел)
iApplication.HideMessage = KompasConst.ksHideMessageNo # скрыть сообщение перестроения и не перестраивать
for iResultBody in iResultBodies: # перебор всех выделеных объектов
iMarking = iResultBody.Marking # обозначение тела дет.
iName = iResultBody.Name # наименование тела дет.
print(f"В сборке: \"{iPart7.Marking} {iPart7.Name}\" есть тело: {iMarking} {iName}")
iFileName = f"{file_path}\{iMarking}_{iName}.m3d"
iSaveAsDetailParam.FileName = iFileName # путь сохранения
iSaveAsDetailParam.Marking = iMarking # обозначение
iSaveAsDetailParam.Marking = iName # наименование
iParts7.SaveAsDetail(iResultBody, iSaveAsDetailParam)
iKompasDocument = iDocuments.Open(iFileName, False, False) # Открытие файлов (False - в невидимом режиме, False - с возможностью редактирования)
iDocument3D = iKompasObject.ActiveDocument3D() # указатель на интерфейс текущего документа трехмерной модели
iAdditionFormatParam = iDocument3D.AdditionFormatParam() # интерфейс параметров сохранения модели IAdditionFormatParam
iAdditionFormatParam.Init() # старт инициализации параметров
iAdditionFormatParam.format = expansion # 1 - SAT; 2 - X_T; 3 - STEP; 4 - IGES; 5 - VRML; 6 - STL; 8 - JT; (с "-" для открытия документов, пример: -6); 203 - STEP203; 214 - STEP214; 242 - STEP242
iDocument3D.SaveAsToAdditionFormat(f"{file_path}\{iMarking}_{iName}.stp", iAdditionFormatParam) # сохранение документа в выбранный формат
iKompasDocument.Close(0) # 0 - закрыть документ без сохранения; 1 - закрыть документ, сохранив изменения; 2 - выдать запрос на сохранение документа, если он изменен.
os.remove(iFileName) # удалить *.m3d
iApplication.HideMessage = KompasConst.ksShowMessage # показывать сообщение перестроения
else:
iResultBody = iResultBodies # если один объект
iMarking = iResultBody.Marking # обозначение тела дет.
iName = iResultBody.Name # наименование тела дет.
print(f"В сборке: \"{iPart7.Marking} {iPart7.Name}\" есть тело: {iMarking} {iName}")
else:
print("Тел нет!")
else:
print("Откройте СБ или дет.!")
Цитата: bionorica2015 от Вчера в 16:53:03На время поставьте много плюсиков в имени компонента, сразу найдетеМощнейшее решение! Достойно награды от АСКОН!
Цитата: Assenisator от 27.02.25, 18:18:15Порой складывается впечатление, что люди разрабатывающие современные госты, к конструкторской деятельности и производству никакого отношения не имели от слова совсем.Прям как разработчики продуктов АСКОН
IPart7 assembly = parts.CreateDocumentEx("Сборка", DocumentTypeEnum.ksDocumentAssembly);
IKompasDocument3D assemblyDocument = assembly.BeginEdit(assembly.GetOpenDocumentParam());
IPart7 assemblyTopPart = assemblyDocument.TopPart;
IAuxiliaryGeomContainer assemblyAuxiliaryContainer = assembly as IAuxiliaryGeomContainer;
ILocalCoordinateSystems assemblyLocalCoordinateSystems = assemblyAuxiliaryContainer.LocalCoordinateSystems;
ILocalCoordinateSystem assemblyLocalCoordinateSystem = assemblyLocalCoordinateSystems.Add();
assemblyLocalCoordinateSystem.Name = "ЛН";
assemblyLocalCoordinateSystem.ParameterType = ksPoint3DTypeEnum.ksPDisplace;
IPoint3DParamDisplace assemblyPointDisplace = assemblyLocalCoordinateSystem.Parameters as IPoint3DParamDisplace;
assemblyPointDisplace.SetAssociationVertex(dinRailPartLocalCoordinateSystem);
assemblyPointDisplace.SetGuidingObject(dinRailPartLocalCoordinateSystem.DefaultObject[ksObj3dTypeEnum.o3d_axisOX]);
assemblyLocalCoordinateSystem.Update();
IVariable7 distanceVariable = assemblyLocalCoordinateSystem.Owner.Variables[false, true][4] as IVariable7;
distanceVariable.Expression = "LT*-1";
assemblyLocalCoordinateSystem.Update();
assembly.EndEdit(false);
assemblyTopPart.Update();
object v = assemblyTopPart.Owner.Variables[false, true];
IVariable7 variable = assemblyTopPart.Owner.Variables[false, true] as IVariable7;
variable.Expression = "10";
variable.External = true;
assemblyTopPart.Update();
IPart7 assembly = parts.CreateDocumentEx("Сборка", DocumentTypeEnum.ksDocumentAssembly);
IKompasDocument3D assemblyDocument = assembly.BeginEdit(assembly.GetOpenDocumentParam());
IPart7 assemblyTopPart = assemblyDocument.TopPart;
IVariable7 ltVariable = assemblyTopPart.AddVariable("LT", 10, "");