• <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++ 基礎(chǔ)} {C++ 高級(jí)} {C#界面,C++核心算法} {設(shè)計(jì)模式} {C#基礎(chǔ)}

            ObjectDBX技術(shù): 脫離AutoCAD處理dwg文件(NET 實(shí)現(xiàn))

            以下均為console application,在vs2005中編譯通過(guò)!需要引用Autodesk的Object DBX 或最新的Real DWG 的SDK。
            如有其他的問(wèn)題,請(qǐng)留言!

            列舉dwg文件中的所有的blcok的name:
            C#實(shí)現(xiàn):

            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?
            ???????????必須實(shí)現(xiàn)HostApplicationServices及她的findfile().
            ?????????? 生成的dll必須使用綁定工具綁定.
            ????????? (license是很貴的啊,可以到autodesk公司主頁(yè))

            c++實(shí)現(xiàn):

            #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++的是不需要綁定的,必須實(shí)現(xiàn)AcDbHostApplicationServices,也的包含頭文件.

            posted on 2006-06-21 17:41 夢(mèng)在天涯 閱讀(15405) 評(píng)論(9)  編輯 收藏 引用 所屬分類(lèi): ARX/DBX

            評(píng)論

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

            我按你的方法做了,可到acdbSetHostApplicationServices(&gCreatentHostApp);就報(bào)“DBX CAS 4”的錯(cuò)誤,如何解決?
              回復(fù)  更多評(píng)論   

            # re: ObjectDBX技術(shù): 脫離AutoCAD處理dwg文件(NET 實(shí)現(xiàn)) 2006-10-10 08:57 夢(mèng)在天涯

            這個(gè)錯(cuò)誤經(jīng)常的出現(xiàn)!
            ^_^!
            你用的是c++的嗎,你可能是由于連接了一些多余的跟AUTOCAD平臺(tái)有關(guān)的DLL。
            如果你用的是c#版的,你肯能是由于沒(méi)有l(wèi)ience或是沒(méi)有綁定成功,也可能是acdbmgd.dll的版本不正確!

            ^_^!


            最后提醒這里說(shuō)的Object DBX 不是Object ARX中的自定義實(shí)體啊,是Autodesk的另一個(gè)可以脫離autocad平臺(tái)處理dwg的技術(shù),最新的版本名字是RealDWG。

            希望能夠幫助大家!  回復(fù)  更多評(píng)論   

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

            麻煩給一個(gè)RealDWG的下載地址  回復(fù)  更多評(píng)論   

            # re: ObjectDBX技術(shù): 脫離AutoCAD處理dwg文件(NET 實(shí)現(xiàn)) 2006-11-17 12:32 夢(mèng)在天涯

            RealDwg是AutoDesk的收費(fèi)的,不知道有沒(méi)有官方的下載連接啊,.net板的必須的有她的licence綁定以后才可以使用的啊!
            你可以自己到AutoDesk的網(wǎng)站看看有沒(méi)有!  回復(fù)  更多評(píng)論   

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

            請(qǐng)教一下 如何使用ObjectDBX導(dǎo)入ADT相關(guān)的aec開(kāi)頭的DBX文件?謝謝!  回復(fù)  更多評(píng)論   

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

            我建立了一個(gè)DBX項(xiàng)目,寫(xiě)了一個(gè)自定義實(shí)體,想以外部圖紙作為模板畫(huà)這個(gè)實(shí)體.
            用到readDwgFile函數(shù)時(shí)總是不成功,出現(xiàn)DBX CAS4錯(cuò)誤.
            看到你的文章中說(shuō)要實(shí)現(xiàn)AcDbHostApplicationServices,請(qǐng)問(wèn)能再說(shuō)的具體點(diǎn)嗎?  回復(fù)  更多評(píng)論   

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

            夢(mèng)想---CAD---KONGJIAN  回復(fù)  更多評(píng)論   

            # re: ObjectDBX技術(shù): 脫離AutoCAD處理dwg文件(NET 實(shí)現(xiàn)) 2016-02-24 07:51 C#學(xué)習(xí)

            你好。
            這句里面的參數(shù)怎么取:[assembly: SecuredApplication(
            @"license")]
            隨便填了個(gè)參數(shù),是可以編譯過(guò)去,無(wú)法執(zhí)行。提示找不到acdbmgd.dll文件。也無(wú)法調(diào)試。謝謝  回復(fù)  更多評(píng)論   

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

            C++版本,需要引用哪些lib庫(kù)文件?  回復(fù)  更多評(píng)論   

            公告

            EMail:itech001#126.com

            導(dǎo)航

            統(tǒng)計(jì)

            • 隨筆 - 461
            • 文章 - 4
            • 評(píng)論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類(lèi)

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1804663
            • 排名 - 5

            最新評(píng)論

            閱讀排行榜

            亚洲va久久久噜噜噜久久| 欧美久久综合九色综合| 久久99精品国产99久久| 日韩亚洲欧美久久久www综合网| 久久综合久久综合九色| 久久久久国产一区二区| 精品国产乱码久久久久久呢| 东京热TOKYO综合久久精品| 岛国搬运www久久| 久久综合九色综合网站| 精品国产乱码久久久久久郑州公司 | 91性高湖久久久久| 综合久久精品色| 97久久综合精品久久久综合| 国产精品成人99久久久久91gav| 久久精品国产免费观看| 蜜桃麻豆www久久| 亚洲精品乱码久久久久久不卡| 97久久超碰国产精品旧版| 精品水蜜桃久久久久久久| 日韩AV无码久久一区二区| 精品久久久久久无码中文字幕| 亚洲中文字幕无码久久2017| 草草久久久无码国产专区| 亚洲午夜久久久久久久久电影网| 欧美亚洲国产精品久久蜜芽| 久久久久久久女国产乱让韩| 久久综合综合久久97色| 亚洲中文久久精品无码| 久久久99精品成人片中文字幕| 久久综合给合久久狠狠狠97色69| 久久久久无码专区亚洲av| 国产69精品久久久久777| 久久久噜噜噜久久中文字幕色伊伊| 久久久久久a亚洲欧洲aⅴ| 久久精品青青草原伊人| 久久99精品久久久久久噜噜| 国产成人综合久久综合| 亚洲AV无码久久精品成人| 亚洲国产精品无码久久九九 | 人妻久久久一区二区三区|