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

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

 

может просто косяк версии библиотеки?

Есть подозрение, что в swDoc просто нет того файла, который хочется сохранить.

 

Возможно, как-то так:

swDoc=swApp.ActiveDoc

'или swDoc = swModel

'А потому уже сохранять

swDoc.Save()

 

Все то ничего, но этот способ действует если работать через открытый SolidWorks документ. А в этом случае используется Document Management API.

@@Nazarrr, может просто косяк версии библиотеки? Я пробовал на SW2012SP5

Попробовал библиотеку DocumentMgr 2012 солида, все равно не работает. А можете скинуть свой проект? Я попробую со своим ключом.

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


А в этом случае используется Document Management API.

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

 

Там где похоже вы задали вопрос, его уже решали: https://forum.solidworks.com/message/92369#92369

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

 

А в этом случае используется Document Management API.

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

Imports SolidWorks.Interop.swdocumentmgr

Public Class Form1


Dim swCfgMgr As SwDMConfigurationMgr
Dim vCfgNameArr As Object
Dim swCfg As SwDMConfiguration
Dim swDoc As SwDMDocument

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

     Dim swClassFact As SwDMClassFactory
     Dim swDocMgr As SwDMApplication

     Dim vCfgName As Object
     Dim nDocType As Long
     Dim nRetVal As Long

        Const sDocFileName As String = "C:\123.sldasm"

        ' 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, True, nRetVal) : Debug.Assert(SwDmDocumentOpenError.swDmDocumentOpenErrorNone = nRetVal)
	  swCfgMgr = swDoc.ConfigurationManager

	  TextBox1.Text = swDoc.Title	'наименование

	     vCfgNameArr = swCfgMgr.GetConfigurationNames

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

	      TextBox2.Text = swCfg.GetCustomProperty("Контора", 30)  'Сборка1_ФБ

	  Next

        End If
swDoc.Save()
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

swCfg.SetCustomProperty("Контора", TextBox2.Text)
swDoc.Save()
swDoc.CloseDoc()

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

swDoc вы обявили, а вот swCfg ни как не объявлено, соответственно вы даже не добавляете свойство в файл. У вас только:

Dim swCfg As SwDMConfiguration
...
swCfg.SetCustomProperty("Контора", TextBox2.Text)

как программа должна понять, что swCfg относиться к открытому файлу? Возможно должно было быть swCfgMgr или где-то не хватает строчки на объявление swCfg, возможно, аналогичной swCfgMgr.

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

@@Kelny, Вот я тоже предполагаю что из-за этого, но почему тогда оно сохраняет все верно если указать swDoc.SaveAs("C:\1.sldasm") 

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

