⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exam13.cpp

📁 ARX/CAD二次开发
💻 CPP
字号:

#include "aced.h"
#include "dbsymtb.h"
#include "dbapserv.h"
#include "acgi.h"
#include "acedads.h"
#include "adslib.h"

static const Adesk::UInt16 kColorByBlock   = 0;
static const Adesk::UInt16 kRed            = 1;
static const Adesk::UInt16 kYellow         = 2;
static const Adesk::UInt16 kGreen          = 3;
static const Adesk::UInt16 kCyan           = 4;
static const Adesk::UInt16 kBlue           = 5;
static const Adesk::UInt16 kMagenta        = 6;
static const Adesk::UInt16 kWhite          = 7;
static const Adesk::UInt16 kColorByLayer   = 256;


class MyMesh: public AcDbEntity
{
public:
    ACRX_DECLARE_MEMBERS(MyMesh);
    MyMesh(); 
    ~MyMesh();
    virtual Adesk::Boolean  worldDraw(AcGiWorldDraw *);
    Acad::ErrorStatus       transformBy(const AcGeMatrix3d &);
};

ACRX_DXF_DEFINE_MEMBERS(MyMesh, AcDbEntity, 
AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent, 0,\
    EXAM13, exam13);


MyMesh::MyMesh()
{
}

MyMesh::~MyMesh()
{
}

Acad::ErrorStatus
MyMesh::transformBy(const AcGeMatrix3d &xfm)
{
    return Acad::eOk;
}

Adesk::Boolean
MyMesh::worldDraw(AcGiWorldDraw* pW)
{
    Adesk::UInt32 i, j, k;
	int result;
	int numRows;
	int numCols;

	result=acedGetInt("\nPlease Input Row Number: ", &numRows);
	if (result!=RTNORM)
	{
		acutPrintf("\nInput Failed!");
		return Adesk::kFalse;
	}
	if (numRows<=0||numRows>10)
	{
		acutPrintf("\nInvalid Input!");
		return  Adesk::kFalse;
	}

	result=acedGetInt("\nPlease Input Col Number: ", &numCols);
	if (result!=RTNORM)
	{
		acutPrintf("\nInput Failed!");
		return  Adesk::kFalse;
	}
	if (numCols<=0||numCols>10)
	{
		acutPrintf("\nInvalid Input!");
		return  Adesk::kFalse;
	}

    AcGePoint3d *pVerts =
        new AcGePoint3d[numRows * numCols];

    for (k = 0, i = 0; i < (Adesk::UInt32)numRows; i++) 
	{
        for (j = 0; j < (Adesk::UInt32)numCols; j++, k++) 
		{
            pVerts[k].x = (double)(j+100);
            pVerts[k].y = (double)(i+100);
            pVerts[k].z = 0.;
        }
    }

    AcGiEdgeData edgeInfo;
    Adesk::UInt32 numRowEdges = numRows * (numCols - 1);
    Adesk::UInt32 numColEdges = (numRows - 1) * numCols;
    Adesk::UInt32 numEdges = numRowEdges + numColEdges;
    short *pEdgeColorArray = new short[numEdges];
    
    for (i = 0; i < numEdges; i++) 
	{
        pEdgeColorArray[i] = (short)(i%7+1);
    }
	edgeInfo.setColors(pEdgeColorArray);

    Adesk::UInt32 numFaces = (numRows - 1) 
        * (numCols - 1);
    Adesk::UInt8 *pFaceVisArray =
        new Adesk::UInt8[numFaces];
    short *pFaceColorArray = new short[numFaces];
    AcGiFaceData faceInfo;
    faceInfo.setVisibility(pFaceVisArray);

    for (i = 0; i < numFaces; i++) 
	{
        pFaceVisArray[i] =
            i ? kAcGiVisible : kAcGiInvisible;
        pFaceColorArray[i] = (short)(i + 1);
    }
	faceInfo.setColors(pFaceColorArray);

    pW->subEntityTraits().setFillType(kAcGiFillAlways);
    pW->geometry().mesh(numRows, numCols, pVerts, NULL,
        &faceInfo);

    pW->subEntityTraits().setFillType(kAcGiFillNever);
    pW->geometry().mesh(numRows, numCols, pVerts,
        &edgeInfo);

    delete [] pVerts;
    delete [] pEdgeColorArray;
    delete [] pFaceColorArray;
    delete [] pFaceVisArray;
 
    return Adesk::kTrue;
}

static void
addMyMeshObject()
{
    Acad::ErrorStatus es;
    AcDbBlockTable   *pBlockTable;
    es = acdbHostApplicationServices()->workingDatabase()
        ->getSymbolTable(pBlockTable, AcDb::kForRead);
    if (es != Acad::eOk)
        return;

    AcDbBlockTableRecord *pBlock;
    es = pBlockTable->getAt(ACDB_MODEL_SPACE, pBlock,
        AcDb::kForWrite);
    if (es != Acad::eOk)
        return;

    AcDbObjectId  objId;
    MyMesh *pNewObj = new MyMesh;
    es = pBlock->appendAcDbEntity(objId, pNewObj);
    if (es != Acad::eOk) 
	{
        delete pNewObj;
        return;
    }

    es = pBlock->close();
    if (es != Acad::eOk)
        acrx_abort("\nUnable to close block table record");

    es = pBlockTable->close();
    if (es != Acad::eOk) 
        acrx_abort("\nUnable to close block table");

    es = pNewObj->close();
    if (es != Acad::eOk) 
        acrx_abort("\nUnable to close new entity");
}

static void
initApp()
{
    MyMesh::rxInit();
    acrxBuildClassHierarchy();

    acedRegCmds->addCommand("EXAM13",
                            "MAKEMESH",
                            "MAKEMESH",
                            ACRX_CMD_TRANSPARENT,
                            addMyMeshObject);
}

extern "C" AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg, void* appId) 
{
    switch (msg) {
	case AcRx::kInitAppMsg:
        acrxDynamicLinker->unlockApplication(appId);
		acrxDynamicLinker->registerAppMDIAware(appId);
        initApp();
	    break;
	case AcRx::kUnloadAppMsg:
	    acedRegCmds->removeGroup("EXAM13");
            deleteAcRxClass(MyMesh::desc());
    }
    return AcRx::kRetOK;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -