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

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

Только что, streamdown сказал:

Как создали, скомпилировали с параметрами регистрации?

После установки API SDK в MS Visual Studio появился новый шаблон проекта "SolidWorks COM Non-Attributed Addin". Я использовал этот шаблон, ничего не добавляя от себя, только прописал путь к SW, т.к. компилятор не видел импортируемые файлы *.tlb.

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


Кому приходилось использовать при написании программы document manager key? Следуя примеру из хелпа:

Скрытый текст

Imports SolidWorks.Interop.swdocumentmgr
Module Module1

    Sub ProcessDocCustomProperties(ByVal swDoc As SwDMDocument17)

        Dim vCustPropNameArr As Object
        Dim vCustPropName As Object
        Dim sCustPropStr As String
        Dim sCustPropStrWOPrefix As String
        Dim nPropType As Long


        vCustPropNameArr = swDoc.GetCustomPropertyNames : If IsNothing(vCustPropNameArr) Then Exit Sub
        Debug.Print("  Document Custom Properties:")

        For Each vCustPropName In vCustPropNameArr
            sCustPropStr = swDoc.GetCustomProperty(vCustPropName, nPropType)
            Debug.Print("    Prefaced     = " & vCustPropName & " <" & nPropType & "> = " & sCustPropStr)

            sCustPropStrWOPrefix = swDoc.GetCustomProperty2(vCustPropName, nPropType)
            Debug.Print("    Not Prefaced = " & vCustPropName & " <" & nPropType & "> = " & sCustPropStrWOPrefix)

            Debug.Print("")

        Next

        Debug.Print("")

    End Sub



    Sub ProcessConfigCustomProperties(ByVal swCfg As SwDMConfiguration14)

        Dim vCustPropNameArr As Object
        Dim vCustPropName As Object
        Dim sCustPropStr As String
        Dim sCustPropStrWOPrefix As String
        Dim nPropType As Long

        vCustPropNameArr = swCfg.GetCustomPropertyNames
        If IsNothing(vCustPropNameArr) Then Exit Sub
        Debug.Print("    Configuration Custom Properties:")

        For Each vCustPropName In vCustPropNameArr
            sCustPropStr = swCfg.GetCustomProperty(vCustPropName, nPropType)
            Debug.Print("      Prefaced     = " & vCustPropName & " <" & nPropType & "> = " & sCustPropStr)

            sCustPropStrWOPrefix = swCfg.GetCustomProperty2(vCustPropName, nPropType)
            Debug.Print("      Not Prefaced = " & vCustPropName & " <" & nPropType & "> = " & sCustPropStrWOPrefix)

            Debug.Print("")
        Next

        Debug.Print("")

    End Sub



    Sub main()

        Const sLicenseKey As String = "ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ключ-ч"
        Const sDocFileName As String = "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\samples\tutorial\api\ExternalReferencedPart.sldprt"

        Dim swClassFact As SwDMClassFactory
        Dim swDocMgr As SwDMApplication
        Dim swDoc As SwDMDocument17
        Dim swCfgMgr As SwDMConfigurationMgr
        Dim vCfgNameArr As Object
        Dim vCfgName As Object
        Dim swCfg As SwDMConfiguration14
        Dim nDocType As Long
        Dim nRetVal As Long


        ' Determine type of SOLIDWORKS file based on file extension

        If InStr(LCase(sDocFileName), "sldprt") > 0 Then
            nDocType = SwDmDocumentType.swDmDocumentPart
        ElseIf InStr(LCase(sDocFileName), "sldasm") > 0 Then
            nDocType = SwDmDocumentType.swDmDocumentAssembly
        ElseIf InStr(LCase(sDocFileName), "slddrw") > 0 Then
            nDocType = SwDmDocumentType.swDmDocumentDrawing
        Else

            ' Not a SOLIDWORKS file
            nDocType = SwDmDocumentType.swDmDocumentUnknown

            ' So cannot open
            Exit Sub

        End If

        ' Because drawing documents do not have configurations, 
        ' only continue running the project if the document
        ' is a part or assembly document

        If (nDocType <> SwDmDocumentType.swDmDocumentDrawing) Then

            swClassFact = CreateObject("SwDocumentMgr.SwDMClassFactory")
            swDocMgr = swClassFact.GetApplication(sLicenseKey)
            swDoc = swDocMgr.GetDocument(sDocFileName, nDocType, False, nRetVal) : Debug.Assert(SwDmDocumentOpenError.swDmDocumentOpenErrorNone = nRetVal)
            swCfgMgr = swDoc.ConfigurationManager

            Debug.Print("File = " & swDoc.FullName)
            Debug.Print("  ActiveCfgName           = " & swCfgMgr.GetActiveConfigurationName)
            Debug.Print("")
            Debug.Print("  Version                 = " & swDoc.GetVersion)
            Debug.Print("  Author                  = " & swDoc.Author)
            Debug.Print("  Comments                = " & swDoc.Comments)
            Debug.Print("  CreationDate (string)   = " & swDoc.CreationDate)
            Debug.Print("  CreationDate (numeric)  = " & swDoc.CreationDate2)
            Debug.Print("  Keywords                = " & swDoc.Keywords)
            Debug.Print("  LastSavedBy             = " & swDoc.LastSavedBy)
            Debug.Print("  LastSavedDate (string)  = " & swDoc.LastSavedDate)
            Debug.Print("  LastSavedDate (numeric) = " & swDoc.LastSavedDate2)
            Debug.Print("  Subject                 = " & swDoc.Subject)
            Debug.Print("  Title                   = " & swDoc.Title)
            Debug.Print("  LastUpdateStamp         = " & swDoc.GetLastUpdateStamp)
            Debug.Print("  IsDetachedDrawing       = " & swDoc.IsDetachedDrawing)
            Debug.Print("")

            ProcessDocCustomProperties(swDoc)

            vCfgNameArr = swCfgMgr.GetConfigurationNames

            For Each vCfgName In vCfgNameArr
                swCfg = swCfgMgr.GetConfigurationByName(vCfgName)

                Debug.Print("  " & vCfgName)
                Debug.Print("    Description              = " & swCfg.Description)
                Debug.Print("    ParentCfgName            = " & swCfg.GetParentConfigurationName)
                Debug.Print("    LastUpdateStamp          = " & swCfg.GetLastUpdateStamp)
                Debug.Print("")

                ProcessConfigCustomProperties(swCfg)
            Next

        End If

    End Sub

