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

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

 

верным будет такой код
 

А вы пробовали (согласно справке) сначала открыть деталь и только после этого добавлять компонент? И после открытия запускать AddComponent (без цифры на конце функции)

 

Да, конечно. Но это не помогло. Долго искал решение, второй мой пост верен.

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


второй мой пост верен.
 

Не сомневаюсь)))

Я просто к тому, что это есть в справке.

Вот вам поправка для вашего самого первого "нерабочего" кода.

 private void button1_Click(object sender, EventArgs e)
        {
            SwApp.NewAssembly();


            ModelDoc2 swDoc = null;
            AssemblyDoc swAssembly = null;
            bool boolstatus = false;
            swDoc = ((ModelDoc2)(SwApp.ActiveDoc));
            swAssembly = ((AssemblyDoc)(swDoc));
            SwApp.OpenDoc(@"C:\Скоба.SLDPRT", (int)swDocumentTypes_e.swDocPART);
            boolstatus = swAssembly.AddComponent(@"C:\Скоба.SLDPRT", 0, 0, 0);
            if (boolstatus == false)
                System.Windows.Forms.MessageBox.Show("AddComponent() is false");
            SwApp.CloseDoc(@"C:\Скоба.SLDPRT");
        }
Ссылка на сообщение
Поделиться на других сайтах

 

второй мой пост верен.
 

Не сомневаюсь)))

Я просто к тому, что это есть в справке.

Вот вам поправка для вашего самого первого "нерабочего" кода.

 private void button1_Click(object sender, EventArgs e)
        {
            SwApp.NewAssembly();


            ModelDoc2 swDoc = null;
            AssemblyDoc swAssembly = null;
            bool boolstatus = false;
            swDoc = ((ModelDoc2)(SwApp.ActiveDoc));
            swAssembly = ((AssemblyDoc)(swDoc));
            SwApp.OpenDoc(@"C:\Скоба.SLDPRT", (int)swDocumentTypes_e.swDocPART);
            boolstatus = swAssembly.AddComponent(@"C:\Скоба.SLDPRT", 0, 0, 0);
            if (boolstatus == false)
                System.Windows.Forms.MessageBox.Show("AddComponent() is false");
            SwApp.CloseDoc(@"C:\Скоба.SLDPRT");
        }

 

Спасибо, проверю:)

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

Здравствуйте! Возник такой вопрос!

Имеется макрос считывающий габариты модели и затем записывающий эти габариты в Configuration Specific активной конфигурации.

Проблема состоит в том, что требуется при наличие больше одной конфигурации модели записывать в Configuration Specific габариты всех имеющихся конфигураций. Это можно сделать переходя поочередно к каждой конфигурации и запуская макрос. Хотелось бы минимизировать ход действий и при запуске макроса он сам списывал габариты каждой конфигурации и заносил в Configuration Specific. Помогите с написанием кода =)

 

Заранее спасибо!

 

p.s. Макрос прилагается к прикрепленным файлам.

Size_without_form.rar

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

Здравствуйте! Возник такой вопрос! Имеется макрос считывающий габариты модели и затем записывающий эти габариты в Configuration Specific активной конфигурации. Проблема состоит в том, что требуется при наличие больше одной конфигурации модели записывать в Configuration Specific габариты всех имеющихся конфигураций. Это можно сделать переходя поочередно к каждой конфигурации и запуская макрос. Хотелось бы минимизировать ход действий и при запуске макроса он сам списывал габариты каждой конфигурации и заносил в Configuration Specific. Помогите с написанием кода =)

 

 

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

PrpBox.zip

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

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

 

Прикрепленные файлы
  • zip.gif  PrpBox.zip   8,29К   8 Количество загрузок:

Премного благодарен! Все работает!

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

Добрый день! Макрос VBA считывающий габариты всех конфигураций работает отлично! Возникла необходимость перенести этот макрос на VB.NET) Но тут возникает проблема, считывая конфигурации он ни в какую не считывает габариты... и ошибок никаких нет=( Быть может кто подскажет?

WindowsApplication1.rar

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

@@Nazarrr

всё просто. Переменные swDocPART swDocASSEMBLY никак не могут быть обжектом. Это целые числа. Ну, в смысле они есессно производные от обжекта))) но должны иметь тип Integer.

