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 пользователей

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



  • Реклама

  • Сообщения

    • ANT0N1DZE
      Но, думаю, что смысл понятен)
    • BSV1
      Очень неконкретно сформулировано.
    • Отхер Отхерыч
      Я знаю этот прикол. Дайте денег, а я вам опять какую-нибудь пургу буду гнать с выкладыванием на форуме говно-картинок и ссылок на свою помойку. Целых три дня. Или пока наконец Админы не забанят.
    • Racer
      Analyze>Bill of Material выдаёт текстовый документ со всей необходимой информацией
    • Игорь Цветков
      Конечно интересно! Давай, куев, рассказывай/показывай/начинай точить! Только чтобы обязательно 10 000 и обязательно точно за три дня!
    • ANT0N1DZE
      Доброго времени суток. Интересно мнение опытных людей, которые возможно сталкивались с подобным и, возможно, знают какие-то стандартные методы решения проблемы. Суть проблемы: имеется корпус из 3 частей (показано на рисунке), внутри есть полость, которую надо уплотнить от попадания воды. Обычные уплотнения, как правило, рассчитаны на уплотнение стыка двух деталей, но в данном случае на стыке их 3 (или в общем случае  может быть больше). Каким образом можно надежно уплотнить такой стык? Может, имеются примеры конструкций. У меня есть пару вариантов на уме, но было бы любопытно узнать другие мнения. Из имеющегося в сети нашел вот такой патент http://patents.su/3-1732092-uplotnenie-razema-s-perpendikulyarnymi-stykami.html 
    • vik_q
      0_0! а что, такую деталь как на картинке у Котика реально можно штамповкой или ковкой делать?
    • Владимир56
      Насчёт ёмкости - верно.  Лучше, чем под струёй крана.  Недавно обнаружил в РубльБуме  BIC Metall. Их преимущество - узкая державка, что удобно для бритья под носом.  Там же были 2х лезвийные BIC, дороже, и у них между лезвиями был сквозной просвет, как показалось. А металлические станки для лезвий  с регулировкой угла в руках сейчас кажутся  металлоломом с приличным весом. 
    • Вне зоны доступа
      Врёшь. Нашему человеку плевать на себя. Ему за державу обидно. Это как воспитаешь. Я своих воспитал так: на первом месте Родина, а на втором месте твои личные хотелки Человек должен ЧЕСТНЫМ ТРУДОМ зарабатывать себе на хлеб, а не путём сделки со своей совестью мошенничеством, разного рода махинациями, обманом и кидаловом.   А у нас БОЛЬШИНСТВО готовы пойти на сделку со своей совестью ради барыша и красивой жизни. Любым способом пробиться в начальники.   А потом мы дивимся: а чего у нас одни подлецы во власти, которым плевать на нас
    • Ustyugov1223
      Добрый вечер коллеги. прошу вашей помощи. Проблема заключается в том что станок не переходит в режиме RAPID (нет ускорения). Действия: Первым делом проверил в статусах  сигналы режимов, нашел Rapid  это сигналы X25.4/x25.5 меняются с 1 на 0 при переключений на Rapid сигналы проходят.Так же проверил % F0/25/50/100 все сигналы проходят. Иду в Ladder смотрю там эти входные  сигналы чтоб отследить цепочку включения Rapid.    Но этих сигналов в Ladder нет X25.4/x25.5 ( сигнал отсутствует). В итоге нахожу в Ladder цепочку  Rapid без этих сигналов, пытаюсь определить  логику работы .Перепробовал разные действия , но так и не понял что активирует режим Rapid.  В параметрах NO. 1400-....( скорость подачи)  значения проверил .  Ladder , CNC-PARA.TXT и фото прилагаю. PMC1_LAD.000 CNC-PARA.TXT