arx绘制临时图像

有时候需要绘制临时图像,这些图像不能被选中等属性
在这里插入图片描述

static AcArray<AcDbEntity*> _markers;
static AcArray<int> viewportNumbers;

static void ClearTransientGraphics()
{
    AcGiTransientManager* pTransientManager = acgiGetTransientManager();
    int numOfMarkers = _markers.length();
    if (numOfMarkers > 0)
    {
        for (int index = 0; index < numOfMarkers; index++)
        {
            AcDbEntity *pMarker = _markers.at(index);
            pTransientManager->eraseTransient(pMarker, viewportNumbers);
            delete pMarker;
        }
        _markers.removeAll();
    }
}

static void CreateTransientGraphics(void)
{
    Acad::ErrorStatus es;
    AcDbDatabase *pDb =acdbHostApplicationServices()->workingDatabase();
    ads_point pickPnt;
    ads_name ent_name;
    int ret = acedEntSel(ACRX_T("\n Select a polyline\n"),ent_name,pickPnt);
    if(ret != RTNORM)
        return;
    AcDbObjectId plOid;
    es = acdbGetObjectId(plOid, ent_name);
    if (es != Acad::eOk)
        return;
    ads_point adsTestPoint;
    ret = acedGetPoint(NULL,ACRX_T("\n Select an internal point\n"),adsTestPoint);
    if(ret != RTNORM)
        return;
    AcGePoint3d testPoint = asPnt3d(adsTestPoint);
    ads_real rayAngle = 0.0;
    ret = acedGetAngle(asDblArray(testPoint),ACRX_T("Specify ray direction"),&rayAngle);
    if(ret != RTNORM)
        return;
    AcGePoint3d tempPoint = testPoint + AcGeVector3d::kXAxis;
    tempPoint = tempPoint.rotateBy(rayAngle,AcGeVector3d::kZAxis,testPoint);
    AcGeVector3d rayDir = tempPoint - testPoint;
    ClearTransientGraphics();
    AcDbTransactionManager* pTM = pDb->transactionManager();
    AcTransaction *pTransaction = pTM->startTransaction();
    AcDbObject *pCurveObj = NULL;
    es = pTransaction->getObject(pCurveObj,plOid,AcDb::kForRead);
    AcDbCurve *pCurve = AcDbCurve::cast(pCurveObj);
    AcGiTransientManager* pTransientManager = acgiGetTransientManager();
    viewportNumbers.removeAll();
    struct resbuf res;
    acedGetVar(_T("CVPORT"), &res);
    viewportNumbers.append(res.resval.rint);
    if(pCurve != NULL)
    {
        for (int cnt = 0; cnt < 2; cnt++)
        {
            if (cnt == 1)
                rayDir = rayDir.negate();
            AcDbRay ray;
            ray.setBasePoint(testPoint);
            ray.setUnitDir(rayDir);
            AcGePoint3dArray IntersectionPoints;
            es = pCurve->intersectWith(&ray,AcDb::kOnBothOperands,IntersectionPoints);
            if(es == Acad::eOk)
            {
                int numberOfInters = 0;
                numberOfInters = IntersectionPoints.length();
                for(int i=0; i < numberOfInters; ++i)
                {
                    AcGePoint3d pt = IntersectionPoints[i];
                    AcDbCircle *marker = new AcDbCircle(pt,AcGeVector3d::kZAxis,0.2);
                    AcCmColor color;
                    color.setColor(2);
                    marker->setColor(color);
                    _markers.append(marker);
                    pTransientManager->addTransient(marker,kAcGiDirectShortTerm,0,viewportNumbers);
                    acutPrintf(ACRX_T("\n Point : %lf %lf"),pt.x,pt.y);
                }
            }
        }
    }
    pTM->endTransaction();
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值