亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dbreactmdi.cpp

?? object arx標高繪圖計算
?? CPP
字號:
// (C) Copyright 1996 by Autodesk, Inc. 
//
// Permission to use, copy, modify, and distribute this software in
// object code form for any purpose and without fee is hereby granted, 
// provided that the above copyright notice appears in all copies and 
// that both that copyright notice and the limited warranty and
// restricted rights notice below appear in all supporting 
// documentation.
//
// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS. 
// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE.  AUTODESK, INC. 
// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
// UNINTERRUPTED OR ERROR FREE.
//
// Use, duplication, or disclosure by the U.S. Government is subject to 
// restrictions set forth in FAR 52.227-19 (Commercial Computer
// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
// (Rights in Technical Data and Computer Software), as applicable.
//
// Description:
//
//  Test App for AcDbDatabaseReactor,

#include "rxobject.h"
#include "rxregsvc.h"
#include "rxdlinkr.h"
#include "rxditer.h"
#include "aced.h"
#include "dbmain.h"
#include "dbdict.h"
#include "dbidmap.h"
#include "dbapserv.h"
#include "adslib.h"
#include "acdocman.h"

void printDbEvent(const AcDbObject*, const char* eventStr);
void printObj(const AcDbObject* pObj);
void watchDb();
void clearReactors();
extern "C"
AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode, void*);

// THE FOLLOWING CODE APPEARS IN THE SDK DOCUMENT.

class AsdkDbReactor;

class AsdkDocReactor: public AcApDocManagerReactor
{
public:
	virtual void documentToBeActivated(AcApDocument* pDoc);
	virtual void documentCreated(AcApDocument* pDoc);
	virtual void documentToBeDestroyed(AcApDocument* pDoc);
};

class AsdkPerDocData {
	friend class AsdkAppDocGlobals;
public:
	AsdkPerDocData(AcApDocument* pDoc);
private:
	AcApDocument* m_pDoc;
	AsdkPerDocData* m_pNext;
	long m_EntAcc;			// Entity count
	AsdkDbReactor* m_pDbr;	// Pointer to database reactor
};

class AsdkAppDocGlobals 
{
public:
	AsdkAppDocGlobals(AcApDocument* pDoc);
	void setGlobals(AcApDocument* pDoc);
	void removeDocGlobals(AcApDocument *pDoc);
	void removeAllDocGlobals(AsdkPerDocData* pTarget);
	void unload();
	long &entityCount();
	void incrementEntityCount();
	void decrementEntityCount();
	AsdkDbReactor *dbReactor();
	void setDbReactor(AsdkDbReactor *pDb);
private:
	AsdkPerDocData *m_pHead;
	AsdkPerDocData *m_pData;
	AsdkDocReactor *m_pDocReactor;
};

AsdkAppDocGlobals *gpAsdkAppDocGlobals;

//
// Custom AcDbDatabaseReactor class for Database
// event notification.
//
class AsdkDbReactor : public AcDbDatabaseReactor
{
public:

    virtual void objectAppended(const AcDbDatabase* dwg,
        const AcDbObject* dbObj);

    virtual void objectModified(const AcDbDatabase* dwg,
        const AcDbObject* dbObj);

    virtual void objectErased(const AcDbDatabase* dwg,
        const AcDbObject* dbObj, Adesk::Boolean pErased);
};


// Called whenever an object is added to the database
//
void
AsdkDbReactor::objectAppended(const AcDbDatabase* db,
    const AcDbObject* pObj)
{
    printDbEvent(pObj, "objectAppended");
    acutPrintf(" Db==%lx\n", (long) db);
    gpAsdkAppDocGlobals->incrementEntityCount();
    acutPrintf("Entity Count = %d\n", gpAsdkAppDocGlobals->entityCount());
}


// Called whenever an object in the database is modified
//
void
AsdkDbReactor::objectModified(const AcDbDatabase* db,
    const AcDbObject* pObj)
{
    printDbEvent(pObj, "objectModified");
    acutPrintf(" Db==%lx\n", (long) db);
}


// Called whenever an object is erased from the database
//
void
AsdkDbReactor::objectErased(const AcDbDatabase* db,
    const AcDbObject* pObj, Adesk::Boolean pErased)
{
    if (pErased) {
        printDbEvent(pObj, "objectErased");
      gpAsdkAppDocGlobals->decrementEntityCount();
    } else {
        printDbEvent(pObj, "object(Un)erased");
        gpAsdkAppDocGlobals->incrementEntityCount();
    }
    acutPrintf(" Db==%lx\n", (long) db);
    acutPrintf("Entity Count = %d\n", gpAsdkAppDocGlobals->entityCount());
}


