Ectoplaza

Переименование файлов сборки по "маске"

Pinned posts

Собственно в вопросов два:

 

1. Необходимо переименовать каждую деталь входящую в общую сборку, добавив дату ревизии в конце имени файла.

2. Далее, имея в имени файла предыдущие число, месяц и год, сделать выборку и заменить числа актуальными на момент изменения/сохранения файла.

Есть ли в CATIA такая возможность?

 

p.s. PDM'ы не предлагать их нет у нас...

Поделиться сообщением


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


UnPinned posts

Скриптами

Поделиться сообщением


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

@lexincton Написал скрипт, который рекурсивно обходит дерево, нумерует детали/сборки и обновляет дату ревизии документов входящих в сборку. Далее попытался сохранить измененные файлы под новыми именами, но получил ошибку. Не могу понять почему код не работает, строку с ошибкой закомментировал.

 

Reveal hidden contents  
Language = "VBSCRIPT"
Sub CATMain()
Set mainDocument = CATIA.ActiveDocument
Set rootAssembly = mainDocument.Product
sTmpPath = CATIA.ActiveDocument.Path
clrProp rootAssembly
setProp rootAssembly, 0, sTmpPath
clrProp rootAssembly
End Sub

Sub setProp(thisProduct, thisAsm, sTmpPath)
  Dim currAsm, currPrt
  currAsm = thisAsm
  currPrt = 0
  Set productList = thisProduct.Products
  setData thisProduct, currAsm, 0, "CADProduct", sTmpPath
  For i = 1 To productList.Count
    If (productList.Item(i).DescriptionRef <> "True" And _
        productList.Item(i).Revision <> "ANY") Then
      If (productList.Item(i).Products.Count > 0) Then
        currAsm = currAsm + 1
        setProp productList.Item(i), currAsm, sTmpPath
      Else
        currPrt = currPrt + 1
        setData productList.Item(i), thisAsm, currPrt, "CADPart", sTmpPath
      End If
    End If
  Next
End Sub

Sub setData(document, thisAsm, thisPrt, thisDfn, sTmpPath)
  document.PartNumber = "MP 2720 " & _
    String(2 - Len(thisAsm), "0") & thisAsm & _
    String(2 - Len(thisPrt), "0") & thisPrt
  document.Definition = "Definition"
  document.Revision = getDate()
  document.DescriptionRef = "True"

  'Error: Object doesn't support this property or method "document.SaveAs"
  'document.SaveAs(sTmpPath & "\" & document.PartNumber & " " & _
  'document.Definition & " " & document.Revision & "." & thisDfn)
End Sub

Function getDate()
  SetLocale "en-us"
  Dim currDay, currMonth, currYear, mark
  currDay = Day(Date)
  currMonth = Month(Date)
  currYear = Year(Date) Mod 100
  getDate = String(2 - Len(currDay), "0") & currDay & "." & _
         MonthName(currMonth,true) & "." & currYear
End Function

Sub clrProp (thisProduct)
  Set productList = thisProduct.Products
  For i = 1 To productList.Count
    productList.Item(i).DescriptionRef = ""
    clrProp productList.Item(i)
  Next
End Sub
Hide  

 

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

 

Reveal hidden contents  
Language = "VBSCRIPT"
Sub CATMain()
Set partDocument1 = CATIA.ActiveDocument
Set product1 = partDocument1.GetItem("PartName")

partDocument1.SaveAs(CATIA.ActiveDocument.Path & "\" & product1.PartNumber & " " & _
		     product1.Definition & " " & product1.Revision & ".CATPart")
End Sub
Hide  

 

Буду благодарен за любую помощь.

Поделиться сообщением


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

Код пока не могу проверить. Может в имени недопустимые символы?

Поделиться сообщением


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

@lexincton Строку "document.SaveAs" заменил на "document.ReferenceProduct.Parent.SaveAs" и все заработало.

Правда я так и не понял что я сделал. Пока что в работе макроса много ограничений, но он работает.

 

Единственно что хотелось бы избавиться от этого сообщения, которое появляется для каждой сохраняемой детали.

 

Reveal hidden contents  

33.JPG.6906c14f82942b32c09516165f42beee.JPG

Hide  

Поделиться сообщением


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

'Language = "VBSCRIPT"
Sub CATMain()
CATIA.DisplayFileAlerts = False
Set mainDocument = CATIA.ActiveDocument
Set rootAssembly = mainDocument.Product
sTmpPath = CATIA.ActiveDocument.Path
clrProp rootAssembly
setProp rootAssembly, 0, sTmpPath
clrProp rootAssembly
CATIA.DisplayFileAlerts = True
End Sub

