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

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

Только что, 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 пользователей

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




  • Сообщения

    • maxx2000
    • vladimir.songin
      То есть отключаю аналоговую обратную связь от аналогового входа, и подключаю вместо энкодера? Так не делал но сомнения у меня: Вход энкодера может  быть 12 или 5 вольт. У нас 12. Два пина питание, два пина Каналы A B соответственно, один пин REF (непонятно что он означает и как работает). Остальные соеденены вместе. На какие из них подавать аналаговый вход обратной связи дефлектора.  сигналы от энкодера приходят, проверял осцилографом на самом разьёме непосредственно на входе DM02, и некое значение уже могло бы отобразиться в поле энкодера при отключенном аналаговом входе.  Если отключить аналоговый вход, то видим единичку в обоих полях, но уже писал об этом.  
    • Алексей 1977
      Кто знает подскажите как отключить этот ненужный набор букв и символов в готовой УП? Я так думаю надо редактировать постпроцессор? Заранее спасибо ( Общая длина: 130.0) ( Заготовка:) ( MIN X: -10.970) ( MIN Y: -10.970) ( MIN Z: -6.500) ( MAX X: 10.970) ( MAX Y: 10.970) ( MAX Z: 0.000) ( COORDINATE SYSTEM: Глобальная СК) ( Кончик инструмента:) (   X: -0.000) (   Y: 0.000) (   Z: 10.000) ( Рекомендованная длина: 50.000) ( Количество кромок: 4) ( Инструмент:   Концевая фреза) ( DIAMETER: 10.000) ( Безопасность:) ( Рабочие ходы инструмента: Безопасная БЕЗ зарезов) ( Подводы инструмента: Безопасная БЕЗ зарезов) ( Переходы инструмента: Безопасная БЕЗ зарезов) ( Рабочие ходы патрона: Столкновения НЕ проверялись) ( Подводы патрона: Столкновения НЕ проверялись) ( Переходы патрона: Столкновения НЕ проверялись) ( Траектория: Шаблон) ( STEPOVER: 5.000) ( ДОПУСК:0.100) ( THICKNESS:0.000) ( Статистика:) ( LENGTH: 95.318)( LIFTS: ( TIME: 0/00/05) 1) G0X0Y0 G43Z10.H13 X4.75Y-8.227 Z5. G1Z0F500 X9.5Y-5.485F1000 Y5.485 X0Y10.97 X-9.5Y5.485 Y-5.485 X0Y-10.97 X4.75Y-8.227 G0Z10.
    • gudstartup
      считывание происходит при помощи вх\вых сигналов контроллера plc 
    • gudstartup
      @Maks Horhe так все таки скиньте бэкап эмулируем ваше чпу в cncguide и посмотрим куда поедет?  можете снять видео с фиксацией координатных позиций после каждого кадра. Выложу вашу программу пусть программисты посмотрят все ли в ней ок. %O0002 G40 G17 G94 G90 G49 G80 N1 G91 G28 Z0.0 N2 G91 G28 X0.0 Y0.0 N3 G91 G28 B0.0 C0.0 N4 M03 S200 N5 G90 G0 G53 B0.0 C0.0 N6 G54 N7 X0.0 Y0.0 N8 G90 G43 H01 N9 G90 G0 X0.0 Y0.0 N10 G90 G0 Z200.0 N11 G01 Z10.0 F1500. N12 M00 N13 G00 Z200.0 N14 G40 G49 G69 N15 G00 G53 Z0.0 N16 G00 G54 B0.0 C0.0 N17 G68.2 X0.0 Y0.0 Z0.0 1135. J39.2044 K-129.2315 N18 G53.1 N19 G01 X0.0 Y0.0 F1500 N20 G90 G43 H01 N21 G90 G01 X0.0 Y0.0 F1500 N22 G90 G01 Z200. F1500 N24 M00 N25 G00 Z200. N26 G40 G49 G69 N27 G91 G28 Z0.0 N28 G28 X0.0 Y0.0 N29 G91 G28 B0.0 C0.0 N30 M5 N31 M30
    • gudstartup
      @karlf 530 считывает ключ по специальному протоколу при помощи plc и получает его серийный номер а из него определяет возможные режимы доступа. там нет драйвера а есть plc модуль или несколько эти модули написаны на питоне  надпись smartkey исчезает с экрана при запуске чпу??
    • ДОБРЯК
      Для того, чтобы получить правильные высшие) формы при виртуальном эксперименте, нужно сделать грамотную КЭ модель. От разговора на эту тему вы постоянно уклоняетесь.  То нет компьютера под рукой, сделать простейший тест, то теряете интерес. :=) Сходимости энергии деформации при расчетах статики, недостаточно для точного определения высших собственных форм и частот.  Для того, чтобы грамотно использовать метод конечных элементов, нужно сделать много-много тестов в статике, динамике и ... Одной кнопки и двух конечных элементов в 3Д программе недостаточно для определения высших собственных форм...  У вас в качестве инструмента всего два конечных элемента, шести узловая несовместная оболочка Тимошенко и десяти узловой тетраэдр. И еще контакты при решении задачи на собственные числа. Вам ли говорить про правильность определения высших собственных форм для сложных изделий... :=)    
    • vad0000
      Покажите схему с разрешением на движение
    • vad0000
      Вход, а не выход Вытащить Аналоговый вход и все, как будто туда ничего не подключено И если мы подключим сигнал к энкодеру оси Х, то он стнтет одинаковый с аналоговым входом, который не подключен?
    • Snake 60
      @waze4534  Посмотрите вверх и прочитайте текст на красной полоске...
×
×
  • Создать...