// Prints the message passed in by eventStr and then
// proceeds to call printObj to print the information about
// the object that's triggered the notification.
//
void
printDbEvent(const AcDbObject* pObj, const char* pEvent)
{
    acutPrintf("  Event: AcDbDatabaseReactor::%s ", pEvent);
    printObj(pObj);
}


// Prints out the basic information about the object pointed
// to by pObj.
//
void
printObj(const AcDbObject* pObj)
{
    if (pObj == NULL) {
        acutPrintf("(NULL)");
        return;
    }

    AcDbHandle objHand;
    char  handbuf[17];

    // Get the handle as a string
    //
    pObj->getAcDbHandle(objHand);
    objHand.getIntoAsciiBuffer(handbuf);

    acutPrintf(
        "\n   (class==%s, handle==%s, id==%lx, db==%lx)",
        pObj->isA()->name(), handbuf,
        pObj->objectId().asOldId(), pObj->database());
}

// Document swapping functions
void
AsdkDocReactor::documentToBeActivated(AcApDocument *pDoc)
{
	gpAsdkAppDocGlobals->setGlobals(pDoc);
}

void
AsdkDocReactor::documentCreated(AcApDocument *pDoc)
{
	gpAsdkAppDocGlobals->setGlobals(pDoc);
}

void
AsdkDocReactor::documentToBeDestroyed(AcApDocument *pDoc)
{
	gpAsdkAppDocGlobals->removeDocGlobals(pDoc);
}

AsdkPerDocData::AsdkPerDocData(AcApDocument *pDoc)
{
	m_pDoc = pDoc;
	m_pNext = NULL;
	m_EntAcc = 0;
	m_pDbr = NULL;
}

AsdkAppDocGlobals::AsdkAppDocGlobals(AcApDocument *pDoc)
{
	m_pData = m_pHead = NULL;
	m_pDocReactor = new AsdkDocReactor();
	acDocManager->addReactor(m_pDocReactor);
}

// Iterate through the list until we find the doc's global data.
// If it's not found, create a new set of doc globals.
//
void
AsdkAppDocGlobals::setGlobals(AcApDocument *pDoc)
{
    AsdkPerDocData *p_data = m_pHead, *prev_data = m_pHead;
    while (p_data != NULL) {
        if (p_data->m_pDoc == pDoc) {
            m_pData = p_data;
            break;
        }
        prev_data = p_data;
        p_data = p_data->m_pNext;
    }
    if (p_data == NULL) {
        if (m_pHead == NULL)
            m_pHead = m_pData = new AsdkPerDocData(pDoc);
        else
            prev_data->m_pNext = m_pData = new AsdkPerDocData(pDoc);
    }
}
// Delete the globals associated with pDoc.
//
void
AsdkAppDocGlobals::removeDocGlobals(AcApDocument *pDoc)
{
    AsdkPerDocData  *p_data = m_pHead, *prev_data = m_pHead;
    while (p_data != NULL) {
        if (p_data->m_pDoc == pDoc) {
            if (p_data == m_pHead)
                m_pHead = p_data->m_pNext;
            else
                prev_data->m_pNext = p_data->m_pNext;
            if (m_pData == p_data)
                m_pData = m_pHead;
            delete p_data;
            break;
        }
        prev_data = p_data;
        p_data = p_data->m_pNext;
    }
}

// Delete all the doc globals in the list (recursively).
//
void
AsdkAppDocGlobals::removeAllDocGlobals(AsdkPerDocData *p_target)
{
    if (p_target == NULL)
        return;
    if (p_target->m_pNext != NULL)
        removeAllDocGlobals(p_target->m_pNext);
	if (p_target->m_pDbr != NULL)
	{
		p_target->m_pDoc->database()->removeReactor(p_target->m_pDbr);
		delete p_target->m_pDbr;
		p_target->m_pDbr = NULL;
	}
    delete p_target;
}

// Application was unloaded - delete everything associated with this
//
void AsdkAppDocGlobals::unload()
{
    acDocManager->removeReactor(m_pDocReactor);
    delete m_pDocReactor;
    removeAllDocGlobals(m_pHead);
    m_pHead = m_pData = NULL;
}

long &
AsdkAppDocGlobals::entityCount()
{
	return m_pData->m_EntAcc;
}

void
AsdkAppDocGlobals::incrementEntityCount()
{
	m_pData->m_EntAcc++;
}