End Module

 

 не удается установить подключение, "вываливается" ошибка.

Скрытый текст

 

Помогите разобраться.

К слову: sw 2016 sp5.0 x64; win 7 x64

К слову слову: через Marshal.GetActiveObject("SldWorks.Application.24") - полет нормальный :dash1:

 

 

Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, MUXALblCH сказал:

Помогите разобраться

а в чём?

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

Далее, вставляете его в

Цитата

Const sLicenseKey As String

---------------------

Компилируя проект из

В 14.04.2018 в 11:30, VIKT0R сказал:

Использую MS Visual Studio 2008 C++

 

Вы никогда не получите ошибку NET.

Отлаживая свой проект Dll вам надо указать запускаемый процесс как путь к sldworks.exe

В 14.04.2018 в 21:06, VIKT0R сказал:

компилятор не видел импортируемые файлы

посмотрите пример с нуля https://forum.solidworks.com/thread/60577

Вот ещё тутор для standalone https://www.codestack.net/2018/03/create-c-stand-alone-application-for_5.html

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

 

Далее, вставляете его в...

 

В том то и дело. Ключ мне выслали. Его я вставляю в строковую константу и... происходит ошибка подключения.

Ссылка на сообщение
Поделиться на других сайтах
42 минуты назад, MUXALblCH сказал:

Ключ мне выслали

:smile: ох уж эти кодеры))) или пираты...или ещё кто.

Вы вот что скажите, ваш ключ для 2016 SW начинается вот прям на

Цитата

11785...

Или там букавки какие есть перед этим?

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

Дык буквы тоже нужны что-ль? В ключе перед цифровой частью еще есть символьная: "S********:sw******_*******-".

Но с этими символами тоже не подключается. Что то совсем беда...

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

Но с этими символами тоже не подключается

а должно. Там в этом ключе сначала буквы, потом вон тот многацифр_в_перемешку_с_кое_где_буквами.

Ссылка на сообщение
Поделиться на других сайтах
13 часа назад, streamdown сказал:

Отлаживая свой проект Dll вам надо указать запускаемый процесс как путь к sldworks.exe

посмотрите пример с нуля https://forum.solidworks.com/thread/60577

Вот ещё тутор для standalone https://www.codestack.net/2018/03/create-c-stand-alone-application-for_5.html

Спасибо за ссылки - изучаю.

Хотел бы спросить вот еще что: я так понял, что можно использовать MFC. Вопрос такой: а можно ли использовать QT ?

Ссылка на сообщение
Поделиться на других сайтах
13 минуты назад, VIKT0R сказал:

а можно ли использовать QT

и там и там C++

Разница лишь в том, чтоб правильно найти способ регистрации ActiveX вашей dll. Для exe - ваще без разницы.

Ссылка на сообщение
Поделиться на других сайтах
Только что, streamdown сказал:

Разница лишь в том, чтоб правильно найти способ регистрации ActiveX вашей dll. Для exe - ваще без разницы.

А какая разница между dll и exe? Такая же как в ProE API? В ProE dll работает в синхронном режиме - приложение запускается самим ProE на основе регистрационного файла. А exe работает в асинхронном режиме - приложение запускается пользователем, а затем либо запускает сессию ProE, либо подключается к уже существующей. Между этими режимами есть различия, например dll работает гораздо быстрее, т.к. непосредственно взаимодействует с ProE. Но в dll-режиме QT (или MFC) работает только в режиме модальных диалоговых окон, т.е. "подвешивает" ProE до тех пор, пока окно не закроешь, т.к. запускает свой цикл обработки сообщений. В exe-режиме связь с окном ProE не замораживается, т.е. я могу например нажать кнопку в диалоговом окне MFC, которая предложит мне выбрать геометрию в окне ProE, и окно ProE при этом будет доступно для работы.

