Перейти к публикации

SW & VBA - пути к шаблонам


Рекомендованные сообщения



как программно определить пути к файлам шаблонов детали и сборки.

Справка гласит следующее (язык C#):

string Template = null;

			Template = swApp.GetUserPreferenceStringValue((int)swUserPreferenceStringValue_e.swDefaultTemplatePart);
string Template = null;

			Template = swApp.GetUserPreferenceStringValue((int)swUserPreferenceStringValue_e.swDefaultTemplateAssembly);

Или VBA:

Const swDefaultTemplatePart = 8

Const swDefaultTemplateAssembly = 9



Dim Template As String

	Template = swApp.GetUserPreferenceStringValue(swDefaultTemplatePart)
Ссылка на сообщение
Поделиться на других сайтах

Спасибо большое!

Вроде смотрел справку, но нужное не заметил((

Изменено пользователем swkx
Ссылка на сообщение
Поделиться на других сайтах

Еще похожий вопрос. Чтобы получить папку рабочего стола я использовал конструкцию:

Dim WSHShell

Set WSHShell = CreateObject("WScript.Shell")

DirDesktop = WSHShell.SpecialFolders.Item("Desktop")

В этом случае коллекция WSHShell.SpecialFolders имеет 18 элементов.

Что имеем в VBA для SW:

Dim fs

Set fs = CreateObject("Scripting.FileSystemObject")

fs.GetSpecialFolder(folderspec)

Для folderspec можно указать только три значения: WindowsFolder, SystemFolder, TemporaryFolder.

Я опять что-то недосмотрел в хэлпе или всё-таки для получения папки раб. стола без создания CreateObject("WScript.Shell") не обойтись ?

Ссылка на сообщение
Поделиться на других сайтах

Я опять что-то недосмотрел в хэлпе или всё-таки для получения папки раб. стола без создания CreateObject("WScript.Shell") не обойтись ?

То есть подключение c:\windows\System32\scrrun.dll ( CreateObject("Scripting.FileSystemObject") )

вас смущает меньше чем c:\windows\System32\wshom.ocx ( CreateObject("WScript.Shell") и c:\windows\System32\shell32.dll (WSHShell.SpecialFolders.Item(ShellSpecialFolderConstants.ssfDESKTOP)))?

без создания CreateObject("WScript.Shell") не обойтись ?

Как создали так и отключите, кажется так:
Set WSHShell = Nothing

Можно конечно получить список путей из реестра в файл, например, c:\regSetting.txt:

Shell "reg export ""HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"" ""c:\regSetting.txt"" /y"
, а потом ковырять построчно полученный файл с помощью Scripting.FileSystemObject и выбирать искомый путь и разбирать соответствующую строку, например: "Desktop"="C:\\Document And Settings\\UserName\\Desktop"
Ссылка на сообщение
Поделиться на других сайтах

Kelny, я вас не очень понял.

Пример с WScript.Shell вполне работоспособен, мне не нужно его отключать.

Меня смутил только сильно урезанный доступ к системным папкам, описанный в справке.

Ссылка на сообщение
Поделиться на других сайтах

Меня смутил только сильно урезанный доступ к системным папкам, описанный в справке.

Справка описывает лишь набор включенный в базовый комплект VBA, а ведь можно добавлять в том числе и свои DLL, как справке узнать о всех DLL которые можно добавить в вашу программу? Вот и получается, что справка лишь о базовых компонентах, включённых в программный пакет VBA.
Ссылка на сообщение
Поделиться на других сайтах

Понятно.

Еще вопрос: в API Help масса объектов в 2-х экземплярах - типа IModelDoc и IModelDoc2, ModelDoc и ModelDoc2 и т.п.

Чем они отличаются ?

Ссылка на сообщение
Поделиться на других сайтах

Еще вопрос: в API Help масса объектов в 2-х экземплярах - типа IModelDoc

Чем они отличаются ?

Там же в справке про IModelDoc написано: Obsolete. Superseded by IModelDoc2.

Что по русски: Устаревший. Заменен на IModelDoc2.

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

Ссылка на сообщение
Поделиться на других сайтах

Я поначалу тоже так понял, но потом увидел, что у метода SaveAs вообще 4 версии и в справке к SaveAs4 видим:

Obsolete. Superseded by IModelDocExtension::SaveAs

Это как понимать: использовать всё-таки SaveAs ? Без номеров ?

Ссылка на сообщение
Поделиться на других сайтах

Я поначалу тоже так понял, но потом увидел, что у метода SaveAs вообще 4 версии и в справке к SaveAs4 видим:

Obsolete. Superseded by IModelDocExtension::SaveAs

Это как понимать: использовать всё-таки SaveAs ? Без номеров ?

IModelDocExtension::SaveAs < тут IModelDocExtension

IModelDoc2::SaveAs2(3,4) < а тут IModelDoc2 < это устаревшее !

Ссылка на сообщение
Поделиться на других сайтах

Я на это обратил внимание, но опять наткнулся на непонятку: внизу приведён простенький макрос, сгенерированный SW. В предпоследней строке видим конструкцию Part.SaveAs3.

Почему же сам SW генерирует устаревший формат, а не последний, что было бы логичнее ?

Версия SW2010 SP5.0.

Dim swApp As Object

Dim Part As Object

Dim boolstatus As Boolean

Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc

Dim myModelView As Object

Set myModelView = Part.ActiveView

myModelView.FrameState = swWindowState_e.swWindowMaximized

Dim skSegment As Object

Set skSegment = Part.SketchManager.CreateCircle(0#, 0#, 0#, 0.018223, 0.005571, 0#)

Part.ClearSelection2 True

Part.SketchManager.InsertSketch True

Part.ShowNamedView2 "*Изометрия", 7

longstatus = Part.SaveAs3("C:\Users\Сергей\Desktop\Деталь1.SLDPRT", 0, 2)

End Sub

Ссылка на сообщение
Поделиться на других сайтах

Я на это обратил внимание, но опять наткнулся на непонятку: внизу приведён простенький макрос, сгенерированный SW. В предпоследней строке видим конструкцию Part.SaveAs3.

Почему же сам SW генерирует устаревший формат, а не последний, что было бы логичнее ?

Версия SW2010 SP5.0.

...

Процесс генерации(записи) макросов в SW, вообще вещь не до конца ясная(лично для меня). SW может что-то и не записать в макрос...

В данном случае, я бы сказал, VBA действует по принципу "не навреди" :rolleyes: : при записи в макрос - использует наиболее старые методы. ИМХО.

Посмотрите на всякий случай. что SW пишет в свой файл журнала:

"C:\Documents and Settings\Администратор\Application Data\SolidWorks\SolidWorks 2010\swxJRNL.swj" (это у меня он тут лежит, у Вас м.б. в др. месте).

И сравните: одинаковые ли методы SW записывает в этот файл и в макрос.

Ссылка на сообщение
Поделиться на других сайтах

ssv22,

Спасибо за наводку, я этого не знал.

Буду иметь в виду.

...

Посмотрел в журнале, там тоже, что и в сгенерированном макросе:

longstatus = Part.SaveAs3("C:\Users\Сергей\Desktop\Деталь1.SLDPRT", 0, 2)

Пожалуй, на этом пока и остановлюсь, а там видно будет...

Изменено пользователем swkx
Ссылка на сообщение
Поделиться на других сайтах

2 'swkx'

Так уж, видимо, сам VBA устроен ...

Попробуйте записать макрос в форматах VB.NET и C# - для них VBA "не указ", для них "VSTA" - "начальник". Может он (VSTA), все-таки поновее, и может обучен различать какой SP установлен.

Хотя я лично сомневаюсь...

Ссылка на сообщение
Поделиться на других сайтах

2 'swkx'

Так уж, видимо, сам VBA устроен ...

Попробуйте записать макрос в форматах VB.NET и C# - для них VBA "не указ", для них "VSTA" - "начальник". Может он (VSTA), все-таки поновее, и может обучен различать какой SP установлен.

Хотя я лично сомневаюсь...

VSTA - вообще больной вопрос. Я в принципе не могу создать на нём макрос:

<noindex>http://fsapr2000.ru/index.php?showtopic=42559</noindex>

Ссылка на сообщение
Поделиться на других сайтах

VSTA - вообще больной вопрос. Я в принципе не могу создать на нём макрос:

<noindex>http://fsapr2000.ru/index.php?showtopic=42559</noindex>

Я сейчас записал 2 макроса на VB.NET и C# - тоже, что и в VBA - используется метод ".SaveAs3".

PS. У меня макросы и записываются и исполняются, вроде без проблем... В результе получаю dll-ку.

Ссылка на сообщение
Поделиться на других сайтах

Чудеса продолжаются: только что попробовал опять создать макрос VSTA, просто так, на всякий случай, и получилось!

В связи с этим сразу три вопроса:

1. В чем принципиальное отличие .swp и .vbproj макросов ?

2. Для запуска .dll-ки на другом компьютере нужно наличие в папке с макросом и всех библиотек SolidWorks.Interop.SldWorks.dll, SolidWorks.Interop.swconst.dll и т.д. ?

3. Можно ли скомпилировать .dll так, чтобы всё было в одном файле ?

Ссылка на сообщение
Поделиться на других сайтах

Чудеса продолжаются: только что попробовал опять создать макрос VSTA, просто так, на всякий случай, и получилось!

В связи с этим сразу три вопроса:

1. В чем принципиальное отличие .swp и .vbproj макросов ?

2. Для запуска .dll-ки на другом компьютере нужно наличие в папке с макросом и всех библиотек SolidWorks.Interop.SldWorks.dll, SolidWorks.Interop.swconst.dll и т.д. ?

3. Можно ли скомпилировать .dll так, чтобы всё было в одном файле ?

хе-хе, да, Чудеса ... :biggrin:

1)

.swp - макрос на VBA

.vbproj - а это - .NET

2) я думаю именно эти не нужны: они же входят в состав SW, а макрос Вы на другом ПК из SW и запускаете. Если при разработке макроса были задействованы другие библиотеки, их наверняка нужно будет регистрировать.

3) вот этого я не знаю пока. М.б. потребуется создание дистрибутива...

Ссылка на сообщение
Поделиться на других сайтах

.swp - макрос на VBA

.vbproj - а это - .NET

Это понятно. Хотелось бы знать, чем они отличаются: производительностью, возможностями и т.п. ?

В каких случаях лучше использовать .swp, а в каких .vbproj ?

Я нигде не встречал таких общих рекомендаций..

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.



×
×
  • Создать...