Получить список файлов входящих в CATProduct

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

Получить список файлов входящих в CATProduct

Сообщение smbdie » 07 окт 2010 19:09

В общем есть такое задание, нужно получить список файлов которые входят в сборку CATProduct?
При условии если нет CATPart оторые в нее входят, нужно просто получить имена файлов...
если Парты лежат то могу получить, а если их нет, то ни как не могу найти нужные методы. :dash2:
Заранее спасибо.
smbdie
Новичок
Новичок
 
Сообщения: 13
Зарегистрирован: 25 сен 2010 12:43

Re: Получить список файлов входящих в CATProduct

Сообщение RIMs » 07 окт 2010 21:13

нужно просто получить имена файлов

я не понял вопрос, какие файлы имеются ввиду? В сборку могут входит Продукты или Парты, если сборка пустая, имена каких файлов вы ппытаетесь получить?
RIMs
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 20 мар 2009 22:27

Re: Получить список файлов входящих в CATProduct

Сообщение smbdie » 08 окт 2010 08:36

В общем так.
Есть сборка(*), допуским она состоит 2 катпарт, и 1 катпродукт в который входит еще что ни будь.
Так вот, задача состоит в следующем, нужно получить имена файлов катпарт, и катпродукт входящих в сборку *, имея лишь файл катпродукт*, и не имея остальных частей сборки.

Если я пытаюсь открыть катпродукт в кате, рядом с которым не лежат ее катпарпы, то катя просит указать путь до недостающих компанентов.
Она знает имена файлов катпартов которые входят в данную сборку:)
Мне как раз нужно их узнать:)
smbdie
Новичок
Новичок
 
Сообщения: 13
Зарегистрирован: 25 сен 2010 12:43

Re: Получить список файлов входящих в CATProduct

Сообщение RIMs » 09 окт 2010 03:39

1. Создал Продукт в катии Product1, закинул в него два Парта Part1 & Part2, сохранил локально на диске в папке "1", закрыл катию
2. Зашел на дискев папке "1", вырезал оттуда Part1 & Part2, создал на диске создал папку "2", вставил туда вырезанные парты
3. запустил катю, открыл из папки 1 Продукт, в нем висят два парта с потерянными линками.

вы такую ситуацию описывали, как считать имена у партов с потерянными линками?
В этом случае просто считывайье имена входящих в Продукт парт, так же как если бы они были заружены

Dim productDocument1 As Document
Set productDocument1 = CATIA.ActiveDocument
Dim product1 As Product
Set product1 = productDocument1.Product
Dim Prods1 As Products
Set Prods1 = product1.Products

iProds1 = Prods1.Count
For i = 1 To iProds1
strRef = Prod1.Name
Next i

полагаю тоже самое должно сработать и для потерянных линков Продуктов. Единственное что, в Продукте с которого вы хотите считать имена Партов на самом деле содержатся имена Инстанс и именно их вы будете считывать.
RIMs
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 20 мар 2009 22:27

Re: Получить список файлов входящих в CATProduct

Сообщение smbdie » 09 окт 2010 10:11

Да я говорю про такую ситуацию, как вы описали:)
Вот только мне это надо сделать на С++ на САА:)
Я думал этот раздел именно по этой теме:):)
smbdie
Новичок
Новичок
 
Сообщения: 13
Зарегистрирован: 25 сен 2010 12:43

Re: Получить список файлов входящих в CATProduct

Сообщение booSter » 11 окт 2010 12:42

Попробуй так:

  1. Получаем корневую ассемблюху (spRootAssy)
  2. Достаём из неё инстансы чаилдов spRootAssy->GetChildren либо spRootAssy->GetAllChildren
  3. Для каждого чаилда (spSubAssy)
    1. Достаём список идентификаторов репрезентаций spSubAssy->ListShapeRep
    2. Для каждого идентификатора репрезентации (iShapeName)
      1. Добываем репрезентацию (spSubAssy->GetShapeRep(... iShapeName ...))
      2. У добытой репрезентации (spLnObjOnRep которая есть CATILinkableObject) спрашиваем документ pDocOfRep=spLnObjOnRep->GetDocument
      3. Из документа достаём имя файла pDocOfRep->StorageName

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

Re: Получить список файлов входящих в CATProduct

Сообщение smbdie » 11 окт 2010 19:47

так мне кажется не получится "->GetDocument"
так как Part не загружен в память... значит документа на него нет...


проблему частично решил, с помощью получения PDMxItem(вроде так пишется)
но вот чтото не пойму как из него получить интерфейс CATIProduct или из CATIProduct получить PDMxItem...
smbdie
Новичок
Новичок
 
Сообщения: 13
Зарегистрирован: 25 сен 2010 12:43

Re: Получить список файлов входящих в CATProduct

Сообщение booSter » 12 окт 2010 23:21

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

Re: Получить список файлов входящих в CATProduct

Сообщение smbdie » 12 дек 2010 21:33

Снова у меня косяк и нужна помощь...
В общем нужно получить имя файла детали, входящего в сборку, которого нет не диске... (старая задача)

раньше я делал так
Зная что xPDMItem'ов в сборке столько же сколько и CATIProduct и находят они в одном порядке, я просто создавал массив, в котором были CATIProduct и соответствующий ему xPDMItem, но сейчас стали попадаться сборки в которых разное количество xPDM и Product'ов...

можно ли как ни будь их xPDM получить продукт? или наоборот...
Подскажите кто что знает... :)
smbdie
Новичок
Новичок
 
Сообщения: 13
Зарегистрирован: 25 сен 2010 12:43

Re: Получить список файлов входящих в CATProduct

Сообщение bit » 13 дек 2010 12:28

А если так:
CATUnicodeString DocFileName;
pCATIxPDMItem->GetDocFileName(DocFileName);

CATDocument * pDoc;
CATDocumentServices::GetDocumentInSession ( DocFilePathName, pDoc);

Дальше получить для документа Root Product

А обратно так:
CATILinkableObject_var spLink = pProduct;
CATDocument* pDoc = spLink -> GetDocument ();
CATIxPDMItem_var spPDMItem;
CATxPDMSessionServices::GetItemFromDocument(pDoc ,spPDMItem);
bit
Участник
Участник
 
Сообщения: 166
Images: 3
Зарегистрирован: 24 июл 2008 11:45
Откуда: Минск

Re: Получить список файлов входящих в CATProduct

Сообщение smbdie » 14 дек 2010 23:06

попробывал
CATUnicodeString DocFileName;
pCATIxPDMItem->GetDocFileName(DocFileName);

CATDocument * pDoc;
CATDocumentServices::GetDocumentInSession ( DocFilePathName, pDoc);

если DocFilePathNam нет на диске, получаю нулевой указатель...
CATILinkableObject_var spLink = pProduct;
CATDocument* pDoc = spLink -> GetDocument ();
CATIxPDMItem_var spPDMItem;
CATxPDMSessionServices::GetItemFromDocument(pDoc ,spPDMItem);

CATDocument* pDoc = spLink -> GetDocument ();
получаю указатель на документ сборки (CATProduct), а не на документ детали(CATPart)...
так можно сделать если CATILinkableObject_var spLink = pProduct->GetRefference();
но в этом случае референс опять нулевой указатель, так как детали нет на диске... :(
smbdie
Новичок
Новичок
 
Сообщения: 13
Зарегистрирован: 25 сен 2010 12:43


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

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

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