• ObjectArx学习笔记-创建多段线


    1、创建一个工具类CTool。

    Tool.h:

    static ads_real GetWidth();
    static int GetColorIndex();

    Tool.cpp
    ads_real CTool::GetWidth()
    {
    ads_real width = 0;
    if(acedGetReal(_T(" 输入线宽:"), &width)==RTNORM)
    {
    return width;
    }
    else
    {
    return 0;
    }
    }

    int CTool::GetColorIndex()
    {
    int colorIndex = 0;
    if(acedGetInt(_T("输入颜色索引值(0~256):"), &colorIndex) != RTNORM)
    {
    return 0;
    }

    while(colorIndex < 0 || colorIndex >256)
    {
    acedPrompt(_T("输入了错误的颜色索引值!"));
    if(acedGetInt(_T("输入颜色索引值(0~256)"), &colorIndex) != RTNORM)
    {
    return 0;
    }
    }

    return colorIndex;
    }

    2、添加命令AddPoly
    实现代码如下:

    static void qxzyAddPolyDynamicCommands_AddPoly(void)
    {
    // Add your code for command qxzyAddPolyDynamicCommands._AddPoly here
    int colorIndex = 0;
    ads_real width = 0;


    int index = 2;
    ads_point ptStart;

    if(acedGetPoint(NULL, _T(" 输入第一点:"), ptStart) != RTNORM)
    return;
    ads_point ptPrevious,ptCurrent;
    acdbPointSet(ptStart, ptPrevious);
    AcDbObjectId polyId;

    acedInitGet(NULL, _T("W C O"));
    int rc = acedGetPoint(ptPrevious,
    _T(" 输入下一点[宽度(W)/颜色(C)]<完成(O)>"), ptCurrent);
    while(rc == RTNORM || rc == RTKWORD)
    {
    if(rc == RTKWORD)
    {
    ACHAR kword[20];
    if(acedGetInput(kword)!=RTNORM)
    return;
    if(strcmp((LPSTR)(LPCTSTR)kword,"W")==0)
    {
    width = CTool::GetWidth();
    }
    else if(strcmp((LPSTR)(LPCTSTR)kword,"C")==0)
    {
    colorIndex = CTool::GetColorIndex();
    }
    else if(strcmp((LPSTR)(LPCTSTR)kword, "O")==0)
    {
    return;
    }
    else
    {
    acutPrintf(_T(" 无效的关键字"));
    }
    }
    else if(rc == RTNORM)
    {
    if(index == 2)
    {
    AcDbPolyline *pPoly= new AcDbPolyline(2);
    AcGePoint2d ptGe1,ptGe2;
    ptGe1[X]=ptPrevious[X];
    ptGe1[Y]=ptPrevious[Y];
    ptGe2[X]=ptCurrent[X];
    ptGe2[Y]=ptCurrent[Y];
    pPoly->addVertexAt(0, ptGe1);
    pPoly->addVertexAt(1, ptGe2);

    pPoly->setConstantWidth(width);
    pPoly->setColorIndex(colorIndex);

    AcDbBlockTable *pBlkTbl;
    acdbHostApplicationServices()->workingDatabase()
    ->getSymbolTable(pBlkTbl, AcDb::kForRead);

    AcDbBlockTableRecord *pBlkTblRcd;
    pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd, AcDb::kForWrite);

    pBlkTblRcd->appendAcDbEntity(polyId, pPoly);

    pBlkTblRcd->close();
    pBlkTbl->close();
    pPoly->close();

    }
    else if(index>2)
    {
    AcDbPolyline *pPoly;
    acdbOpenObject(pPoly, polyId, AcDb::kForWrite);

    AcGePoint2d ptGe;
    ptGe[X]=ptCurrent[X];
    ptGe[Y]=ptCurrent[Y];

    pPoly->addVertexAt(index-1,ptGe);
    pPoly->setConstantWidth(width);
    pPoly->setColorIndex(colorIndex);

    pPoly->close();
    }
    index++;

    acdbPointSet(ptCurrent,ptPrevious);
    }

    acedInitGet(NULL, _T("W C O"));
    rc = acedGetPoint(ptPrevious,
    _T(" 输入下一点[宽度(W)/颜色(C)]<完成(O)>"), ptCurrent);
    }


    }

  • 相关阅读:
    [Windows Azure] Windows Azure Web Sites, Cloud Services, and VMs: When to use which?
    [Windows Azure] Windows Azure Execution Models
    [Windows Azure] Load Testing in Windows Azure
    [Windows Azure]The Autoscaling Application Block
    [Windows Azure]Windows Azure Identity
    [Windows Azure] Data Management and Business Analytics
    alienware Win8 系统安装
    Navisworks Addin 插件集成
    Navisworks 2014 Api 简单的使用
    Winform简单调用WebApi
  • 原文地址:https://www.cnblogs.com/mjgw/p/12392678.html
Copyright © 2020-2023  润新知