Artem писал(а):в vb
1) В имени грани -первое встречающиеся слева имя фичера
2)добавляй в selection + смотришь параллельно CATIA.StatusBar - тут тоже имя будет....
после получения имени MPart.FindObjectByName(Name)
каков вопрос таков ответ...Но геометрия ограничена только самой гранью, а как же получить элемент в дереве?
Set reference1 = part1.CreateReferenceFromName("REdge:(Edge:(Face:(Brp:(GSMBiDim.14;%6);None:();Cf11:());Face:(Brp:(GSMBiDim.14;%24);None:();Cf11:());None:(Limits1:();Limits2:());Cf11:());GSMBiDim.14;Z0;G3491)")
Но геометрия ограничена только самой гранью, а как же получить элемент в дереве?
CATGeometry *piGeom = pFace->GetGeometry(&ori);
т.к. возвращается имя последнего фичера....На замену можно прошшупать Selection.FindObject, ну и первый вариант вполне себе мной проверен и используется на всю катушку...2)добавляй в selection + смотришь параллельно CATIA.StatusBar - тут тоже имя будет....
Пусть можно записать, к какому элементу в дереве принадлежит, а как потом к этой самой грани привязать аннотацию в новой сборке?
1)создание GetTechnologicalObject("CATAnnotationSets") / AnnotationFactory.CreateText или
selection1.Add MySurface
CATIA.StartCommand ("Text with leader")
Сообщение Wireless_Fidelity » 05 июл 2012 12:16
Оказывается, всё у меня есть. Единственное, что пришлось поправить, это привязка к ребру. Раньше, когда писался код, CreateText почему-то выдавал ошибку.
Пример создания аннотации с выноской. Пользователь выбирает точку, в которой аннотация должна быть создана, а затем ребро, к которому привязана:
Sub CATMain()
Set myDocument = CATIA.ActiveDocument
Set myPart = CATIA.ActiveDocument.Part
Set mySel = CATIA.ActiveDocument.Selection
......
zerganalizer писал(а):На face не работает, случайно, метод .Parent? Тогда он даст фичер в дереве, содержащий вашу грань.
Для боди А и В запоминают все грани в массивы
piBodyA->GetAllCells(listOfFacesA,2);
piBodyB->GetAllCells(listOfFacesB,2);
Получают пересечение
pBoolOpe =::CATCreateDynBoolean(piGeomFactory,&topdata, CATBoolIntersection, piBodyA, piBodyB);
CATBody * pBodyIntersect = pBoolOpe->GetResult();
Получают все грани этого пересечения
pBodyIntersect->GetAllCells(listOfFaces,2);
А затем перебором определяют, к какому боди каждая грань относится
CATCell * myptr = listOfFaces[k];
pJournal->FindFirsts(myptr, originObjects, ThroughAllCreateAndModify);
CATCell * pCell = (CATCell *) (originObjects[j]);
if ( [b]listOfFacesA.Locate(pCell)[/b] ) isInBodyA = 1;
// or to BodyB ?
else if ( [b]listOfFacesB.Locate(pCell)[/b] ) isInBodyB =1;
else{
cout << "Unknown faces - check how your part has been created" << endl;
cout << "OR journal problem" << endl;
}
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4