• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Последние сообщения

Страницы1 2 3 4 5 6 7 8 9 10
1
Цитата: mikor от Сегодня в 18:57:47Не помогло.
Посмотрю подробней. Спасибо.
2
Цитата: lavgirb от Сегодня в 13:33:17задать ПробелДефисПробел
2025-03-29_18-53-28.png
Цитата: lavgirb от Сегодня в 13:33:17Или два пробела, если их два.
2025-03-29_18-55-28.png
Не помогло.
3
Python и КОМПАС-Макро / Re: Конвертирование или сохран...
Последний ответ от dimak222 - Сегодня в 18:09:23
Получилось сделать, оказываеться надо было добавить "iSaveAsDetailParam = KompasAPI7.ISaveAsDetailParam(iSaveAsDetailParam)", кто бы знал...
Но как всегда не без капли дёгтя, почему-то не работает "iSaveAsDetailParam.SaveInitialObjects = True" всё равно удаляет тела со сборки...

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("Откройте СБ или дет.!")
4
Валерий Александрович, а у нас народ по жизни не любит читать инструкции, руководства и настройки. Включил вилку в розетку и нажимай кнопку! Иногда пишут, делал в приложении. А как же ты не видел то-то или другое, как с завязанными глазами.

Ольга Б, книга знаменитая и не в пример новым изданиям. Для ремонта и воспроизведения самое то. Пользовался ею с 1977 года. И это ещё вручную всё считали и ИИ был в головах.
5
Параметризация (2D и 3D) / Re: Добавить Выделение сопряже...
Последний ответ от Lemieux - Сегодня в 17:31:45
Цитата: bionorica2015 от Вчера в 16:53:03На время поставьте много плюсиков в имени компонента, сразу найдете
Мощнейшее решение! Достойно награды от АСКОН!  :laugh:
6
Разное / Маштабирование при обдуве моде...
Последний ответ от whale - Сегодня в 17:27:20
Всем привет,
подскажиет если обдувать воздухом модель в уменьшанных размерах как получить силы, действующие на полномаштабный образец ?
Увеличить скорость обдува в масштабе маштабирования ? или в корень из масштаба ?
В Компас фло силы в результатах выдаются в ньютонах ?
7
Нормативная документация / Re: ГОСТ 2.109-2023
Последний ответ от Lemieux - Сегодня в 17:25:20
Цитата: Assenisator от 27.02.25, 18:18:15Порой складывается впечатление, что люди разрабатывающие современные госты, к конструкторской деятельности и производству никакого отношения не имели от слова совсем.
Прям как разработчики продуктов АСКОН  :laugh:
8
Полный код обхода

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();

Наткнулся чисто случайно. Видимо, когда КОМПАС парсит выражение из переменной и встречает неизвестное имя переменной, он создаёт её автоматически.
1. Создаётся ЛСК.
2. Получаю доступ к автоматически созданным переменным этой ЛСК.
3. Пишу выражение в нужную переменную.
4. Потом уже нахожу созданную переменную.
9
Короче. Походу как обычно очередной баг. Обошёл этот момент с помощью костыля.
10
Всех приветствую. Кто-то знает как добавить переменную в созданную подсборку?
Пытаюсь добавить вот так, но ничего не выходит.

IPart7 assembly = parts.CreateDocumentEx("Сборка", DocumentTypeEnum.ksDocumentAssembly);
IKompasDocument3D assemblyDocument = assembly.BeginEdit(assembly.GetOpenDocumentParam());
IPart7 assemblyTopPart = assemblyDocument.TopPart;
IVariable7 ltVariable = assemblyTopPart.AddVariable("LT", 10, "");

Страницы1 2 3 4 5 6 7 8 9 10