admin 发表于 2024-3-14 20:02:32

[每日一码] ARX命名一个UCS并设置为当前

static void asdkucsarx采用test(void)
{
      Acad::ErrorStatus es;
      AcDbUCSTableRecord *myUCS = new AcDbUCSTableRecord;

      //define your own ucs
      AcGePoint3dorigin采用point(0,0,0);
      AcGeVector3d UCSXaxis(0,1,0);
      AcGeVector3d UCSYaxis(1,0,0);

      myUCS->setOrigin(origin采用point);
      myUCS->setXAxis(UCSXaxis);
      myUCS->setYAxis(UCSYaxis);

      es=myUCS->setName( 采用T("MyUCS"));
      if (es != Acad::eOk)
      {
                acutPrintf(采用T("\nFailed to set name"));
                return;
      }

      AcDbObjectId UCSId;
      AcDbSymbolTable *pUCSTable;

      if (acdbHostApplicationServices()->workingDatabase()->
                getUCSTable(pUCSTable,AcDb::kForWrite)==Acad::eOk)
      {
                es=pUCSTable->add(UCSId,myUCS);
                es=pUCSTable->close();
                es= myUCS->close();
      }
      else
      {
                acutPrintf(采用T("\nFailed to get UCS table"));
                return;
      }

      //To set the current UCS, I accessed
      // the active AcDbViewportTableRecord
      // and used setUCS to set the UCS I created as current.
      AcDbViewportTable *pVT;
      es = acedVports2VportTableRecords();
      if (es != Acad::eOk)
      {
                acutPrintf(
                        采用T("\nFailed to load vport info into vport table records"));
                return;
      }

      es=acdbHostApplicationServices()->
                workingDatabase()->getViewportTable(pVT,AcDb::kForRead);
      if (es != Acad::eOk)
      {
                acutPrintf(采用T("\nFailed to get vport table"));
                pVT->close();
                return;
      }

      AcDbViewportTableIterator* pIter = NULL;

      es=pVT->newIterator(pIter);
      if (es != Acad::eOk)
      {
                acutPrintf(采用T("\nFailed to get vport table"));
                pVT->close();
                delete pIter;
                return;
      }

      for (pIter->start();!pIter->done();pIter->step())
      {

                AcDbViewportTableRecord* pRec;
                //it should be open for write mode
                es=pIter->getRecord(pRec,AcDb::kForWrite);
                if (es != Acad::eOk)
                {
                        acutPrintf(
                              采用T("\nFailed to get vport table record"));
                        pVT->close();
                        pRec->close();
                        delete pIter;
                        return;
                }

                TCHAR* name=NULL;
                es=pRec->getName(name);
                if (es != Acad::eOk)
                {
                        acutPrintf(
                              采用T("\nFailed to get name from vport table"));
                        pVT->close();
                        pRec->close();
                        delete pIter;
                        return;
                }

                if (采用tcsicmp(name,采用T("*ACTIVE"))==0)
                {
                        es=pRec->setUcs(UCSId);
                }

                es=pRec->close();   
      }
      es=acedVportTableRecords2Vports(); //force update

      es=pVT->close();
      delete pIter;
      return ;
}
页: [1]
查看完整版本: [每日一码] ARX命名一个UCS并设置为当前