void
AsdkAppDocGlobals::decrementEntityCount()
{
	m_pData->m_EntAcc--;
}

AsdkDbReactor *
AsdkAppDocGlobals::dbReactor()
{
	return m_pData->m_pDbr;
}

void
AsdkAppDocGlobals::setDbReactor(AsdkDbReactor *pDb)
{
	m_pData->m_pDbr = pDb;
}

// Adds a reactor to the database to monitor changes.
// This can be called multiple times without any ill
// effects because subsequent calls will be ignored.
//
void
watchDb()
{
    AsdkDbReactor *pDbr;
	if (gpAsdkAppDocGlobals->dbReactor() == NULL) 
	{
        pDbr = new AsdkDbReactor();
		gpAsdkAppDocGlobals->setDbReactor(pDbr);
        acdbHostApplicationServices()->workingDatabase()->addReactor(pDbr);
        acutPrintf(
            "  Added Database Reactor to "
            "acdbHostApplicationServices()->workingDatabase().\n");
	}
}


// Removes the database reactor
//
void
clearReactors()
{
	AsdkDbReactor *pDbr;
	if ((pDbr = gpAsdkAppDocGlobals->dbReactor()) != NULL)
	{
        acdbHostApplicationServices()->workingDatabase()->removeReactor(pDbr);
        delete pDbr;
        gpAsdkAppDocGlobals->setDbReactor(NULL);
    }
}

// Arx entry point function
//
AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg, void* appId)
{
    switch (msg) {
    case AcRx::kInitAppMsg:
        acrxUnlockApplication(appId);
		acrxRegisterAppMDIAware(appId);
		gpAsdkAppDocGlobals = new AsdkAppDocGlobals(curDoc());
		gpAsdkAppDocGlobals->setGlobals(curDoc());
        acedRegCmds->addCommand("ASDK_NOTIFY_TEST",
            "ASDK_WATCH",
            "WATCH",
            ACRX_CMD_TRANSPARENT,
            watchDb);

        acedRegCmds->addCommand("ASDK_NOTIFY_TEST",
            "ASDK_CLEAR",
            "CLEAR",
            ACRX_CMD_TRANSPARENT,
            clearReactors);
        break;
    case AcRx::kUnloadAppMsg:
		if (gpAsdkAppDocGlobals != NULL)
		{
			gpAsdkAppDocGlobals->unload();
			delete gpAsdkAppDocGlobals;
			gpAsdkAppDocGlobals = NULL;
		}
        acedRegCmds->removeGroup("ASDK_NOTIFY_TEST");
        break;
    }
    return AcRx::kRetOK;
}

