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

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

 

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

Есть подозрение, что в 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 пользователей

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



  • Сообщения

    • Snake 60
      Скорее всего исправляли в конкретной сборке, для конкретных тел. Насколько я помню, надо в самом эскизе профиля заполнить свойство Description
    • Snake 60
      Делаете дырку в свае - вставляете в нее трубу и 2 человеко-силы крутят сваю ) Дёшево и сердито и не нужен никакой планетарный редуктор ))
    • gudstartup
      вы всегда ищите свой путь или будете делать то что вам советуют? с самого начала прежде чем приступать к экспериментам вам нужно было вынуть носитель и сделать образ. diskcopy делает копию гибкого диска на другой а вам надо сделать образ жесткого диска или карты памяти. делайте как советует @Viktor2004 иначе еще чего нибудь сломаете или вам станок не нужен и вы его приобрели для экспериментов ? вот а печатной машинке из прошлого нельзя а вот на синумерике можно - удивительные вещи в настоящем происходят!! на 100 % уверен что там не модуль а либо писимиси ай либо жд @mircomax81 хотите работать в дос почитайте помощь по командам 
    • PuKoLLleT
      Доброго дня всем. Поделитесь опытом,раньше такое не доводилось делать. На торце фланца нужно сделать  восемь отверстий ф17H7 на токарно-фрезерном станке с осью Y ,имеется ManualGuide.В моем понимании нужно просверлить,а затем торцевой фрезой расточить нужный диаметр.Получится такой фокус,или надо разверткой доводить нужный размер?  Стойка Fanuc 0i-Tf.
    • Snake 60
      Всё верно, я даже русификатор делал для него (ушло на это где-то около года). Хороший софт был, я всех знакомых на него подсадил в свое время :) У меня даже где-то образ на виртуалке лежит с SW2014+MechSoft, Жаль, что автодеск его поглотил, а не DS :( А по сути вопроса, проектировал двухступенчатый планетарный редуктор в свое время. Что было нужно: Справочник по планетаркам (автора не помню, если надо поищу), из софта MathCAD + GearTeq (софтина идет вместе с GearTrax, только рассчитывает и моделирует несколько зацеплений согласно выбранной схеме, в том числе планетарки) Ой и ошибаетесь. Звездочки - не равно зубчатые колеса в планетарке) Мы намучились с малой точностью изготовления на эл.эрозии, а Вы лазером ))) Был собран опытный образец редуктора с незакаленными деталями, чисто проверить геометрию, отладить сборку. Так потом начальство этот редуктор сказало испытать в бою, как я не противился)) Помер за пару дней интенсивных нагрузок ))) Материал, термообработка и точности изготовления решают )
    • Snake 60
      @Тихоход  Ещё один вариант - изучать программирование и писать свою программу/макрос. Вот пример конфигуратора двери: https://www.youtube.com/watch?v=wv4HryWQBSk
    • mircomax81
      Посредством Diskcopy можно сделать адекватную копию на флоппи диск?
    • Andrey_kzn
      Да, ведь советовали автору вытащить жёсткий диск и сделать образ. Неужели самому не интересно, как устроен этот старый промкомпьютер? Там может стоять как жёсткий диск, так и CF-карта, или же Disc-on-chip или Disc-on-module.  Как-то очень давно, на подобном промышленном оборудовании (большая печатная машина) я не смог перенести  ПО с родной CF - карты на другую, такого же размера но другой фирмы. Была также станочная оболочка под досом.  Образ я делал Нортон гостом, развернул его на другую CF-карту без проблем. Машина загрузилась нормально и работала ровно 2 дня, на неродной CF-карте,  потом зависла, и отказалась загружаться. Пришлось вызывать сервисника. От него мы узнали, что нельзя просто так взять и заменить карту  - носитель системного ПО, на другую. А полезли мы туда, так как руководство захотело печатать отчёты по работе машины. В станочном ПО такая функция была. Вот только принтер надо было купить у фирмы - производителя этой самой машины. В попытках заставить работать другой принтер мы редактировали файл  AUTOEXEС.BAT, на предмет загрузки драйвера принтера, ничего не получилось, зато перестали открываться некоторые страницы станочного ПО.  Образ у нас был давно снят, и мы развернули его на другую карту памяти. Родную карту я трогать не стал (как чувствовал, что нельзя ). Сервисник восстановил ПО с архивной дискеты на родную карту памяти, и всё заработало. Дискеты с архивами ПО шли вместе с документацией к машине.  Там были дискеты с Досом, станочной оболочкой, параметрами приводов, программой ПЛК. Он же и предупредил нас о предельно аккуратном обращении с родной картой памяти, и посоветовал немедленно сделать образы с архивных дискет, что мы сразу и проделали.. Вот такой сюрприз от машины эпохи Дос.
    • Борман
    • gudstartup
      а ведь все работало...
×
×
  • Создать...