Страница 1 из 1

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

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

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

СообщениеДобавлено: 07 окт 2010 21:13
RIMs
нужно просто получить имена файлов

я не понял вопрос, какие файлы имеются ввиду? В сборку могут входит Продукты или Парты, если сборка пустая, имена каких файлов вы ппытаетесь получить?

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

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

Если я пытаюсь открыть катпродукт в кате, рядом с которым не лежат ее катпарпы, то катя просит указать путь до недостающих компанентов.
Она знает имена файлов катпартов которые входят в данную сборку:)
Мне как раз нужно их узнать:)

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

СообщениеДобавлено: 09 окт 2010 03:39
RIMs
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

полагаю тоже самое должно сработать и для потерянных линков Продуктов. Единственное что, в Продукте с которого вы хотите считать имена Партов на самом деле содержатся имена Инстанс и именно их вы будете считывать.

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

СообщениеДобавлено: 09 окт 2010 10:11
smbdie
Да я говорю про такую ситуацию, как вы описали:)
Вот только мне это надо сделать на С++ на САА:)
Я думал этот раздел именно по этой теме:):)

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

СообщениеДобавлено: 11 окт 2010 12:42
booSter
Попробуй так:

  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

Правда возможны нюансы с получением документов из линков, связанные с тем, что документы (суб-ассембли, парты) на диске отсутствуют

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

СообщениеДобавлено: 11 окт 2010 19:47
smbdie
так мне кажется не получится "->GetDocument"
так как Part не загружен в память... значит документа на него нет...


проблему частично решил, с помощью получения PDMxItem(вроде так пишется)
но вот чтото не пойму как из него получить интерфейс CATIProduct или из CATIProduct получить PDMxItem...

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

СообщениеДобавлено: 12 окт 2010 23:21
booSter
xPDM- вещь заманчивая для таких задачек, но требует наличия соответствующей лицензии на клиентской машине...

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

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

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

можно ли как ни будь их xPDM получить продукт? или наоборот...
Подскажите кто что знает... :)

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

СообщениеДобавлено: 13 дек 2010 12:28
bit
А если так:
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);

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

СообщениеДобавлено: 14 дек 2010 23:06
smbdie
попробывал
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();
но в этом случае референс опять нулевой указатель, так как детали нет на диске... :(