Кто-нибудь взаимодействовал с публикациями через макросы?

Программирование для CATIA.

Кто-нибудь взаимодействовал с публикациями через макросы?

Сообщение MisterX » 13 окт 2008 11:53

Есть необходимость переименовать не опубликованный элемент а саму публикацию элемента с помощью макроса, покопавшись в документации такого способа не нашел...

Не приходилось ли кому-нибудь делать подобные вещи?

В доках публикацию можно добавить или удалить, что и соответствует кнопкам в окне создания публикации, переименование же происходит с помощью мышки - два медленных клика на ее названии в окне создания публикации... А нет ли такой функции в VBA?

Заранее всем, кто может помочь, благодарен.
Учи матчасть.
Аватара пользователя
MisterX
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 02 окт 2007 23:56

Re: Кто-нибудь взаимодействовал с публикациями через макросы?

Сообщение booSter » 14 окт 2008 15:48

MisterX писал(а):А нет ли такой функции в VBA?


Можно попробовать так:
Код: Выделить всё
...
Dim myPub as Publication
Set myPub = ...
myPub.Name = "myNewPubName"
...


Если не "заведётся", то тогда "в обход":

  1. Создать новую публикацию с требуемым именем
    Код: Выделить всё
    ...
    Dim myProd as Product
    Set myProd = ...
    ...
    Dim myNewPub as Publication
    myProd.Publications.Add("myNewPubName")
    ...
  2. Затем инициализировать её имеющейся
    Код: Выделить всё
    ...
    Dim myOldPub as Publication
    Set myOldPub = ...
    ...
    myNewPub.Relay(myOldPub)
    ...
  3. И если нужно удалить старую
    Код: Выделить всё
    ...
    myProd.Publications.Remove(myOldPub.Name)
    Set myOldPub=Nothing
    ...
Сделаешь доброе дело за деньги - скажут спасибо,
Сделаешь бесплатно - сядут на шею...
©пёрто
Аватара пользователя
booSter
Moderator
 
Сообщения: 227
Images: 15
Зарегистрирован: 09 фев 2008 16:48
Откуда: Minsk

Re: Кто-нибудь взаимодействовал с публикациями через макросы?

Сообщение MisterX » 24 ноя 2008 15:07

В первом способе есть загвоздка с

Код: Выделить всё
Dim myPub as Publication
Set myPub = ...


в set myPub = дальше вроде должно идти MyPart.Publications.add(xxx),

где MyPart определена как

Код: Выделить всё
Dim MyPart as PartDocument
set MyPart = CATIA.ActiveDocument    'Работаем с Part'ом


Так вот MyPart.Publications не работает, так как "...does not support this property or method". Вроде как все библиотеки подключены... Или для Part'а нельзя создать публикацию макросом?
Учи матчасть.
Аватара пользователя
MisterX
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 02 окт 2007 23:56

Re: Кто-нибудь взаимодействовал с публикациями через макросы?

Сообщение booSter » 24 ноя 2008 18:54

MisterX писал(а):Так вот MyPart.Publications не работает...