Замените объявление на


Const swDocPART = 1
Const swDocASSEMBLY = 2
Ссылка на сообщение
Поделиться на других сайтах

 

@@Nazarrr

всё просто. Переменные swDocPART swDocASSEMBLY никак не могут быть обжектом. Это целые числа. Ну, в смысле они есессно производные от обжекта))) но должны иметь тип Integer.

Замените объявление на

Const swDocPART = 1
Const swDocASSEMBLY = 2

 

Большое спасибо!!!

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

При использовании Document Manager, не могу сохранить измененную переменную

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

если использовать

swDoc.SaveAs(C:\1.sldprt)

все работает.

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

При использовании Document Manager, не могу сохранить измененную переменную

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

 

может проще будет сначала удалить свойство, а затем добавить

		swModel.DeleteCustomInfo2(<ИмяКонфигурации>, <ИмяСвойства>)
		swModel.AddCustomInfo3(<ИмяКонфигурации>, <ИмяСвойства>, 30, <ЗначениеСвойства>)
Ссылка на сообщение
Поделиться на других сайтах
Я б даже сказал, что правильней.

Может и правильно, но данный интерфейс прописан как устаревший, почему бы не использовать CustomPropertyManager?

Обсуждалось здесь (правда не VBA): http://fsapr2000.ru/topic/33068-zapis-svoist-komponentov-sborki/?mode=linear

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

Все равно никаких изменений не происходит, файл не сохраняется.

Imports System.Windows.Forms
Imports System
Imports System.Diagnostics
Imports System.IO.StreamReader
Imports System.NullReferenceException
Imports System.Runtime.InteropServices
Imports SwDocumentMgr
Imports SolidWorks.Interop.sldworks
Imports SolidWorks.Interop.swconst
Imports SolidWorks.Interop.swcommands
Imports SolidWorks.Interop.swpublished

Public Class NewDocument

Public Sub New()
     InitializeComponent()
End Sub

Dim swCfg As SwDMConfiguration5
Dim swDoc As SwDMDocument17
Dim swCfgMgr As SwDMConfigurationMgr
Dim vCfgName As Object
Dim resolvedValOut As String
Dim vCfgNameArr As Object
    Dim newValue As String
    Dim FieldName As System.String

	Private Sub ButtonOpen_Click(sender As Object, e As EventArgs) Handles ButtonOpen.Click

	   Dim dialog As New OpenFileDialog()
	   dialog.Filter = "Сборка SolidWorks (*.sldasm)|*.sldasm|All files (*.*)|*.*"
	   dialog.Title = "Select file"
	   If DialogResult.OK = dialog.ShowDialog Then
	       TextBox1.Text = dialog.FileName
	End If

     Dim sDocFileName As String = TextBox1.Text
     Dim swClassFact As SwDMClassFactory
     Dim swDocMgr As SwDMApplication

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

        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

	  nDocType = SwDmDocumentType.swDmDocumentUnknown
	  Exit Sub

        End If

        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

		vCfgNameArr = swCfgMgr.GetConfigurationNames

	For Each vCfgName In vCfgNameArr

	     swCfg = swCfgMgr.GetConfigurationByName(vCfgName)

	     DataGridView1.Rows.Add(Config.Selected, vCfgName)

	     Next
	End If

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

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

	Dim i As Integer

	i = DataGridView1.CurrentRow.Index
	swCfg = swCfgMgr.GetConfigurationByName(DataGridView1.Item(1, i).Value)

	     vCustPropNameArr = swCfg.GetCustomPropertyNames()

		For Each vCustPropName In vCustPropNameArr

		     sCustPropStr = swCfg.GetCustomPropertyValues(vCustPropName, nPropType, resolvedValOut)

		     Dim lvi As ListViewItem
		     Dim lvsi As ListViewItem.ListViewSubItem
		     Dim lvsisi As ListViewItem.ListViewSubItem
		     lvi = New ListViewItem()
		     lvsi = New ListViewItem.ListViewSubItem()
		     lvsisi = New ListViewItem.ListViewSubItem()
		     lvi.Text = vCustPropName
		     lvsisi.Text = sCustPropStr
		     lvi.SubItems.Add(lvsisi)
		     lvi.SubItems.Add(lvsi)
		     Form2.ListView1.Items.Add(lvi)
		   Next

		Form2.ListView1.Items.Add("")
	Form2.Show()
     End Sub

Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
Dim j As Integer

	TextBox3.Text = swDoc.Title

	j = DataGridView1.CurrentRow.Index
	swCfg = swCfgMgr.GetConfigurationByName(DataGridView1.Item(1, j).Value)

        TextBox2.Text = swCfg.GetCustomPropertyValues("Обозначение", 30, resolvedValOut)
        TextBox4.Text = swCfg.GetCustomPropertyValues("Контора", 30, resolvedValOut)
        TextBox5.Text = swCfg.GetCustomPropertyValues("Масса_Таблица", 30, resolvedValOut)