В SW API такая же разница между dll и exe?

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

Если взять только смысл из вашего текста то да.

-----

1) Нет такого понятия как "синхронный режим". Есть STA

2) В SW пока идёт работа с COM сервером - он недоступен. В случае с dll из-за In-Process окно "подвешивается", в случае с exe - нет. Ибо окно не в потоке COM сервера.

3) Сам COM сервер вы можете как запустить так и получить запущенный CoCreateInstanse 

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

 

16 часов назад, streamdown сказал:

а должно....

Обратился в поддержку, выслали обновленный ключ. И все заработало...

Скрытый текст

images.jpg.0aecc38e9bbabd3c8033dfda904d6e9f.jpg

 

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

Доброго здравия форумчане.

 

Подскажите кто мне, грешному. Есть макрос, благополучно скачанный с просторов инета. Занимается он тем что экспортирует каждый лист многостраничного чертежа отдельным файлом пдф. Работал этот макрос работал - и вдруг - перестал. То есть - он вроде бы отрабатывает, перебирает все листы в чертеже, но - на выходе - ничего, пдф файлы не оздаются. Либо может быть создаются, но сбивается путь... не знаю

SaveEachSheetAsPDF-SHEETNAME.swp

 

И второй вопрос - может кто подскажет человеку, немного далекому от написания макросов, как можно задать формирование пдф имени по параметрам из модели в чертеже. То есть, примерно так:

$RPR:"Number" - $PRP:"Description" - $PRP:"Revision"

Ну либо же по тому же принципу - комбинирование нескольких свойств модели - автоматом задавать название листа чертежа (вкупе с работающим макросом о котором мой первый вопрос, результат был бы тем же)

 

заранее спасибо

Ссылка на сообщение
Поделиться на других сайтах
7 часов назад, serguss сказал:

Работал этот макрос работал

 

Странно.. Ибо полный путь к файлу пдф не прописывался.. Только имя листа.. Вот

 

https://drive.google.com/file/d/18aAH_UHIh-DiATnUpr4CAmsxaMNElKHZ/view?usp=drivesdk

7 часов назад, serguss сказал:

То есть, примерно так:

$RPR:"Number" - $PRP:"Description" - $PRP:"Revision"

 

Пример из справки

 

http://help.solidworks.com/2016/english/api/sldworksapi/Add_and_Get_Custom_Properties_Example_VB.htm

 

А там из элементов массива составить нужную строку..

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

Как получить указатель на тело в детали, выбранное в сборке содержащую эту деталь? Если я получаю persistent ID для этого тела через сборку, то в детали GetObjectByPersistReference3 по этому ID возвращает nothing.

Скрытый текст

2018-04-18_12-52-33.png.05d46036c2df33ee0a86c6187da7770c.png

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

Буду рад любым наводкам.

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

Как получить указатель

http://help.solidworks.com/2015/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iselectionmgr~getselectedobject6.html

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

----------

А можно так http://help.solidworks.com/2015/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IEntity~IGetComponent2.html

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

@streamdown, СПАСИБО. В голове прояснилось.  Метод getselectedobject6 подошел. С персистент ID так и не срослось.

Скрытый текст

 

Скрытый текст

 

Скрытый текст

 

 

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

Здравствуйте . Столкнулся вот с чем. На днях поставил солид 2018   и только сейчас обнаружил отсутствие примеров \samples\tutorial\api\. Папка пуста. Может я где какую галку не поставил при установке?

И еще такой момент, пока не соображу что у меня не так. Описываю ситуацию. В сборке ставлю справочную плоскость.  Далее  ставлю деталь и привязываю с помощью 3 сопряжений "совпадение", 2 из которых к общей сборке, а 3 сопряжение к справочной плоскости.  При использовании двух первых сопряжений деталь позиционируется правильно. А 3 сопряжение меняет в 50 процентах случаев (когда сборка симметричная) положение справочной плоскости.  Параметр "1" или "0" в коде:  Set matefeature = swAssy.AddMate5(swMateCOINCIDENT, 1, False, 0, 0, 0, 0, 0, 0, 0, 0, False, False, 0, fileerror) исправляет ситуацию, но приводит к проблемам в других 50% случаях. Если выполнять код пошагово и просто применить 3 сопряжение совпадение без кода, то все позиционируется правильно.  Во первых я не ожидал что плоскости в сборке могут быть отзеркалены при использовании сопряжений с "потомками" сборки . Как бы плоскости должны стоять монументально, если не трогать "предков" , а тут на тебе , получите распишитесь.

форум1.jpgфорум2.jpgфорум3.jpg

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

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

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

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

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

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

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

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

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

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

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



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