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

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

Всем салют!

Макрос высвечивает subFeature, но только активной конфигурации. Подскажите как сделать чтобы subFeature высветились на всех конфигурациях?

 

Sub main()

    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim Part As SldWorks.ModelDoc2
    Dim feature As Object
    Dim feat As Object
    Dim featureName As String
    Dim bres As Boolean
    
    Set swApp = Application.SldWorks
    Set swApp = CreateObject("SldWorks.Application")
    Set Part = swApp.ActiveDoc
    Set swModel = swApp.ActiveDoc
    Set feature = Part.FirstFeature
    
    ' Dim ConfigNames As Variant
    ' Dim i As Integer
    '
    ' ConfigNames = Part.GetConfigurationNames
    ' For i = 0 To UBound(ConfigNames)
    
    While Not feature Is Nothing
    
        featureName = feature.Name
        
        Set subFeat = feature.GetFirstSubFeature
        
            While Not subFeat Is Nothing
            
            subFeatureName = subFeat.Name
            
                If InStr(1, featureName, SearchStr, 1) Then
                
                    res = Part.SelectByID(subFeatureName, "BODYFEATURE", 0, 0, 0)
                    
                    res = Part.EditUnsuppress()
                    
                    bres = swModel.EditRebuild3
                
                End If
            
            Set subFeat = subFeat.GetNextSubFeature
            
            Wend
        
        Set feature = feature.GetNextFeature()
    
    Wend
    
    ' Next

End Sub

post-41325-0-53655800-1387346791_thumb.png

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


Всем салют!

Макрос высвечивает subFeature, но только активной конфигурации. Подскажите как сделать чтобы subFeature высветились на всех конфигурациях?

 

Sub main()

    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim Part As SldWorks.ModelDoc2
    Dim feature As Object
    Dim feat As Object
    Dim featureName As String
    Dim bres As Boolean
    
    Set swApp = Application.SldWorks
    Set swApp = CreateObject("SldWorks.Application")
    Set Part = swApp.ActiveDoc
    Set swModel = swApp.ActiveDoc
    Set feature = Part.FirstFeature
    
    ' Dim ConfigNames As Variant
    ' Dim i As Integer
    '
    ' ConfigNames = Part.GetConfigurationNames
    ' For i = 0 To UBound(ConfigNames)
    
    While Not feature Is Nothing
    
        featureName = feature.Name
        
        Set subFeat = feature.GetFirstSubFeature
        
            While Not subFeat Is Nothing
            
            subFeatureName = subFeat.Name
            
                If InStr(1, featureName, SearchStr, 1) Then
                
                    res = Part.SelectByID(subFeatureName, "BODYFEATURE", 0, 0, 0)
                    
                    res = Part.EditUnsuppress()
                    
                    bres = swModel.EditRebuild3
                
                End If
            
            Set subFeat = subFeat.GetNextSubFeature
            
            Wend
        
        Set feature = feature.GetNextFeature()
    
    Wend
    
    ' Next

End Sub

Один из вариантов заложен же в вашем вопросе. Включить ваш цикл в цикл активации каждой конфигурации.

И если вы получили ссылку на Feature и она прошла вашу проверку, зачем использовать снова SelectByID? У Feature есть методы IsSuppressed2 для проверки погашенности и SetSuppression2 для установки погашенности...

 

P.S. И зачем применять строку bres = swModel.EditRebuild3 в каждой итерации?

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

@@Shvg, а можно чуть подробнее на этом месте "Включить ваш цикл в цикл активации каждой конфигурации" ?

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

@@Nazarrr,

ну всё же понятно)))

раскомментируйте

Dim ConfigNames As Variant
Dim i As Integer
ConfigNames = Part.GetConfigurationNames
For i = 0 To UBound(ConfigNames)
Ссылка на сообщение
Поделиться на других сайтах

@@streamdown, в том то и дело, не работает)) 

SolidWorksFile.rar

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

@@Shvg, а можно чуть подробнее на этом месте "Включить ваш цикл в цикл активации каждой конфигурации" ?

Я, к сожалению, не внимательно посмотрел код и ошибся с конфигурациями. Если и сейчас правильно понял проблему, то вот небольшой код:

Sub main()
    On Error GoTo LineError
    Set swApp = Application.SldWorks
    Dim swModel As ModelDoc2
    Set swModel = swApp.ActiveDoc
    
    If swModel Is Nothing Then Exit Sub
    
    Dim typeDoc As Integer
    typeDoc = swModel.GetType()
    
    If typeDoc <> swDocPART Then Exit Sub
    
    Dim swPart As PartDoc
    Set swPart = swModel
    
    Dim arrNamesConfig As Variant
    arrNamesConfig = swModel.GetConfigurationNames()
        
    Dim swFeature As SldWorks.Feature
    Set swFeature = swPart.FirstFeature
    
    Dim strSearch As String
    strSearch = "Flat-Pattern"
    
    While Not swFeature Is Nothing
        Dim nameTypeFeature As String
        nameTypeFeature = swFeature.GetTypeName2()
        
        Dim swSubFeature As SldWorks.Feature
        Set swSubFeature = swFeature.GetFirstSubFeature()
        
        If nameTypeFeature = "FlatPattern" Then
            While Not swSubFeature Is Nothing
                Dim nameTypeSubFeature As String
                nameTypeSubFeature = swSubFeature.GetTypeName2()
                
                Dim nameSubFeature As String
                nameSubFeature = swSubFeature.Name()
                
                If nameTypeSubFeature = "UiBend" Then
                    
                    Dim bres As Boolean
                    bres = swSubFeature.SetSuppression2(swUnSuppressFeature, swAllConfiguration, arrNamesConfig)
                
                End If
                
                Set swSubFeature = swSubFeature.GetNextSubFeature()
            Wend
        End If
        Set swFeature = swFeature.GetNextFeature()
    Wend
    
    swModel.EditRebuild3
    Exit Sub
    
