How i can read AutoCad DWG file using ObjectARX SDK ?

How i can read AutoCad DWG file using ObjectARX SDK ?

Anyone have any idea please inform me..?
DhanushdasAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

jkrCommented:
Get the ObjectARX samples on this issue from http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=773180
0
jkrCommented:
'AcDbDatabase::readDwgFile()' is what you should look for in the above samples...
0
DhanushdasAuthor Commented:
Yes...I am looking for 'AcDbDatabase::readDwgFile()'.How i can get souce code for reading all autocad objects in a DWG file.?
0
PMI ACP® Project Management

Prepare for the PMI Agile Certified Practitioner (PMI-ACP)® exam, which formally recognizes your knowledge of agile principles and your skill with agile techniques.

jkrCommented:
>>How i can get souce code

Download the aforementioned samples...
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
OMC2000Commented:
If you want to list ALL object you should learn ObjectARX anyway.

Some helpful hints
How to get entities:
ARX\DOCSAMPS\TESTDB\TESTDB.CPP

void
readDwg()
{
    // Set constructor parameter to kFalse so that the
    // database will be constructed empty.  This way only
    // what is read in will be in the database.
    //
    AcDbDatabase *pDb = new AcDbDatabase(Adesk::kFalse);

    // The AcDbDatabase::readDwgFile() function
    // automatically appends a DWG extension if it is not
    // specified in the filename parameter.
    //
    pDb->readDwgFile("test1.dwg");

    // Open the model space block table record.
    //
    AcDbBlockTable *pBlkTbl;
    pDb->getSymbolTable(pBlkTbl, AcDb::kForRead);

    AcDbBlockTableRecord *pBlkTblRcd;
    pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd,
        AcDb::kForRead);
    pBlkTbl->close();

    AcDbBlockTableRecordIterator *pBlkTblRcdItr;
    pBlkTblRcd->newIterator(pBlkTblRcdItr);

    AcDbEntity *pEnt;
    for (pBlkTblRcdItr->start(); !pBlkTblRcdItr->done();
        pBlkTblRcdItr->step())
    {
        pBlkTblRcdItr->getEntity(pEnt,
            AcDb::kForRead);
        acutPrintf("classname: %s\n",
            (pEnt->isA())->name());
        pEnt->close();
    }
    pBlkTblRcd->close();
    delete pBlkTblRcdItr;
    delete pDb;
}

Notice that there are various levels of AutoCAD objects visibility and various location of them.
Sample above lists top level objects available in model space.

The following types of objects can not be found this way:
- subentities In order to get them use
        AcDbObjectIterator  *pIter = NULL;
        if (pEnt->isKindOf(AcDbBlockReference::desc())) {
              // Block Reference  - get Attribute iterator
            pIter = AcDbBlockReference::cast(pEnt)->attributeIterator() ;
        } else if (pEnt->isKindOf(AcDb2dPolyline::desc())) {
              // 2D Polyline - get vertex iterator
            pIter = AcDb2dPolyline::cast(pEnt)->vertexIterator() ;
        } else if (pEnt->isKindOf(AcDb3dPolyline::desc())) {
              // 3D Polyline - get vertex iterator
            pIter = AcDb3dPolyline::cast(pEnt)->vertexIterator() ;
        } else if (pEnt->isKindOf(AcDbPolyFaceMesh::desc())) {
              // Polyface Mesh - get subobject iterator
            pIter = AcDbPolyFaceMesh::cast(pEnt)->vertexIterator() ;
        } else if (pEnt->isKindOf(AcDbPolygonMesh::desc())) {
              // Polygon Mesh - get vertex iterator
            pIter = AcDbPolygonMesh::cast(pEnt)->vertexIterator() ;
        }

- Symbol Table records in order to get them use
    AcDbSymbolTable mpSymbolTable;

// Block
     mErrStat = mpDwg->getBlockTable( mpSymbolTable, AcDb::kForRead );
// Layer
          mErrStat = mpDwg->getLayerTable( mpSymbolTable, AcDb::kForRead);
// TextStyle:
         mErrStat = mpDwg->getTextStyleTable(mpSymbolTable, AcDb::kForRead);
// LineType
         mErrStat = mpDwg->getLinetypeTable(mpSymbolTable, AcDb::kForRead);
// View    
        mErrStat = mpDwg->getViewTable( mpSymbolTable, AcDb::kForRead);
// ViewPort
        mErrStat = mpDwg->getViewportTable( mpSymbolTable, AcDb::kForRead);
// UCS         
        mErrStat = mpDwg->getUCSTable( mpSymbolTable, AcDb::kForRead);
// RegApp  
        mErrStat = mpDwg->getRegAppTable( mpSymbolTable, AcDb::kForRead);
// DimStyle
        mErrStat = mpDwg->getDimStyleTable( mpSymbolTable, AcDb::kForRead);

        mErrStat = mpSymbolTable->newIterator( pIter,
                                              true,
                                              true/*Skip Deleted*/ )

// dictionaries

// Group  
 mErrStat = mpDwg->getGroupDictionary( mpDict, AcDb::kForRead);
// Layout  
mErrStat = mpDwg->getLayoutDictionary( mpDict, AcDb::kForRead);
// MLStyle
mErrStat = mpDwg->getMLStyleDictionary( mpDict, AcDb::kForRead);
// PlotStyleName :
AcDbDictionaryWithDefault   *pDictWD      = NULL;
mErrStat = mpDwg->getPlotStyleNameDictionary( pDictWD, AcDb::kForRead);
if( Acad::eOk == mErrStat )
  mpDict = AcDbDictionary::cast(pDictWD);
// NamedDict:
 if( !strcmp(pName/*dictionary name*/, ACDB_PLOTSETTINGS_DICTIONARY)) {
    mErrStat = mpDwg->getPlotSettingsDictionary( mpDict, AcDb::kForRead);
    break;
 }
 mErrStat = mpDwg->getNamedObjectsDictionary( pDict, AcDb::kForRead);
 if( !pName && Acad::eOk == mErrStat ) {
    mpDict = pDict;
    break;
 }
 if( Acad::eOk == (mErrStat = pDict->getAt(pName, pObj, AcDb::kForRead))) {
    if( NULL == (mpDict = AcDbDictionary::cast(pObj))) {
      pObj->close();
      mErrStat = Acad::eWrongObjectType;
   }
 }

// extension disctionary that can be attached to any object

    dictObjId = pObj->extensionDictionary();
    pObj->close();

    // Open the extension dictionary  
    acdbOpenObject(pDict, dictObjId, AcDb::kForRead);


0
tinchosCommented:
No comment has been added lately, so it's time to clean up this TA.
I will leave the following recommendation for this question in the Cleanup topic area:

Accept: jkr {http:#9694940}

Please leave any comments here within the next seven days.
PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!

Tinchos
EE Cleanup Volunteer
0
OMC2000Commented:
I gave detailed description of drawing reading procedure. It's much more useful answer than other ones.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C++

From novice to tech pro — start learning today.