Да, есть такое дело, но вся "фишка" в том, что Part-документ - сущность, так сказать, "двуличная"... :kav:
С одной стороны - это Part, а с другой - Product правда урезанный (без возможности содержать другие Product'ы).
Если внимательно глянуть на документацию по PartDocument, то из него можно достать помимо Part'а и тот самый "недо"-Product, из которого, собственно, желаемые Publications и достаются.

Код: Выделить всё
...
Dim myPartDoc As PartDocument
Set myPartDoc = CATIA.ActiveDocument
...
Dim myProdOfPart As Product
Set myProdOfPart = myPartDoc.Product
...
Dim myPubs As Publications
Set myPubs = myProdOfPart.Publications
...
Dim thePub As Publication
Set thePub = myPubs("myPubName")
...
Сделаешь доброе дело за деньги - скажут спасибо,
Сделаешь бесплатно - сядут на шею...
©пёрто
Аватара пользователя
booSter
Moderator
 
Сообщения: 227
Images: 15
Зарегистрирован: 09 фев 2008 16:48
Откуда: Minsk

Re: Кто-нибудь взаимодействовал с публикациями через макросы?

Сообщение MisterX » 25 ноя 2008 13:20

Booster'у уже спасибо большое, но вот только не работает код пробовал уже 2 способами, код одного из способов приведен ниже.

Макрос должен опубликовать выделенные в КАТЕ элементы, но когда дело доходит до публикации - "Method Failed"

Никто не укажет на ошибку? Когда все заработеат, обещаю выложить код здесь.

Код: Выделить всё
Sub CATMain()

 Dim Doc1 As PartDocument
 Set Doc1 = CATIA.ActiveDocument

 Dim Sel1 As Selection
 Set Sel1 = Doc1.Selection

 Dim ProdOfDoc1 As Product
 Set ProdOfDoc1 = Doc1.Product

 Dim Pubs As Publications
 Set Pubs = ProdOfDoc1.Publications

 Dim nmb As Integer
 nmb = Sel1.Count2

 ReDim Elems(nmb) As Variant
 ReDim MyPub(nmb) As Publication
 Dim i As Integer
 Dim PubName As String

 For i = 1 To nmb
    Set Elems(i) = Sel1.Item2(i).Value
    PubName = Elems(i).Name
    MyPub(i) = Pubs.Add(PubName)
 Next

End Sub
Учи матчасть.
Аватара пользователя
MisterX
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 02 окт 2007 23:56

Re: Кто-нибудь взаимодействовал с публикациями через макросы?

Сообщение booSter » 25 ноя 2008 14:41

2 MisterX

В начале строчки "MyPub(i) = Pubs.Add(PubName)" отсутствует Set :kav:

Попробуй так:
Код: Выделить всё

...

Dim Pubs As Publications
Set Pubs = ProdOfDoc1.Publications

Dim nmb As Integer
nmb = Sel1.Count2

ReDim Elems(nmb) As Reference
ReDim MyPub(nmb) As Publication
Dim i As Integer
Dim PubName As String

For i = 1 To nmb
    Set Elems(i) = Sel1.Item2(i).Reference
    PubName = "myPub_" & Elems(i).DisplayName
    Set MyPub(i) = Pubs.Add(PubName)
    Pubs.SetDirect(PubName,Elems(i))
Next

...


Либо то-же самое но без строчки "Set MyPub(i) = Pubs.Add(PubName)"
Сделаешь доброе дело за деньги - скажут спасибо,
Сделаешь бесплатно - сядут на шею...
©пёрто
Аватара пользователя
booSter
Moderator
 
Сообщения: 227
Images: 15
Зарегистрирован: 09 фев 2008 16:48
Откуда: Minsk

Re: Кто-нибудь взаимодействовал с публикациями через макросы?

Сообщение MisterX » 25 ноя 2008 16:54

Про SET уже сам допер :dash1:

Непонятка случилась, потому что в дереве публикации не отобразились сразу...

Сам разобрался и написал такую же конструкцию

Код: Выделить всё
...
ReDim PubName (nmb) as String
...
Pubs.SetDirect(PubName(i),Elems(i))


Но в последней строке сообщение выдается "= expected", а если вызывать серез Call, то код прогоняется, но ссылки не создаются...
Учи матчасть.
Аватара пользователя
MisterX
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 02 окт 2007 23:56

Re: Кто-нибудь взаимодействовал с публикациями через макросы?

Сообщение Artem » 26 ноя 2008 07:56

animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14

Re: Кто-нибудь взаимодействовал с публикациями через макросы?

Сообщение booSter » 26 ноя 2008 12:29

2 Artem
:good:
Сделаешь доброе дело за деньги - скажут спасибо,
Сделаешь бесплатно - сядут на шею...
©пёрто
Аватара пользователя
booSter
Moderator
 
Сообщения: 227
Images: 15
Зарегистрирован: 09 фев 2008 16:48
Откуда: Minsk


Вернуться в CAA-RADE

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

cron