• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

            ObjectDBX技術: 脫離AutoCAD處理dwg文件(NET 實現)

            以下均為console application,在vs2005中編譯通過!需要引用Autodesk的Object DBX 或最新的Real DWG 的SDK。
            如有其他的問題,請留言!

            列舉dwg文件中的所有的blcok的name:
            C#實現:

            using?System;
            using?System.Collections;
            using?System.Collections.Generic;
            using?System.Text;
            using?System.Diagnostics;
            using?System.Reflection;
            using?System.Runtime;
            using?System.Windows.Forms;
            using?System.IO;
            using?System.ComponentModel;
            using?System.Data;
            using?System.Drawing;


            using?Autodesk.AutoCAD.DatabaseServices;
            using?System.Runtime.InteropServices;
            using?Autodesk.AutoCAD.Runtime;
            using?Autodesk.AutoCAD.Geometry;




            [assembly:?SecuredApplication(
            @"license")]

            namespace?GetFrameOfRealDwg
            {
            ????
            class?MyHostApplicationServices?:?Autodesk.AutoCAD.DatabaseServices.HostApplicationServices
            ????
            {
            ????????
            public?override?System.String?FindFile(System.String?fileName,
            ????????????????????????????????????????????????Autodesk.AutoCAD.DatabaseServices.Database?database,
            ?????????????????????????????????????????????????Autodesk.AutoCAD.DatabaseServices.FindFileHint?hint
            ?????????????????????????????????????????????????)
            ????????
            {

            ????????????
            return?string.Empty;
            ????????}

            ????????
            static?public?ArrayList?GetBlockNames(Database?db)
            ????????
            {
            ????????????ArrayList?array?
            =?new?ArrayList();
            ????????????Transaction?tran?
            =?db.TransactionManager.StartTransaction();
            ????????????
            try
            ????????????
            {
            ????????????????BlockTable?bt?
            =?(BlockTable)tran.GetObject(db.BlockTableId,?OpenMode.ForWrite);
            ????????????????
            foreach?(ObjectId?recordid?in?bt)
            ????????????????
            {
            ????????????????????BlockTableRecord?record?
            =?(BlockTableRecord)tran.GetObject(recordid,?OpenMode.ForRead);
            ????????????????????array.Add(record.Name);
            ????????????????}

            ????????????}

            ????????????
            catch
            ????????????
            {
            ????????????}

            ????????????
            finally
            ????????????
            {
            ????????????????tran.Dispose();
            ????????????}

            ????????????
            return?array;
            ????????}

            ????????
            static?void?Main(string[]?args)
            ????????
            {


            ????????????MyHostApplicationServices?myserver?
            =?new?MyHostApplicationServices();
            ????????????
            int?lcid?=?0x00001033;?//?English
            ????????????RuntimeSystem.Initialize(myserver,?lcid);
            ????????????Database?Db?
            =?new?Database(false,?true);
            ????????????Db.ReadDwgFile(
            @"filepath",?FileShare.Read,?false,?"");
            ????????????ArrayList?ar?
            =?GetBlockNames(Db);
            ????????????
            foreach?(string?str?in?ar)
            ????????????
            {
            ????????????????System.Console.WriteLine(str);
            ????????????}


            ????????????RuntimeSystem.Terminate();
            ????????????System.Console.WriteLine();

            ????????}

            ????}

            }


            注意:? 只需ref? :acdbmgd.dll?
            ???????????必須實現HostApplicationServices及她的findfile().
            ?????????? 生成的dll必須使用綁定工具綁定.
            ????????? (license是很貴的啊,可以到autodesk公司主頁)

            c++實現:

            #pragma?once
            #define?_CRT_SECURE_NO_DEPRECATE

            #include?
            "windows.h"
            #include?
            "dbsymtb.h"
            #include?
            "dbents.h"
            #include?
            <stdio.h>
            #include?
            <string.h>
            #include?
            "tchar.h"
            #include?
            <string>
            #include?
            <atlconv.h>
            #include?
            <iostream>

            #include?
            "dbapserv.h"
            using?namespace?std;
            class?CreatentHostApp?:?public?AcDbHostApplicationServices
            {
            ????Acad::ErrorStatus?findFile(TCHAR
            *?pcFullPathOut,?int?nBufferLength,
            ?????????????????????????
            const?TCHAR*?pcFilename,?AcDbDatabase*?pDb?=?NULL,
            ?????????????????????????AcDbHostApplicationServices::FindFileHint?
            =?kDefault);

            ????
            //?These?two?functions?return?the?full?path?to?the?root?folder?where?roamable/local?
            ????
            //?customizable?files?were?installed.?Note?that?the?user?may?have?reconfigured?
            ????
            //?the?location?of?some?the?customizable?files?using?the?Options?Dialog?
            ????
            //?therefore?these?functions?should?not?be?used?to?locate?customizable?files.?
            ????
            //?To?locate?customizable?files?either?use?the?findFile?function?or?the?
            ????
            //?appropriate?system?variable?for?the?given?file?type.?
            ????
            //
            ????Acad::ErrorStatus?getRoamableRootFolder(const?TCHAR*&?folder);
            ????Acad::ErrorStatus?getLocalRootFolder(
            const?TCHAR*&?folder);
            ????
            //?make?sure?you?implement?getAlternateFontName.?In?case?your?findFile?implementation
            ????
            //?fails?to?find?a?font?you?should?return?a?font?name?here?that?is?guaranteed?to?exist.
            ????virtual?TCHAR?*?getAlternateFontName()?const
            ????
            {
            ????????
            return?_T("txt.shx");?//findFile?will?be?called?again?with?this?name
            ????}

            }
            ;

            //?Return?the?Install?directory?for?customizable?files
            Acad::ErrorStatus?
            CreatentHostApp::getRoamableRootFolder(
            const?TCHAR*&?folder)
            {
            ????Acad::ErrorStatus?ret?
            =?Acad::eOk;
            ????
            static?TCHAR?buf[MAX_PATH]?=?_T("\0");?//MDI?SAFE
            ????if?(buf[0]==0)
            ????????
            if?(GetModuleFileName(NULL,?buf,?MAX_PATH)?!=?0)
            ????????????ret?
            =?Acad::eRegistryAccessError;
            ????folder?
            =?buf;
            ????
            return?ret;
            }


            //?Return?the?Install?directory?for?customizable?files
            Acad::ErrorStatus?
            CreatentHostApp::getLocalRootFolder(
            const?TCHAR*&?folder)
            {
            ????Acad::ErrorStatus?ret?
            =?Acad::eOk;
            ????
            static?TCHAR?buf[MAX_PATH]?=?_T("\0");?//MDI?SAFE
            ????if?(buf[0]==0)
            ????????
            if?(GetModuleFileName(NULL,?buf,?MAX_PATH)?!=?0)
            ????????????ret?
            =?Acad::eRegistryAccessError;
            ????folder?
            =?buf;
            ????
            return?ret;
            }



            Acad::ErrorStatus?
            CreatentHostApp::findFile(TCHAR
            *?pcFullPathOut,?int?nBufferLength,
            ????
            const?TCHAR*?pcFilename,?AcDbDatabase*?pDb,?
            ????AcDbHostApplicationServices::FindFileHint?hint)
            {
            ????TCHAR?pExtension[
            5];
            ????
            switch?(hint)
            ????
            {
            ????????
            case?kCompiledShapeFile:
            ????????????_tcscpy(pExtension,?_T(
            ".shx"));
            ????????????
            break;
            ????????
            case?kTrueTypeFontFile:
            ????????????_tcscpy(pExtension,?_T(
            ".ttf"));
            ????????????
            break;
            ????????
            case?kPatternFile:
            ????????????_tcscpy(pExtension,?_T(
            ".pat"));
            ????????????
            break;
            ????????
            case?kARXApplication:
            ????????????_tcscpy(pExtension,?_T(
            ".dbx"));
            ????????????
            break;
            ????????
            case?kFontMapFile:
            ????????????_tcscpy(pExtension,?_T(
            ".fmp"));
            ????????????
            break;
            ????????
            case?kXRefDrawing:
            ????????????_tcscpy(pExtension,?_T(
            ".dwg"));
            ????????????
            break;
            ????????
            case?kFontFile:????????????????//?Fall?through.??These?could?have
            ????????case?kEmbeddedImageFile:???????//?various?extensions
            ????????default:
            ????????????pExtension[
            0]?=?_T('\0');
            ????????????
            break;
            ????}

            ????TCHAR
            *?filePart;
            ????DWORD?result;
            ????result?
            =?SearchPath(NULL,?pcFilename,?pExtension,?nBufferLength,?
            ????????????????????????pcFullPathOut,?
            &filePart);
            ????
            if?(result?&&?result?<?(DWORD)nBufferLength)
            ????????
            return?Acad::eOk;
            ????
            else
            ????????
            return?Acad::eFileNotFound;
            }

            void?dumpBlockTable(AcDbBlockTable?*pBlockTable)
            {
            ????
            ????AcDbBlockTableIterator?
            *pIter;
            ????AcDbBlockTableRecord?
            *pRecord;
            ????pBlockTable
            ->newIterator(pIter);???
            ????
            while?(!pIter->done())
            ????
            {
            ????????
            if?(pIter->getRecord(pRecord,?AcDb::kForRead)?==?Acad::eOk)
            ????????
            {
            ????????????TCHAR?
            *pName;????????????
            ????????????
            if?(pRecord->getName(pName)?==?Acad::eOk)
            ????????????
            {??
            ????????????????cout
            <<pName<<endl;
            ????????????????printf(
            "%s",pName);
            ????????????}
            ??????????
            ????????????pRecord
            ->close();
            ????????}

            ????????pIter
            ->step();
            ????}

            ????delete?pIter;
            ????
            }

            CreatentHostApp?gCreatentHostApp;

            int?_tmain(int?argc,?TCHAR?*argv[])
            {
            ????acdbSetHostApplicationServices(
            &gCreatentHostApp);
            ????
            long?lcid?=?0x00000409;?//?English
            ????acdbValidateSetup(lcid);

            ????
            //?Create?an?AcDbDatabase?and?initialize?its?tables.
            ????AcDbDatabase?*pDb?=?new?AcDbDatabase(Adesk::kFalse);
            ????
            if?(pDb?==?NULL)
            ????????
            return?0;
            ????pDb
            ->readDwgFile(_T("C:\\Documents?and?Settings\\xhzhu\\Desktop\\Test?Template?Explorer?1.1.4.46?for?XUPU\\02\\aaaaaa.dwg"));

            ????acdbHostApplicationServices()
            ->setWorkingDatabase(pDb);

            ????
            //?Open?the?block?table.
            ????AcDbBlockTable*?pBlockTable;
            ????
            if?(pDb->getBlockTable(pBlockTable,?AcDb::kForRead)?==?Acad::eOk)
            ????
            {??????
            ????????dumpBlockTable(pBlockTable);??
            //get?name?list
            ????????
            //?Close?the?block?table.
            ????????pBlockTable->close();
            ????}
            ?

            ????delete?pDb;
            ???
            ????acdbCleanUp();
            ????
            return?0;
            }


            注意:c++的是不需要綁定的,必須實現AcDbHostApplicationServices,也的包含頭文件.

            posted on 2006-06-21 17:41 夢在天涯 閱讀(15402) 評論(9)  編輯 收藏 引用 所屬分類: ARX/DBX

            評論

            # re: ObjectDBX技術: 脫離AutoCAD處理dwg文件(NET 實現) 2006-10-09 21:21 y

            我按你的方法做了,可到acdbSetHostApplicationServices(&gCreatentHostApp);就報“DBX CAS 4”的錯誤,如何解決?
              回復  更多評論   

            # re: ObjectDBX技術: 脫離AutoCAD處理dwg文件(NET 實現) 2006-10-10 08:57 夢在天涯

            這個錯誤經常的出現!
            ^_^!
            你用的是c++的嗎,你可能是由于連接了一些多余的跟AUTOCAD平臺有關的DLL。
            如果你用的是c#版的,你肯能是由于沒有lience或是沒有綁定成功,也可能是acdbmgd.dll的版本不正確!

            ^_^!


            最后提醒這里說的Object DBX 不是Object ARX中的自定義實體啊,是Autodesk的另一個可以脫離autocad平臺處理dwg的技術,最新的版本名字是RealDWG。

            希望能夠幫助大家!  回復  更多評論   

            # re: ObjectDBX技術: 脫離AutoCAD處理dwg文件(NET 實現) 2006-11-16 14:26 yy

            麻煩給一個RealDWG的下載地址  回復  更多評論   

            # re: ObjectDBX技術: 脫離AutoCAD處理dwg文件(NET 實現) 2006-11-17 12:32 夢在天涯

            RealDwg是AutoDesk的收費的,不知道有沒有官方的下載連接啊,.net板的必須的有她的licence綁定以后才可以使用的啊!
            你可以自己到AutoDesk的網站看看有沒有!  回復  更多評論   

            # re: ObjectDBX技術: 脫離AutoCAD處理dwg文件(NET 實現) 2006-11-21 12:15 cj

            請教一下 如何使用ObjectDBX導入ADT相關的aec開頭的DBX文件?謝謝!  回復  更多評論   

            # re: ObjectDBX技術: 脫離AutoCAD處理dwg文件(NET 實現) 2012-01-05 15:02 aaa

            我建立了一個DBX項目,寫了一個自定義實體,想以外部圖紙作為模板畫這個實體.
            用到readDwgFile函數時總是不成功,出現DBX CAS4錯誤.
            看到你的文章中說要實現AcDbHostApplicationServices,請問能再說的具體點嗎?  回復  更多評論   

            # re: ObjectDBX技術: 脫離AutoCAD處理dwg文件(NET 實現) 2014-04-25 15:51 QU

            夢想---CAD---KONGJIAN  回復  更多評論   

            # re: ObjectDBX技術: 脫離AutoCAD處理dwg文件(NET 實現) 2016-02-24 07:51 C#學習

            你好。
            這句里面的參數怎么取:[assembly: SecuredApplication(
            @"license")]
            隨便填了個參數,是可以編譯過去,無法執行。提示找不到acdbmgd.dll文件。也無法調試。謝謝  回復  更多評論   

            # re: ObjectDBX技術: 脫離AutoCAD處理dwg文件(NET 實現) 2016-05-31 11:48 dsr

            C++版本,需要引用哪些lib庫文件?  回復  更多評論   

            公告

            EMail:itech001#126.com

            導航

            統計

            • 隨筆 - 461
            • 文章 - 4
            • 評論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1804154
            • 排名 - 5

            最新評論

            閱讀排行榜

            久久久网中文字幕| 国产福利电影一区二区三区久久老子无码午夜伦不 | 99久久精品国产高清一区二区| 久久久噜噜噜久久| 欧美午夜A∨大片久久 | 久久99精品久久久久久久不卡| 国产精品99久久久久久宅男小说| 久久精品国产亚洲AV不卡| 国产精品成人久久久久三级午夜电影| 久久国产精品无码HDAV| 久久精品aⅴ无码中文字字幕重口| 99久久夜色精品国产网站| 亚洲精品无码专区久久久| 无码人妻精品一区二区三区久久| 久久久久亚洲AV成人网人人网站 | 亚洲精品乱码久久久久久蜜桃图片| 日韩久久久久中文字幕人妻 | 欧美亚洲国产精品久久| 一本色道久久88精品综合| 久久亚洲国产成人精品性色| www性久久久com| 国产精品成人久久久久三级午夜电影 | 99久久免费国产精精品| 国产精品久久影院| 精品无码久久久久久国产| 久久成人国产精品免费软件| 国产亚洲色婷婷久久99精品| 99久久精品无码一区二区毛片| 日产久久强奸免费的看| 久久精品一本到99热免费| 亚洲国产精品久久| 18禁黄久久久AAA片| 国产一级持黄大片99久久| 久久久久国产| 99久久精品国产高清一区二区| 久久无码人妻精品一区二区三区| 亚洲国产精品无码久久一线 | 精品久久久久久中文字幕| 久久se精品一区精品二区国产| 国产精品成人久久久| 青青国产成人久久91网 |