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

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

 

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

А вы пробовали (согласно справке) сначала открыть деталь и только после этого добавлять компонент? И после открытия запускать 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 пользователей

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



  • Сообщения

    • 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
      а ведь все работало...
×
×
  • Создать...