Вопрос решился, значение True изменить на False! Но тогда мы не сможем открыть документы которые с атрибутом "Только для чтения" (

 

swDoc = swDocMgr.GetDocument(sDocFileName, nDocType, True, nRetVal)

 

Всем спасибо за помощь!

Изменено пользователем Nazarrr
Ссылка на сообщение
Поделиться на других сайтах
Вопрос решился, значение True изменить на False! Но тогда мы не сможем открыть документы которые с атрибутом "Только для чтения" (

На мой скромный взгляд вывод не правильный, т.к. когда вы ставите True - открываете файл с атрибутом Только для чтения и соотвественно в него сохранять нельзя. Когда вы делаете SaveAs он не обращает внимание на ранее заданное ReadOnly, т.к. записывает в другой файл, хотя он и является уже открытым документом. Когда вы ставите атрибут False вы открываете документ для чтения и редактирования.

 

 

 

вы его открываете только для чтения. Там где похоже вы задали вопрос, его уже решали: https://forum.solidworks.com/message/92369
Ссылка на сообщение
Поделиться на других сайтах

 

Вопрос решился, значение True изменить на False! Но тогда мы не сможем открыть документы которые с атрибутом "Только для чтения" (

На мой скромный взгляд вывод не правильный, т.к. когда вы ставите True - открываете файл с атрибутом Только для чтения и соотвественно в него сохранять нельзя. Когда вы делаете SaveAs он не обращает внимание на ранее заданное ReadOnly, т.к. записывает в другой файл, хотя он и является уже открытым документом. Когда вы ставите атрибут False вы открываете документ для чтения и редактирования.

 

 

 

вы его открываете только для чтения. Там где похоже вы задали вопрос, его уже решали: https://forum.solidworks.com/message/92369

 

Решение как можно обойти параметр True и False.
Проблема была в следующем.
  • Параметр True открывает документ с атрибутом "Только чтение";
  • Параметр False открывает документ без атрибута "Только чтение", но выдает ошибку при открытии файла с атрибутом "Только чтение".
Для обхода этой проблемы необходимо использовать оператор Try...Catch.
Try
  swDoc = swDocMgr.GetDocument(sDocFileName, nDocType, False, nRetVal)
  swCfgMgr = swDoc.ConfigurationManager
Catch ex As Exception
  swDoc = swDocMgr.GetDocument(sDocFileName, nDocType, True, nRetVal)
  swCfgMgr = swDoc.ConfigurationManager
End Try

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

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

Господа, добрый день! Нашел пример интересующего модуля http://help.solidworks.com/2013/English/api/sldworksapi/feature_suppression_example_vb.htm

А он просто-напросто не желает запускаться, так как не определяет "Macro Name" из-за (SearchStr, Action). Подскажите, какой есть выход из этой ситуации?

CutList.rar

Изменено пользователем Nazarrr
Ссылка на сообщение
Поделиться на других сайтах
А он просто-напросто не желает запускаться, так как не определяет "Macro Name" из-за (SearchStr, Action).

А вы попробуйте добавить процедуру, например, Main() и следовать инструкции к этом примеру:

Sub main()
   SearchStr= "Hole" 'тут впишите, что здесь должно быть по инструкции процедуры FeatureSuppression, например в примере предлагается поискать "Hole"'
   Action= "Suppress" 'тут впишите, что здесь должно быть по инструкции процедуры FeatureSuppression, так понимаю "Suppress" или "Unsuppress"'
   FeatureSuppression(SearchStr, Action)
End Sub

Потом запустите процедуру Main()

 

Результат который вы получите описан в шапке страницы справки:

 

This example shows how to:

    *Cycle through features in a part

    *Get a feature name

   * Suppress and unsuppress features

    *Perform a string comparison using Visual Basic

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

@@Kelny, Спасибо за ответ. Но тут помогло другое, в строках:

 

If Action = Suppress Then ' User chose to suppress
                
                    res = Model.EditSuppress() ' Suppress the feature
                
                ElseIf Action = UnSuppress Then ' User chose to unsuppress
                
                    res = Model.EditUnsuppress() ' Unsuppress the feature
                
                End If
 
убрал кавычки в Suppress и UnSuppress, заработало! :happy:
Ссылка на сообщение
Поделиться на других сайтах

Добрый вечер! Подскажите пожалуйста, как получить конкретную строку из Configuration Specific?  Нашел массу примеров, но они считывают полностью все свойства конфигурации...

 

Get Custom Properties for Configuration Example

 

Dim swApp As SldWorks

Sub Main()

     Dim swModel As IModelDoc2
     Dim swModelDocExt As ModelDocExtension
     Dim swCustProp As CustomPropertyManager

     Dim swCfgMgr As ConfigurationManager
     Dim swCfg As Configuration

     Dim vConfName As Object
     Dim vConfParam As Object
     Dim vConfValue As Object
     Dim bRet As Boolean

     Dim valout As String = ""
     Dim valout1 As String = ""


     swApp = DirectCast(Marshal.GetActiveObject("SldWorks.Application"), SldWorks)

     swModel = swApp.ActiveDoc
     swModelDocExt = swModel.Extension
     swCustProp = swModel.Extension.CustomPropertyManager("")

     swCfgMgr = swModel.ConfigurationManager
     swCfg = swModel.GetActiveConfiguration

     vConfName = swModel.GetConfigurationNames
     vConfParam = swModel.GetConfigurationNames
     vConfValue = swModel.GetConfigurationNames

     For i = 0 To UBound(vConfName)

	bRet = swCfgMgr.GetConfigurationParams(vConfName(i), vConfParam, vConfValue)

	swCustProp = swModelDocExt.CustomPropertyManager("")

	swCustProp.Get4("Наименование", False, 0, valout)
	swCustProp.Get4("Контора", False, valout1, 0)

	Console.WriteLine("Configuration name = " & vConfName(i))
	Console.WriteLine("")
	Console.WriteLine("	     Наименование: " & valout)
	Console.WriteLine("	     Контора: " & valout1)
	Console.WriteLine("")

	'Dim j As Object
	'For j = 0 To UBound(vConfParam)
	'Console.WriteLine("	" & vConfParam(j) & " = " & vConfValue(j))
	'Next

     Next i

Console.ReadLine()
End Sub
Ссылка на сообщение
Поделиться на других сайтах
swCustProp = swModelDocExt.CustomPropertyManager("")

    swCustProp.Get4("Наименование", False, 0, valout)
    swCustProp.Get4("Контора", False, valout1, 0)

это и есть получение конкретного свойства. Плохо искали http://help.solidworks.com/2013/English/api/sldworksapi/get_custom_properties_of_referenced_part_example_vb.htm

весь пример из хелпа можно ужать до 1 строчки  :smile:

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

@@streamdown, да да, этот пример я тоже брал во внимание. Дело в том что тут берется конкретное свойство из закладки Custom, а из Configuration Specific не получается...

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

@@Nazarrr, открываю секрет)))

CustomPropertyManager("") 

 

В кавычки вставляете имя конфигурации.

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

@@Nazarrr

в одну строчку  :smile:  C#

string configName = "00";
string propName = "Обозначение";
string MyValue = (swModel.Extension.get_CustomPropertyManager(configName)).Get(propName);
Ссылка на сообщение
Поделиться на других сайтах

Вот у меня вопрос: кроме макросов на Вижуал Бейсик есть какие то способы автоматического создание кода в том числе на Си-шарп и Си-плюс-плюс? Или может каккой то конвертер кода с ВижуалБейсик есть или пособие как быстро это сделать вручную, или не быстро но сделать чтобы он работал?

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

@@stu, после записи макроса выбрать тип "Сохранить как"


способы автоматического создание кода
 

такие есть только при записи макроса. Иначе - руками.

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

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

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

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

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

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

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

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

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

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

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




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