LineError:
End Sub

 

P.S. Nazarrr, указывайте версию SW.

   

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

Не обязательно

Sub main()


Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim Part As SldWorks.ModelDoc2
    Dim feature As Object
    Dim feat As Object
    Dim featureName As String
    Dim bres As Boolean
    
    Set swApp = Application.SldWorks
    Set swApp = CreateObject("SldWorks.Application")
    Set Part = swApp.ActiveDoc
    Set swModel = swApp.ActiveDoc
    'Set feature = Part.FirstFeature
   
    Dim ConfigNames As Variant
    Dim i As Integer
    
     ConfigNames = Part.GetConfigurationNames
     For i = 0 To UBound(ConfigNames)
        sConfigName = ConfigNames(i)
        bShowConfig = swModel.ShowConfiguration2(sConfigName)
    Set feature = Part.FirstFeature
    While Not feature Is Nothing
    
        featureName = feature.Name
           Set subFeat = feature.GetFirstSubFeature
               While Not subFeat Is Nothing
               subFeatureName = subFeat.Name
            
                If InStr(1, featureName, SearchStr, 1) Then
                
                    res = Part.SelectByID(subFeatureName, "BODYFEATURE", 0, 0, 0)
                    
                    res = Part.EditUnsuppress()
                    
                    bres = swModel.EditRebuild3
                
                End If
            
            Set subFeat = subFeat.GetNextSubFeature
            
            Wend
        
        Set feature = feature.GetNextFeature()
    
    Wend
    
    Next


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

 

Не обязательно

Значит я не ошибся с мыслю о конфигурациях.... Хотя SetSuppression2, на мой взгляд, все таки элегантней...

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

@@Shvg, не элегантней - правильней. Ибо в детали может быть несколько погашенных элементов (не в работе).

Так что @@Nazarrr, код и там и там рабочий. Но если вы собираетесь работать именно с разверткой - смотрите код @@Shvg.

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

Добрый вечер, господа!

 

Помогите с OpenDoc6 :happy:

Добавляю в EPDM Add-in приложение, когда захожу в хранилище хочу на выбранном файле запустить его. Чтобы сработало правильно приложение должен открыться выбранный документ SolidWorks и произвести операцию и затем закрыться. Как бы у меня все работает в "Задачах(Сценарий VBA)", а как реализовать на VB.NET для меня загадка?

Вот как реализован код в сценарии задачи EPDM:

Может подскажите где копать?  :biggrin:

Спасибо.

 

Dim fileName As String
fileName = "<Filepath>"

Set swApp = Application.SldWorks

Set pdmVault = CreateObject("ConisioLib.EdmVault")
Dim folder As Object
Dim file As Object
pdmVault.Login USERNAME, PASSWORD, VAULT_NAME
Set file = pdmVault.GetFileFromPath(fileName, folder)

If False = file.IsLocked Then
file.LockFile folder.ID, 0
End If

Set swModel = swApp.OpenDoc6(fileName, swDocumentTypes_e.swDocPART, swOpenDocOptions_e.swOpenDocOptions_Silent, "", 0, 0)

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

 

Добрый вечер, господа!

 

Помогите с OpenDoc6 :happy:

Добавляю в EPDM Add-in приложение, когда захожу в хранилище хочу на выбранном файле запустить его. Чтобы сработало правильно приложение должен открыться выбранный документ SolidWorks и произвести операцию и затем закрыться. Как бы у меня все работает в "Задачах(Сценарий VBA)", а как реализовать на VB.NET для меня загадка?

Вот как реализован код в сценарии задачи EPDM:

Может подскажите где копать?  :biggrin:

Спасибо.

А в чем проблема то? Нет ссылки на SldWorks?

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

@@Shvg,Перенес на VB.NET код VBA, не работает, только реагирует если задать в переменной FileName конкретный путь к файлу

fileName = "С:\1.sldprt"

И то SolidWorks не открывает файл, а просто появляется процесс(если посмотреть в диспетчере задач) SOLIDWORKS и висит там пока не завершить процесс вручную.

А хотелось чтобы по нужному ФАЙЛУ клацнуть правой клавишей мышки, выбрать приложение и запустить( в частности с открыванием нужного файла в SolidWorks).

Смотрел много примеров, но в них конкретно привязываются к пути файла  fileName = "С:\....."

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

Проблема вся в том что, в процессе висит SOLIDWORKS, но дальше ничего не происходит. Файл не открывается... =( 

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

Салют!


Подскажите как открыть выбранный документ SolidWorks не по указанному пути?


 


Dim fileName As String = "C:\1.sldprt"


 


        swApp = CreateObject("SldWorks.Application")


        swApp.Visible = True


 


        System.Threading.Thread.Sleep(5000)


 


        swModel = swApp.OpenDoc(fileName, swDocumentTypes_e.swDocPART)


Ссылка на сообщение
Поделиться на других сайтах
А хотелось чтобы по нужному ФАЙЛУ клацнуть правой клавишей мышки, выбрать приложение и запустить( в частности с открыванием нужного файла в SolidWorks).

Это уже не Solidworks. Смотрите, что-нибудь вроде этого: https://www.google.ru/search?ie=UTF-8&hl=ru&q=VB.NET%20explorer%20context%20menu

И/или WinAPI

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

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

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

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

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

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

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

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

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

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

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




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