Sub setProp(thisProduct, thisAsm, sTmpPath)
  Dim currAsm, currPrt
  currAsm = thisAsm
  currPrt = 0
  Set productList = thisProduct.Products
  setData thisProduct, currAsm, 0, "CADProduct", sTmpPath
  For i = 1 To productList.Count
    If (productList.Item(i).DescriptionRef <> "True" And _
        productList.Item(i).Revision <> "ANY") Then
      If (productList.Item(i).Products.Count > 0) Then
        currAsm = currAsm + 1
        setProp productList.Item(i), currAsm, sTmpPath
      Else
        currPrt = currPrt + 1
        setData productList.Item(i), thisAsm, currPrt, "CADPart", sTmpPath
      End If
    End If
  Next
End Sub

Sub setData(document, thisAsm, thisPrt, thisDfn, sTmpPath)
  document.PartNumber = "MP 2720 " & _
    String(2 - Len(thisAsm), "0") & thisAsm & _
    String(2 - Len(thisPrt), "0") & thisPrt
  document.Definition = "Definition"
  document.Revision = getDate()
  document.DescriptionRef = "True"
  'Error: Object doesn't support this property or method "document.SaveAs"
  Dim dc As document
  Set dc = document.ReferenceProduct.Parent
  dc.SaveAs sTmpPath & "\" & document.PartNumber & " " & document.Definition & " " & document.Revision & "." & thisDfn
End Sub

Function getDate()
Dim codeString As String
Dim scriptControl As Object
Set scriptControl = CreateObject("MSScriptControl.ScriptControl")

codeString = "Sub getDateByLocale(locale)" & vbCrLf & "SetLocale locale" & vbCrLf & " End Sub"
With scriptControl
    .Language = "VBScript"
    .addCode codeString
    printDateByLocale = .Run("getDateByLocale", "en-us")
End With
  Dim currDay, currMonth, currYear, mark
  currDay = Day(Date)
  currMonth = Format(Date, "m") 'MonthName(Month(Now)) '
  
  currYear = Year(Date) Mod 100
  getDate = String(2 - Len(currDay), "0") & currDay & "." & _
         Format(Date, "m") & "." & currYear
End Function

Sub clrProp(thisProduct)
  Set productList = thisProduct.Products
  For i = 1 To productList.Count
    productList.Item(i).DescriptionRef = ""
    clrProp productList.Item(i)
  Next
End Sub

 

Ну зачем у продукта то сейв аз вызывать. Код в примере для VBA. Кстати после SetLocale месяц все равно русский (может на скрипте срабатывает, может неправильно вызываю - не уверен).

CATIA.DisplayFileAlerts = False

 возможно поможет

Изменено пользователем Martmath2

Поделиться сообщением


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

@Martmath2  Спасибо, это именно то что мне нужно было.

 

Тестовая сборка до применения макроса 

5be5862b0e436_1bedore.JPG.6eb31c4ae4cb01ca0354a73e6727070d.JPG

Hide  

 

Тестовая сборка после применения макроса  

5be5862bcbf36_2after.JPG.136ffd80540490b78055e9d57e264baa.JPG

Hide  

 

В планах добавить дополнительную проверку и обновлять дату ревизии только тем сборкам/деталям, в которые вносились правки. Правда пока не знаю как получить доступ к этому свойству. Предполагаю что должно быть какое-то свойство "Modified"  но пока не нашел.

Поделиться сообщением


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

Sub CATMain()
Dim productDocument1 As ProductDocument
Set productDocument1 = CATIA.ActiveDocument
Dim product1 As Product
Set product1 = productDocument1.Product
rtt = FileDateTime(product1.ReferenceProduct.Parent.FullName)
End Sub

 

Дату из файла сравнивать с тем что записал до этого, как вариант.

Цитата

Предполагаю что должно быть какое-то свойство "Modified"

нету.