// END CODE APPEARING IN SDK DOCUMENT.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美激情小说另类| 日韩片之四级片| 国产91高潮流白浆在线麻豆| 视频一区在线播放| 视频一区在线播放| 强制捆绑调教一区二区| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲成人手机在线| 视频一区视频二区在线观看| 视频一区欧美精品| 久久国产精品第一页| 国产中文字幕一区| 成人一级视频在线观看| 成人国产免费视频| 91国偷自产一区二区三区观看| 欧美日韩性生活| 日韩一二三区不卡| 中文字幕不卡三区| 亚洲v日本v欧美v久久精品| 亚洲一区二区三区精品在线| 亚洲国产精品尤物yw在线观看| 日韩国产欧美三级| 国产福利不卡视频| 日本福利一区二区| 91精品国产综合久久香蕉的特点| 日韩免费在线观看| 国产精品夫妻自拍| 亚洲一区中文在线| 国产一区二区调教| 成人av网在线| 欧美理论电影在线| 久久精品免费在线观看| 一区二区高清视频在线观看| 免费三级欧美电影| 不卡的电影网站| 日韩欧美在线综合网| 中文字幕一区二区视频| 经典一区二区三区| 欧美一a一片一级一片| 日韩欧美综合在线| 亚洲夂夂婷婷色拍ww47| 国产一二三精品| 在线精品观看国产| 日本一二三不卡| 日韩av电影免费观看高清完整版 | 91麻豆精品国产91久久久| 欧美不卡123| 亚洲女子a中天字幕| 狠狠色狠狠色综合日日91app| 91极品视觉盛宴| 亚洲国产精华液网站w| 免费观看一级欧美片| 色噜噜狠狠成人网p站| 国产色爱av资源综合区| 日韩高清一区二区| 在线一区二区三区| 国产精品美女久久久久久2018 | 中文字幕在线免费不卡| 蜜桃视频免费观看一区| 欧美性感一区二区三区| 中文字幕亚洲不卡| 粉嫩嫩av羞羞动漫久久久| 欧美zozo另类异族| 首页国产欧美日韩丝袜| 欧美日韩美少妇| 亚洲一区国产视频| 欧美在线视频你懂得| 亚洲欧美激情在线| 91一区二区在线观看| 中文字幕亚洲一区二区av在线| 激情综合五月天| 欧美精品一区男女天堂| 六月婷婷色综合| 精品久久久久久久久久久久久久久久久| 亚洲国产一区二区a毛片| 日本精品视频一区二区三区| 国产精品激情偷乱一区二区∴| 成人一二三区视频| 国产精品无人区| eeuss鲁片一区二区三区| 亚洲国产精品99久久久久久久久| 国产电影精品久久禁18| 国产日产亚洲精品系列| 福利一区二区在线| 1区2区3区精品视频| 日本精品视频一区二区| 亚洲第一久久影院| 欧美三级电影网| 日本中文字幕一区二区有限公司| 6080国产精品一区二区| 裸体一区二区三区| 国产欧美一区二区三区网站| 99re8在线精品视频免费播放| 一区二区三区在线观看网站| 欧美日本在线播放| 国产一区中文字幕| 国产精品嫩草久久久久| 欧洲中文字幕精品| 日韩黄色片在线观看| 欧美一区二区三区日韩视频| 久久99精品久久久久久动态图| 久久一区二区三区四区| 91视频一区二区三区| 亚洲一区二区精品久久av| 欧美一区二区在线免费播放| 国产成人在线免费| 亚洲国产欧美在线| 26uuu欧美| 欧美在线视频不卡| 国产一区在线观看视频| 亚洲欧美日韩国产手机在线| 欧美一区二区三区不卡| 99这里只有精品| 蜜桃视频一区二区三区 | 亚洲福利一二三区| 亚洲精品在线电影| 欧美午夜片在线看| 粉嫩绯色av一区二区在线观看| 亚洲国产精品视频| 国产欧美日韩在线| 日韩视频一区在线观看| 成人免费毛片app| 六月丁香综合在线视频| 亚洲精品高清视频在线观看| 精品国产伦理网| 欧美日韩二区三区| aa级大片欧美| 粉嫩av一区二区三区粉嫩| 日本欧美一区二区| 一区二区三区四区五区视频在线观看| 日韩亚洲欧美一区| 精品视频一区二区不卡| 99精品视频在线观看| 国产一区久久久| 欧美aaa在线| 舔着乳尖日韩一区| 亚洲另类在线视频| 国产精品亲子伦对白| 精品久久久久久久久久久院品网 | 国产精品色眯眯| 日韩久久精品一区| 在线播放欧美女士性生活| 99re这里只有精品6| 成人免费看黄yyy456| 国产麻豆视频一区| 久久精品二区亚洲w码| 日韩精品亚洲一区| 亚洲第一av色| 亚洲在线视频免费观看| 亚洲激情六月丁香| 亚洲激情网站免费观看| 一区二区三区四区在线播放| 国产精品激情偷乱一区二区∴| 欧美激情一区二区三区四区| 国产亲近乱来精品视频| 国产色一区二区| 国产精品女上位| 亚洲男人天堂一区| 一区二区三区日本| 亚洲成人av一区二区| 婷婷综合另类小说色区| 丝瓜av网站精品一区二区| 日韩va亚洲va欧美va久久| 日韩国产精品久久| 精彩视频一区二区| 成人综合激情网| 一本大道久久a久久综合| 91精品福利视频| 制服.丝袜.亚洲.中文.综合| 欧美一区二区三区视频免费播放 | 欧美性三三影院| 欧美另类高清zo欧美| 欧美tk丨vk视频| 国产精品精品国产色婷婷| 亚洲国产毛片aaaaa无费看| 蜜桃久久av一区| 国产在线精品一区二区夜色| 不卡av在线免费观看| 欧美性感一类影片在线播放| 91精品国产乱| 欧美激情一区二区三区四区| 亚洲伊人伊色伊影伊综合网| 久久国产精品第一页| 99久久免费国产| 欧美一区日韩一区| 中日韩av电影| 蜜桃视频在线一区| 99re8在线精品视频免费播放| 欧美精三区欧美精三区| 国产清纯白嫩初高生在线观看91 | 亚洲女同一区二区| 青青草原综合久久大伊人精品优势| 国产成人午夜99999| 欧美精品一二三区| 中文成人综合网| 久久9热精品视频| 欧美色爱综合网| 国产女人aaa级久久久级| 视频一区二区三区在线| 不卡的av网站|