End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

Dim i As Integer
        Dim swModel As ModelDoc2
        
        i = DataGridView1.CurrentRow.Index
        swCfg = swCfgMgr.GetConfigurationByName(DataGridView1.Item(1, i).Value)
        swCfg.SetCustomProperty("Контора", TextBox4.Text)
         swDoc.Save()

    End Sub

End Class

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

При использовании Document Manager, не могу сохранить измененную переменную

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

если использовать

swDoc.SaveAs(C:\1.sldprt)

все работает.

Сначала проверьте функцией ISwDMConfiguration::GetCustomPropertyNames существует ли указанное вами свойство "Контора". И посмотрите, что возвращает функция swDoc.Save(). У меня все эти функции нормально отрабатывают...

P.S. И не забывайте про функцию CloseDoc()....

 

Я б даже сказал, что правильней.

Может и правильно, но данный интерфейс прописан как устаревший, почему бы не использовать CustomPropertyManager?

Обсуждалось здесь (правда не VBA): http://fsapr2000.ru/topic/33068-zapis-svoist-komponentov-sborki/?mode=linear

Автор имел ввиду интерфейс SolidWorks Document Manager API

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

Сначала проверьте функцией ISwDMConfiguration::GetCustomPropertyNames существует ли указанное вами свойство "Контора". И посмотрите, что возвращает функция swDoc.Save(). У меня все эти функции нормально отрабатывают...

P.S. И не забывайте про функцию CloseDoc()....Автор имел ввиду интерфейс SolidWorks Document Manager API

Переменную "Контора", я получаю, с этим все нормально. Проблемы начинаются при сохранении в тот же файл, при этом файл доступен для записи. При нажатии на кнопку сохранить дебаг возвращает значение 2.

Если оставить на кнопку функцию swDoc.Save(), файл остается без изменений.

Ссылка на сообщение
Поделиться на других сайтах
Проблемы начинаются при сохранении в тот же файл

Хммм, а может @@Shvg, прав?

Код 

sCustPropStr = swCfg.GetCustomProperty(vCustPropName, out nPropType); //Старый
bool retVal = swCfg.AddCustomProperty("YUUUUUI", SwDmCustomInfoType.swDmCustomInfoText, "22222");
swCfg.SetCustomProperty("YUUUUUI", "1111111111111");

swDoc.Save();

 

работает.

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

Попробовал так же, не работает. Я так понял вся проблема в том что не работает SwDoc.Save(), а не в Add или DeleteCustomProperty. Даже если просто добавить на кнопку SwDoc.Save() файл не сохраняется... И самое интересное что добавив всего две строки:

 

swCfg.SetCustomProperty("Контора", TextBox4.Text)

swDoc.SaveAs(C:\1.sldasm)
 
Все прекрасно изменяет и сохраняет... В чем же проблема?
Ссылка на сообщение
Поделиться на других сайтах
может просто косяк версии библиотеки?

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

 

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

swDoc as SldWorks.ModelDoc2

swDoc=swApp.ActiveDoc

'или, например,  swDoc = swModel

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

swDoc.Save()

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

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

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

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

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

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

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

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

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

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

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




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