ObjectARX
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

How to extract AcDbObjectId for AcBrFace?

1 REPLY 1
Reply
Message 1 of 2
diagodose2009
463 Views, 1 Reply

How to extract AcDbObjectId for AcBrFace?

Hello.

I need routine extracting AcDbObjectId for 3dFace inside AcDb3DSolid..

Can you replace "????" at source bellow, at Heart

I need two vars: id_my_for_face=...., current_face_have_name=.............

Thank ,you.....  in advance

Robot Sad

 

[source=c++arx]

 

  Adesk::Boolean ownTransaction;
  AcDbObjectId id;
  AcArray<AcDbFullSubentPath*> subentIds;
  id.setNull();
  AcDb3dSolid* pSolid=nil;
  AcDbObject * pObj=nil;

..............................
    con_ercad = actrTransactionManager->getObject(pObj, objId, AcDb::kForWrite);
    pSolid = AcDb3dSolid::cast(pObj);
    if (pSolid == nil)
           { dbAbortTransaction(ownTransaction);
             pObj->close();
             exitif(1,"g412.error cps");
           };
...........................
   AcBrBrep breptemp;
   kj=dfn_var_AcDbEntity2AcBrBrep(pSolid,breptemp);
   AcBrBrepFaceTraverser brepFaceTrav;
   con_ercad = brepFaceTrav.setBrep(breptemp);
...............................
    int faceCount = 0;
//(Make sure ACIS is there)
    Adesk::Boolean acisStarted = acdbIsModelerStarted();
    acdbModelerStart();
//(/Make sure ACIS is there)
    while (!brepFaceTrav.done() && (con_ercad == AcBr::eOk))
       {
.......................................
                     AcDbFullSubentPath *caletemp = new (AcDbFullSubentPath);
                     if (con_ercad==1)
                        { con_ercad=faceEntity.getSubentPath(*caletemp);
                          con_ercad=(con_ercad==AcBr::eOk)?1:RTCAN;
                        };
                    if (con_ercad==1) //okai
                        subentIds.append(caletemp);
         con_ercad = brepFaceTrav.next();
       }
................................................

kj=dfn_face_setrgbA(subentIds,pSolid,pObj,ownTransaction);
  if (kj<0) { ads_retint(RTERROR);return(rr);};
  kj=RTREJ;
  int faceCount=subentIds.length();
  AcDbFullSubentPath *caleuser=nil;
  if (arguindx<faceCount)
      {
        lspfn_redraw(pSolid->objectId(),4);
        caleuser=subentIds[arguindx];
        pSolid->highlight(caleuser,0);
     };
   ads_name eName;
   ads_name_clear(eName);
   rb=nil;
   daok=0;
   tip=0;
   if (caleuser) 
      {  int cateavem=0;
         tip=caleuser->subentId().index();
         AcDbObjectIdArray m_objIds;
         m_objIds=caleuser->objectIds();
         cateavem=m_objIds.length();  //cateavem==1
         if(cateavem>0)
             id_mysolid=m_objIds[0];  // here the ID=forAcDb3Dsolid ,not for Face

.Smiley Tongue.Smiley Tongue.Smiley Tongue.Smiley Tongue.Smiley Tongue.Smiley Tongue

        AcDbObjectId id_my_for_face="????"

Heart

        ads_name  current_face_have_name="????"

..................................................................................................

        //id=pSolid->objectId();
        delete(caleuser);
        caleuser=nil;
        daok=1;
       };
   subentIds.removeAll();

[/source=c++arx]

 

1 REPLY 1
Message 2 of 2

Short answer: AcBrFace object has not AcDbObjectId as far as AcBrFace object can not be database resident object.

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"


Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Expert Elite Member

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

”Boost