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

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

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

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

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

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

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

Начало координат программно

Автор Cherepushka, 04.07.17, 15:13:39

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

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

Cherepushka

ТрындецЪ, большое спасибо, что помогаете новичкам.
Можно ли создать макрос на открытие файлов в определенной папке.
Запускаю макрос, открывается первый файл и программа ждет, я выделяю грань и запускаю свой макрос. Затем сохранение, закрытие файла и открытие следующего пока цикл не прервется?
Спасибо.

ТрындецЪ

Цитата: Cherepushka от 06.07.17, 19:25:17
ТрындецЪ, большое спасибо, что помогаете новичкам.
Я и сам новичок, чуть пораньше Вас изучать начал, просто.

Цитата: Cherepushka от 06.07.17, 19:25:17
Можно ли создать макрос на открытие файлов в определенной папке.
Запускаю макрос, открывается первый файл и программа ждет, я выделяю грань и запускаю свой макрос. Затем сохранение, закрытие файла и открытие следующего пока цикл не прервется?
Как перебрать файлы в папке я знаю, а вот как вставить в код возможность ручного выбора граней, пока нет.

# -*- coding:  utf-8 -*-

from tkFileDialog import *
import os
import win32com.client
import Kompas10API7 as KAPI7

# Окно выбора папки (в переменную записывается путь к папке)
directory = askdirectory()

# Получаем список всех файлов имеющихся в папке
all_files = os.listdir(directory)

# Фильтруем файлы, отбирая только 3D-модели
files = filter(lambda x: x.endswith('.m3d'), all_files)


iApplication = win32com.client.Dispatch('KOMPAS.Application.7')
iApplication = KAPI7.IApplication(iApplication)

# Создаём цикл для работы с каждой 3D-моделью
for f in files:
    # Формируем полный путь к файлу
    PathName = directory + '/' + f

    iDocuments = iApplication.Documents
    # Открываем файл КОМПАСом
    iKompasDocument = iDocuments.Open (PathName, True, False )# True - в видимом режиме, False - с возможностью редактирования

    #############
    # Тут что-то делаем с файлом
    #############

    # Закрываем документ, сохранив сделанные изменения
    iKompasDocument.Close (1)
+ Благодарностей: 1

Cherepushka

Спасибо. То что надо.
Думаю вставлять в код выбор грани не нужно. Может проще попробовать? Нужно при появлении события koOpenDocumen вывести окно Да или нет. Да - открыл и ждет моих действий (Там я выделю грань и потом буду думать), Нет - закрыть документ. Чтобы цикл дальше не пошел и не сохранил документ.

ТрындецЪ

#23
Цитата: Cherepushka от 07.07.17, 12:54:50
Нужно при появлении события koOpenDocumen вывести окно Да или нет. Да - открыл и ждет моих действий (Там я выделю грань и потом буду думать), Нет - закрыть документ. Чтобы цикл дальше не пошел и не сохранил документ.
Если вылезет окно, то оно не даст ничего сделать пока не будет закрыто.

P.S.: Может, уважаемый Sabahs нам подскажет как подобные вещи реализовываются!?
P.P.S.: Мне на ум пока приходит только одна идея: создать бесконечный цикл, который с интервалом, например в 1 сек. будет проверять кол-во элементов в массиве выделенных граней. Если кол-во элементов становится больше или равно 3, то прерываем цикл и продолжаем выполнение кода.

Cherepushka

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

ТрындецЪ

Цитата: Cherepushka от 07.07.17, 13:53:57
Вообще то, что надо.
А без всякий интервалов же можно? Если выделено граней больше или равно 2, то прерываем цикл.
Бесконечные циклы вешают систему, во всяком случае у меня так. Поэтому приходится разгружать оперативную память, вводя перерывы.
Вот набросал код. Если пауза в цикле 2 сек, то у меня более менее сносно работает, если 1 сек, то при открытии второй детали КОМПАС вылетел.
# -*- coding:  utf-8 -*-

from tkFileDialog import *
import os
import win32com.client
import Kompas10API7 as KAPI7
import time

# Окно выбора папки (в переменную записывается путь к папке)
directory = askdirectory()

# Получаем список всех файлов имеющихся в папке
all_files = os.listdir(directory)

# Фильтруем файлы, отбирая только 3D-модели
files = filter(lambda x: x.endswith('.m3d'), all_files)


iApplication = win32com.client.Dispatch('KOMPAS.Application.7')
iApplication = KAPI7.IApplication(iApplication)

# Создаём цикл для работы с каждой 3D-моделью
for f in files:
    # Формируем полный путь к файлу
    PathName = directory + '/' + f

    iDocuments = iApplication.Documents
    # Открываем файл КОМПАСом
    iKompasDocument = iDocuments.Open (PathName, True, False )# True - в видимом режиме, False - с возможностью редактирования

    #############
    iKompasDocument3D = KAPI7.IKompasDocument3D(iKompasDocument)
    SelectionManager = iKompasDocument3D.SelectionManager

    while True:
        Planes = SelectionManager.SelectedObjects

        if type(Planes) == tuple:

            if len(Planes)>=3:
                break
        time.sleep(1) # время ожидания в секундах
    #############

    # Закрываем документ, сохранив сделанные изменения
    iKompasDocument.Close (1)
+ Благодарностей: 1

Cherepushka

Спасибо большое. Пока не запустил. Попробую после устранения ошибки
ImportError: DLL load failed: %1  Win32

Cherepushka

Не сталкивались с такой проблемой в Питоне?
Traceback (most recent call last):
  File "C:\Python26\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 325, in RunScript
    exec codeObject in __main__.__dict__
  File "D:\twin\novinka.pym", line 3, in <module>
    from tkFileDialog import *
  File "C:\Python26\lib\lib-tk\tkFileDialog.py", line 43, in <module>
    from tkCommonDialog import Dialog
  File "C:\Python26\lib\lib-tk\tkCommonDialog.py", line 11, in <module>
    from Tkinter import *
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 38, in <module>
    import FixTk
  File "C:\Python26\lib\lib-tk\FixTk.py", line 65, in <module>
    import _tkinter
ImportError: DLL load failed: %1  Win32.

Cherepushka

ТрындецЪ, спасибо за код.
Есть ли возможность прикрепить его в формате *.py?
После устранения проблем с библиотеками, скрипт запускается и Компас закрывается.
Спасибо.

ТрындецЪ

Цитата: Cherepushka от 10.07.17, 15:40:05
Есть ли возможность прикрепить его в формате *.py?
Так скопируйте, в блокнот вставьте и сохраните с каким нужно расширением. Что сложного!?

Cherepushka

Ничего сложного в копировании нет, просто компас закрывается, а питон висит.

ТрындецЪ

Цитата: Cherepushka от 10.07.17, 16:07:45
Ничего сложного в копировании нет, просто компас закрывается, а питон висит.
Я код выложил целиком, у меня КОМПАС не закрывается. Попробуйте паузу увеличить.
Код во вложении. При открытии файла программа ждёт выделения трех и более объектов, чтобы перейти к следующему файлу.

Cherepushka

Спасибо.
Извините за глупый вопрос., т.к. в Питоне только полмесяца копаюсь. А что происходит после выделения граней? Ничего? Программа сразу открывает следующий файл?

ТрындецЪ

Цитата: Cherepushka от 10.07.17, 19:41:43
Спасибо.
Извините за глупый вопрос., т.к. в Питоне только полмесяца копаюсь. А что происходит после выделения граней? Ничего? Программа сразу открывает следующий файл?
В этом макросе ничего не происходит после выделения.