Как макросом открыть документ(файл) solidworks

Достаточно часто при работе программы нам может понадобиться открыть файл детали, сборки или чертежа. Например, мы пишем скрипт, который должен собирать параметры деталей в отдельный файл. Он должен открыть деталь собрать необходимую информацию и затем закрыть.

Для открытия файла в SW API 2013 существуют методы OpenDoc6 (с 2001 года) и OpenDoc7 (с 2008 года). Оба метода принадлежат интерфейсу ISldWorks. Что вполне логично – если у нас нет открытых документов, то мы не можем работать ни с какими другими интерфейсами (кроме тех, которые связаны с внешним видом окна программы).

Рассмотрим их более подробно.

OpenDoc6

Метод OpenDoc6 принимает 6 параметров.

[ModelDoc2] = [SldWorks].OpenDoc6 (FileName, Type, Options, Configuration, Errors, Warnings)

FileName. Тип string. Имя документа вместе с расширением, или полный путь, если он находится не в текущей директории (папке).

Type. Тип integer или long. Вид документа. Число соответствующее именованной константе из enum-списка swDocumentTypes_e. (подробнее смотри пост: как определить тип документа)

Options. Тип integer или long. Режим, в котором открывать документ. Сумма чисел из enum-списка swOpenDocsOptions_e.
Возможные значения:

§ 32swOpenDocOptions_AutoMissingConfig – использовать самую последнюю конфигурацию изображения детали или чертежа, если открывается документ, где могут отсутствовать ссылки на компоненты. Например, вы хотите открыть чертеж, а файла детали, на который он ссылается, нету. И чтобы не происходило ненужных обновлений чертежа, можно поставить этот режим.

§ 256swOpenDocOptions_DontLoadHiddenComponents – не загружать скрытые компоненты сборки. По умолчанию они загружаются.

§ 128swOpenDocOptions_LoadLightweight – открывать сборку с сокращенными компонентами.

§ 16swOpenDocOptions_LoadModel – загрузить отсоединенный чертеж.

§ 64swOpenDocOptions_OverrideDefaultLoadLightweight – Переписать настройки по умолчанию, чтобы открывать сборки как сокращенные.

§ 8swOpenDocOptions_RapidDraft – сделать документ чертежа отсоединенным.

§ 2swOpenDocOptions_ReadOnly – открыть документ только для чтения.

§ 1swOpenDocOptions_Silent – открыть документ тихо.

§ 4 – swOpenDocOptions_ViewOnly – открыть в режиме просмотра большой сборки.

Хочу заметить, что можно указывать одновременно несколько значений. Для этого достаточно просто сложить числа.

Configuration. Тип string. Какую конфигурацию открывать. Если пустая строка – то открывается последняя используемая конфигурация.

Errors. Тип long. Сюда пишется ошибка, которая случается при открытии файла. Число из enum-списка swFileLoadError_e.

Некоторые варианты:

§ 2 – файл не найден.

§ 65536 – документ с таким именем уже открыт

§ 8192 – документ сохранен в будущей версии

§ 1024 – тип файла не подходит

§ 131072 – файл зашифрован

§ 262144 – недостаточно памяти для работы

§ 524288 – файл содержит не отображаемые данные

Warnings. тип long. предупреждение или дополнительная информация при открытии файла. Значение из enum-списка swFileLoadWarnings_e

Некоторые варианты:

§ 128 – документ уже открыт

§ 64 – документ был определен в контексте другого, который еще не был загружен.

§ 32768 – документ открыт тихо и в Options указан параметр 32 (swOpenDocOptions_AutoMissingConfig)

§ 16384 – некоторые размеры в чертеже некорректны

§ 4 – документ используется другим пользователем

§ 32 – документ нуждается в перестроении

Метод OpenDoc6 возвращает указатель на объект класса ModelDoc2
Пример открытия файла с помощью метода OpenDoc6:

Visual Basic

Option ExplicitDim swApp As SldWorks.SldWorksDim fileName As StringDim Err As Long, Warn As LongSub main()Set swApp = Application.SldWorksfileName = "C:\ ring.SLDPRT" ‘здесь указываете полный путь до вашего файла.swApp.OpenDoc6 fileName, 1, 1, "", Err, WarnDebug.Print "Ошибка:" & ErrDebug.Print "Предупреждение: " & WarnEnd Sub

Option Explicit Dim swApp As SldWorks.SldWorks Dim fileName As String Dim Err As Long, Warn As Long Sub main() Set swApp = Application.SldWorks fileName = "C:\ ring.SLDPRT" ‘здесь указываете полный путь до вашего файла. swApp.OpenDoc6 fileName, 1, 1, "", Err, Warn Debug.Print "Ошибка:" & Err Debug.Print "Предупреждение: " & Warn End Sub

OpenDoc7

Метод OpenDoc7 принимает один параметр. Это более свежий метод по сравнению с OpenDoc6.

[ModelDoc2] = [Sldworks].OpenDoc7 Specification

Specification – объект класса DocumentSpecification.

Получить этот объект можно с помощью метода GetOpenDocSpec интерфейса ISldWorks.

Он принимает один параметр.

[DocumentSpecification] = [ISldWorks].GetOpenDocSpec (FileName)

FileName. Тип string. Полный путь до файла.

По сути этого хватит. То есть нам достаточно знать только путь до файла, чтобы его открыть.

Но класс DocumentSpecification существует не просто так. Он содержит свойства, которые позволяют, как указать более детальные настройки для открытия файла, так и получить информацию об открытом файле.

Например, можно получить информацию об ошибках, типе документа, конфигурации и т.д. Метод OpenDoc7 позволяет более гибко работать с настройками при открытии файла и дает больше информации о файле. Кроме того, он более новый, поэтому рекомендуется использовать его. Метод OpenDoc6 остался больше для совместимости.

Пример открытия файла детали с помощью метода OpenDoc7:

Visual Basic

Option ExplicitDim swApp As SldWorks.SldWorksDim spec As DocumentSpecificationDim fileName As StringSub main()Set swApp = Application.SldWorksfileName = "C:\ring.SLDPRT" ‘Здесь указываете полный путь до своего файлаSet spec = swApp.GetOpenDocSpec(fileName)swApp.OpenDoc7 specEnd Sub

Option Explicit Dim swApp As SldWorks.SldWorks Dim spec As DocumentSpecification Dim fileName As String Sub main() Set swApp = Application.SldWorks fileName = "C:\ring.SLDPRT" ‘Здесь указываете полный путь до своего файла Set spec = swApp.GetOpenDocSpec(fileName) swApp.OpenDoc7 spec End Sub