Поделиться сообщением


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

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

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

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



  • Реклама

  • Сообщения

    • Anat2015
      Должна быть большая кнопка в рабочей зоне, на шпиндельной головке, или рядом где-то.
    • s_liam
      https://www.renishaw.ru/contacts/ru/Представительства-по-всему-миру?/RU/Precision-measurement/Sales-and-support/Ural
      Вот страница с контактами. Позвоните или напишите им, объясните ситуацию. Они должны помочь. У них и документация есть. Я думаю, они будут рады помочь.
    • Anat2015
      Определяйтесь с моделью датчика, качайте даташит от производителя, там и будет правильная методика настройки. Как я понимаю, там надо точно отрегулировать зазор между шестеренкой и считывающей головкой.
    • РоманВ
      Мне это видится действием из разряда сбрасывания таймера СВЧ печи на ноль. Если неопределенность каких-то деталей может повлиять на что-то, кроме чисто морального восприятия, то понятно. А вот масса лишних телодвижений ради невращения гайки, что вообще никак функционально не влияет на сборку, этого не понимаю. Может где-то и есть какие-то правила хорошего тона в построении моделей, ритуалы какие-то, но имхо это все основано на эмоциональной части и никакого практического назначения не имеет. Впрочем это я не в укор, а просто поговорить)  Вот смотри. Ты строишь отдельные тела, потом их объединяешь. Зачем? При вытягиваниях бобышек они сразу строятся слитыми с прилегающим телом, убрать это слияние можно снятием соответствующей галочки в меню операции, но по умолчанию галочка стоит и солид все строит слитым в единое тело, если конечно ты не делаешь специально зазор между элементами. Так вот строй сразу целое тело, а не отдельные, и тогда подобные проблемы у тебя вовсе не возникнут и не надо будет потом тела объединять. Строить отдельными телами иногда нужно, например, когда солид не может отразить некоторые операции, которые слиты с исходным телом. Тогда да, делаешь отдельное тело, отражаешь как тело, потом сливаешь. Но это редкие случаи.
    • don108
      @aleksej799  убери ссылку в посте id:14025 ... если не желаешь по сопатке получить 
    • s_liam
      TRANS отменяет ROT и наоборот! Будьте внимательны. Можно пользоваться командой AROT. Тогда AROT не отменит TRANS. Но последующий TRANS или ROT отменит ATRANS или AROT. Но в данном случае в этом нет необходимости. В вашем случае вместо команды ROT у вас работает поворот стола по координате B и паз встанет параллельно инструменту. Поворачивать систему координат необходимости нет. Вам нужно правильно вычислить смещение нулевой точки после поворота. По методике вроде как все верно, но я не уверен в правильность в формулах. Я подобное через ATAN2 высчитывал. Мне попроще - я симулятор использую для проверки подобных расчетов. В нем можно отловить ошибки в формулах, знаках. Я вот такое использую. Указываю угол поворота стола, на который нужно развернуть. Постпроцессор сам рассчитывает смещение нулевой точки. Из G54 пересчитываю в G57 и при повороте в ней обрабатываю. Можно, конечно, вместо этого использовать TRANS по осям в плоскости поворота. G54 B=DC(359.141)
      ;*******START COMPUTING TRANSLATIONS ON G57*******
      R31=$P_UIFR[1,X,TR]
      R32=$P_UIFR[1,Z,TR]
      R33=$P_UIFR[1,Y,TR]
      R34=$P_UIFR[1,B,TR]
      R29=359.141 ; TABLE ANGLE VALUE
      R30=SQRT(POT(R31)+POT(R32))
      R37=ATAN2(R32,-R31)
      R38=R37-R29
      R35=R30*COS(R38)
      R36=R30*SIN(R38)
      $P_UIFR[4,X,TR]=-R35
      $P_UIFR[4,Z,TR]=R36
      $P_UIFR[4,Y,TR]=R33
      $P_UIFR[4,B,TR]=R34
      G57
      ;*******G57 IS ACTIVE*******
      ;*******END COMPUTING TRANSLATIONS ON G57*******
    • Игорь Цветков
    • don108
      @aleksej799  https://yadi.sk/d/IFuwAV14trZW_Q   SW 2018 
    • Liudmila-Lar
      сборка (рама пластины).x_t @soklakov Это нормально, что у меня каждый раз зависимости слетают? В архиве файл сборка(рама пластины), папка рольганг.
    • vasyam
      применять ГКМ (горизонтально ковочная машина) для такой детали нет смысла, они применяются для деталей типа полуосей где есть длинная часть которая не деформируется, а деформация сосредоточена на конце. КГШП (кривошипный горяче штамповочный пресс) самое то, экономия металла и хорошая структура (волокна будут вытянуты, а не перерезаны) по сравнению с прокатом, хорошая структура по сравнению с литьем. Из недостатков требуется дорогая штамповая оснастка, и оборудование. Можно кстати и на молоте заготовку делать, но там уклоны и кузнечные напуски больше чем при штамповке на КГШП, расход металла будет больше.