乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 54|回复: 3

不打开CAD 读取.dwg文件内部的实体元素的信息

[复制链接]

6

主题

10

帖子

1

银币

初来乍到

Rank: 1

铜币
34
发表于 2006-11-21 12:27:00 | 显示全部楼层 |阅读模式
在不打开CAD软件的情况下,通过程序读取.dwg文件内部的实体元素的信息,这个想法能否实现,若能实现用什么技术可以实现,希望版主和对这方面了解的同仁给与解答。
回复

使用道具 举报

0

主题

6

帖子

2

银币

初来乍到

Rank: 1

铜币
6
发表于 2007-1-12 11:00:00 | 显示全部楼层
有的,ODT技术就是做这个的
回复

使用道具 举报

7

主题

19

帖子

2

银币

初来乍到

Rank: 1

铜币
47
发表于 2007-1-16 12:15:00 | 显示全部楼层
朋友,我和你的问题一样,搞出来了没?
回复

使用道具 举报

1

主题

18

帖子

2

银币

初来乍到

Rank: 1

铜币
22
发表于 2007-2-24 17:41:00 | 显示全部楼层
如下代码可以实现
void
clone3()
{
    AcDbObjectId id;
    AcDbObjectIdArray list;
    AcDbDatabase extDatabase( Adesk::kFalse );
    char dwgName[_MAX_PATH];
    if (RTNORM != getFile( "Enter DWG name", "Select Drawing", "dwg",
                           dwgName ))
    {
        return;
    }
    if (Acad::eOk != extDatabase.readDwgFile( dwgName ))
    {
        acedAlert( "Error reading DWG!" );
        return;
    }
extDatabase.
    AcDbBlockTable* pBT;
    if (Acad::eOk != extDatabase.getSymbolTable( pBT, AcDb::kForRead ))
    {
        acedAlert( "Error getting BlockTable of DWG" );
        return;
    }
    AcDbBlockTableRecord* pBTR;
    Acad::ErrorStatus es = pBT->getAt( ACDB_MODEL_SPACE, pBTR, AcDb::kForRead );
    pBT->close();
    if (Acad::eOk != es) {
        acedAlert( "Error getting model space of DWG" );
        return;
    }
    AcDbBlockTableRecordIterator* pIT;
    if (Acad::eOk != pBTR->newIterator( pIT )) {
        acedAlert( "Error iterating model space of DWG" );
        pBTR->close();
        return;
    }
    for ( ; !pIT->done(); pIT->step()) {
        if (Acad::eOk == pIT->getEntityId( id )) {
            list.append( id );
            // There is a bug in ARX that causes extension dictionaries
            // to appear to be soft owners of their contents.  This causes
     // the contents to be skipped during wblock.  To fix this we
     // must explicitly tell the extension dictionary to be a hard
     // owner of it's entries.
            //
            AcDbEntity *pEnt;
            if ( Acad::eOk == pIT->getEntity(pEnt, AcDb::kForRead)) {
                AcDbObjectId obj;
                if ((obj = pEnt->extensionDictionary())
                    != AcDbObjectId::kNull)
                {
                    AcDbDictionary *pDict = NULL;
                    acdbOpenObject(pDict, obj, AcDb::kForWrite);
                    if (pDict) {
                        pDict->setTreatElementsAsHard(Adesk::kTrue);
                        pDict->close();
                    }
                }
                pEnt->close();
            }
        }
    }
    delete pIT;
    pBTR->close();
    if (list.isEmpty()) {
        acedAlert( "No entities found in model space of DWG" );
        return;
    }
    AcDbDatabase *pTempDb;
    if (Acad::eOk != extDatabase.wblock( pTempDb, list, AcGePoint3d::kOrigin ))
    {
        acedAlert( "wblock failed!" );
        return;
    }
    if (Acad::eOk != acdbHostApplicationServices()->workingDatabase()
        ->insert( AcGeMatrix3d::kIdentity, pTempDb ))
        acedAlert( "insert failed!" );
    delete pTempDb;
}
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 22:48 , Processed in 0.158397 second(s), 60 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表