frtfff 发表于 2011-10-7 22:39:31

UCS&WCS

现在,我可以创建一个新的UCS ang,通过代码将此ucs设置为cad中的当前ucs,但是
1。 我无法通过代码 2 将 ucs 转移到 wcs
。 我怎么能通过代码删除这个ucs。
这里是创建一个新的ucs,并将这个ucs设置为当前的ucs
//
void createNewUcs(AcGePoint3d ptOri,AcGeVector3d vecXAxis,AcGeVector3d vecYAxis,CString ucsName)
{
AcDbUCSTable *pUcsTbl;
acdbHostApplicationServices()->workingDatabase()->
getUCSTable(pUcsTbl,AcDb::kForWrite);

AcDbUCSTableRecord *pUcsTblRcd = new AcDbUCSTableRecord();
//
Acad::ErrorStatus es = pUcsTblRcd->setName(ucsName);
if (es != Acad::eOk)
{
delete pUcsTblRcd;
   pUcsTbl->close();
返回;
}
pUcsTblRcd->setOrigin(ptOri);
pUcsTblRcd->setXAxis(vecXAxis);
pUcsTblRcd->setYAxis(vecYAxis);
//
es = pUcsTbl->add(pUcsTblRcd);
if (es != Acad::eOk)
{
delete pUcsTblRcd;
   pUcsTbl->close();
返回;
}
//
pUcsTblRcd->close();
pUcsTbl->close();
}//
void setCurrentUcs(CString ucsName)
{
AcDbUCSTable *pUcsTbl;
acdbHostApplicationServices()->workingDatabase()->
getUCSTable(pUcsTbl,AcDb::kForWrite);

if (!pUcsTbl->has(ucsName))
{
pUcsTbl->close();
   返回;
}
AcDbUCSTableRecord *pUcsTblRcd;
pUcsTbl->getAt(ucsName,pUcsTblRcd,AcDb::kForRead);

AcGeMatrix3d mat;
AcGeVector3d vecXAxis,vecYAxis,vecZAxis;
vecXAxis = pUcsTblRcd->xAxis();
vecYAxis = pUcsTblRcd->yAxis();
vecZAxis = vecXAxis.crossProduct(vecYAxis);
mat.setCoordSystem(pUcsTblRcd->origin(),vecXAxis,vecYAxis,vecZAxis);
//
pUcsTblRcd->close();
pUcsTbl->close();
//
acedSetCurrentUCS(mat);
}//
**** Hidden Message *****

frtfff 发表于 2011-10-7 22:45:52

友好的提示:如果将代码括在代码标记 [代码] 中...[/代码]它更容易在眼睛上:
void createNewUcs(AcGePoint3d ptOri,AcGeVector3d vecXAxis,AcGeVector3d vecYAxis,CString ucsName)
{
        AcDbUCSTable *pUcsTbl;
        acdbHostApplicationServices()->workingDatabase()->
                getUCSTable(pUcsTbl,AcDb::kForWrite);
        //
        AcDbUCSTableRecord *pUcsTblRcd = new AcDbUCSTableRecord();
        //
        Acad::ErrorStatus es = pUcsTblRcd->setName(ucsName);
        if (es != Acad::eOk)
        {
                delete pUcsTblRcd;
                pUcsTbl->close();
                return;
        }
        pUcsTblRcd->setOrigin(ptOri);
        pUcsTblRcd->setXAxis(vecXAxis);
        pUcsTblRcd->setYAxis(vecYAxis);
        //
        es = pUcsTbl->add(pUcsTblRcd);
        if (es != Acad::eOk)
        {
                delete pUcsTblRcd;
                pUcsTbl->close();
                return;
        }
        //
        pUcsTblRcd->close();
        pUcsTbl->close();
}
void setCurrentUcs(CString ucsName)
{
        AcDbUCSTable *pUcsTbl;
        acdbHostApplicationServices()->workingDatabase()->
                getUCSTable(pUcsTbl,AcDb::kForWrite);
        //
        if (!pUcsTbl->has(ucsName))
        {
                pUcsTbl->close();
                return;
        }
        AcDbUCSTableRecord *pUcsTblRcd;
        pUcsTbl->getAt(ucsName,pUcsTblRcd,AcDb::kForRead);
        //
        AcGeMatrix3d mat;
        AcGeVector3d vecXAxis,vecYAxis,vecZAxis;
        vecXAxis = pUcsTblRcd->xAxis();
        vecYAxis = pUcsTblRcd->yAxis();
        vecZAxis = vecXAxis.crossProduct(vecYAxis);
        mat.setCoordSystem(pUcsTblRcd->origin(),vecXAxis,vecYAxis,vecZAxis);
        //
        pUcsTblRcd->close();
        pUcsTbl->close();
        //
        acedSetCurrentUCS(mat);
}

frtfff 发表于 2011-10-9 22:23:54

我已经解决了如何从ucs列表中删除现有ucs。但不能转移到wcs。

highflyingbird 发表于 2011-10-9 22:30:08


void deleteUcs()
{
//
//
}

frtfff 发表于 2011-10-21 01:08:20

像这样:
AcGeMatrix3d mat;
mat.setToIdentity();
acedSetCurrentUCS(mat);

frtfff 发表于 2011-10-21 06:20:12

谢谢/
页: [1]
查看完整版本: UCS&WCS