找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 454|回复: 5

[ARX程序]:帮看看入门级(vc++和arx)的程序,帮忙大改一下

[复制链接]
发表于 2003-8-22 09:51:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
帮看看入门级(vc++和arx)的程序,帮忙大改一下:(arx for 2004和vc7。autocad2004
//include files
#include "bridge.h"


//////////////////////////////
//setup beeline object
/////////////////////////////
Acad::ErrorStatus
createNewLine(double startPointX,double startPointY,double startPointZ,
                          double endPointX,double endPointY,double endPointZ,AcDbObjectId layer)
{
        AcDbObjectId lineId;
        //define beeline's start point and end point
        AcGePoint3d startPoint(startPointX,startPointY,startPointZ);
    AcGePoint3d endPoint(endPointX,endPointY,endPointZ);
        //initialize beeline object
        AcDbLine *pLine=new AcDbLine(startPoint,endPoint);
        if(pLine==NULL)
        {
                return Acad::eOutOfMemory;
        }
        //open block table
        AcDbBlockTable *pBlockTable;
        Acad::ErrorStatus es=acdbHostApplicationServices()->workingDatabase()
                ->getSymbolTable(pBlockTable,AcDb::kForRead);
        if(es!=Acad::eOk)
        {
                delete pLine;
                return es;
        }
        //open block table record
        AcDbBlockTableRecord *pBlockTableRecord;
        es=pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);
        if(es!=Acad::eOk)
        {
                Acad::ErrorStatus es2=pBlockTable->close();
                if(es2!=Acad::eOk)
                {
                        acrx_abort("\nClose block table fault,error: %d",acadErrorStatusText(es2));
                }
                delete pLine;
                return es;
        }
        //close block table
        es=pBlockTable->close();
        if(es!=Acad::eOk)
        {
                acrx_abort("\nClose block table fault,error: %d",acadErrorStatusText(es));
        }
        //append entity to model space
        es=pBlockTableRecord->appendAcDbEntity(lineId,pLine);
        if(es!=Acad::eOk)
        {
                Acad::ErrorStatus es2=pBlockTableRecord->close();
                if(es2!=Acad::eOk)
                {
                        acrx_abort("\nClose block table record  in model space fault,error: %d",
                                acadErrorStatusText(es2));
                }
                delete pLine;
                return es;
        }       
        pLine->setLayer(layer,Adesk::kTrue);
        //close block talbe record
        es=pBlockTableRecord->close();
        if(es!=Acad::eOk)
        {
                acrx_abort("\nClose block table record  in model space fault,error: %d",
                        acadErrorStatusText(es));
        }
        //close beeline object
        es=pLine->close();
        if(es!=Acad::eOk)
        {
                acrx_abort("\nClose beeline object fault,error: %d",
                        acadErrorStatusText(es));
        }
        //return state code
        return es;
}


//////////////////////////
//setup circle object
//////////////////////////
Acad::ErrorStatus
createNewCircle(double centerX,double centerY,double centerZ,double radius,AcDbObjectId layer)
{
        AcGePoint3d center(centerX,centerY,centerZ);
        AcGeVector3d normal(0.0,0.0,1.0);

        AcDbCircle *pCirc=new AcDbCircle(center,normal,radius);
        if(pCirc==NULL)
        {
                return Acad::eOutOfMemory;
        }

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

        AcDbBlockTableRecord *pBlockTableRecord;
        es=pBlockTable->getAt(ACDB_MODEL_SPACE,
                pBlockTableRecord,AcDb::kForWrite);
        if(es!=Acad::eOk)
        {
                Acad::ErrorStatus es2=pBlockTable->close();
                if(es2!=Acad::eOk)
                {
                        acrx_abort("\n Close BlockTabe fault,error msg: %d",
                                acadErrorStatusText(es2));
                }
                delete pCirc;
                return es;
        }

        es=pBlockTable->close();
        if(es!=Acad::eOk)
        {
                acrx_abort("\n Close BlockTable fault ,error: %d",
                        acadErrorStatusText(es));
        }

        AcDbObjectId circleId;
        pCirc->setLayer(layer,Adesk::kTrue);
        es=pBlockTableRecord->appendAcDbEntity(circleId,pCirc);
        if(es!=Acad::eOk)
        {
                Acad::ErrorStatus es2=pBlockTableRecord->close();
                if(es!=Acad::eOk)
                {
                        acrx_abort("\n Close BlockTableRecord fault ,error: %d",
                        acadErrorStatusText(es2));
                }
                delete pCirc;
                return es;
        }

        pBlockTableRecord->close();
        if(es!=Acad::eOk)
        {
                acrx_abort("\n Close BlockTableRecord fault ,error: %d",
                        acadErrorStatusText(es));
        }

        es=pCirc->close();
        if(es!=Acad::eOk)
        {
                acrx_abort("\n Close pCirc entity fault ,error: %d",
                        acadErrorStatusText(es));
        }
        return es;
}


//////////////////////////
//set up new layers
//////////////////////////
Acad::ErrorStatus createNewLayer(char* layername,int color,AcDbObjectId& layerObjId)
{
        layerObjId=AcDbObjectId::kNull;
        AcDbLayerTableRecord * pLayerTableRecord=new AcDbLayerTableRecord;
        if(pLayerTableRecord==NULL)
        {
                return Acad::eOutOfMemory;
        }
        Acad::ErrorStatus es=pLayerTableRecord->setName(layername);
        if(es!=Acad::eOk)
        {
                delete pLayerTableRecord;
                return es;
        }
        AcCmColor acCmColor;
        acCmColor.setColorIndex(color);
        pLayerTableRecord->setColor(acCmColor);
        //open layer table
        AcDbLayerTable *pLayerTable;
        es=acdbHostApplicationServices()->workingDatabase()
                ->getSymbolTable(pLayerTable,AcDb::kForWrite);
        if(es!=Acad::eOk)
        {
                delete pLayerTableRecord;
                return es;
        }
        //open linetype table
        AcDbLinetypeTable *pLinetypeTbl;
        es=acdbHostApplicationServices()->workingDatabase()
                ->getSymbolTable(pLinetypeTbl,AcDb::kForRead);
        if(es!=Acad::eOk)
        {
                delete pLayerTableRecord;
                es=pLayerTable->close();
                if(es!=Acad::eOk)
                {
                        acrx_abort("\nClose layer table fault,error: %d",
                                acadErrorStatusText(es));
                }
                return es;
        }
        //get "CONTINUOUS" linetype object's ID
        AcDbObjectId ltypeObjId;
        es=pLinetypeTbl->getAt("CONTINUOUS",ltypeObjId);
        if(es!=Acad::eOk)
        {
                delete pLayerTableRecord;
                es=pLayerTable->close();
                if(es!=Acad::eOk)
                {
                        acrx_abort("\nClose layer table fault,error: %d",
                                acadErrorStatusText(es));
                }
                return es;
        }
        //setup linetype for new layer
        pLayerTableRecord->setLinetypeObjectId(ltypeObjId);
        //
        es=pLayerTable->add(layerObjId,pLayerTableRecord);
        if(es!=Acad::eOk)
        {
                Acad::ErrorStatus es2=pLayerTable->close();
                if(es2!=Acad::eOk)
                {
                        acrx_abort("\nClose layer table fault,error: %d",
                                acadErrorStatusText(es2));
                }
                delete pLayerTableRecord;
                return es;
        }
        //close layer table
        es=pLayerTable->close();
        if(es!=Acad::eOk)
        {
                acrx_abort("\nClose layer table fault,error: %d",
                        acadErrorStatusText(es));
                return es;
        }
        //close layer table object
        es=pLayerTableRecord->close();
        if(es!=Acad::eOk)
        {
                acrx_abort("\nClose layer table fault,error: %d",
                        acadErrorStatusText(es));
                return es;
        }
        //return state code
        return es;
}


///////////////////////////////
//create pin and joint point
///////////////////////////////
Acad::ErrorStatus
createPinJointPoint(double centerX,double centerY,double centerZ,AcDbObjectId layer)
{
        double compaValue;
        double radius;
        double upLeftPointX;
        double upLeftPointY;
        double upLeftPointZ;
        double upRightPointX;
        double upRightPointY;
        double upRightPointZ;
        double downLeftPointX;
        double downLeftPointY;
        double downLeftPointZ;
        double downRightPointX;
        double downRightPointY;
        double downRightPointZ;

        radius=10.0;
        compaValue=radius/sqrt(2.0);

        upLeftPointX=centerX-compaValue;
        upLeftPointY=centerY+compaValue;
        upLeftPointZ=centerZ;

        upRightPointX=centerX+compaValue;
        upRightPointY=centerY+compaValue;
        upRightPointZ=centerZ;
       
        downLeftPointX=centerX-compaValue;
        downLeftPointY=centerY-compaValue;
        downLeftPointZ=centerZ;

        downRightPointX=centerX+compaValue;
        downRightPointY=centerY-compaValue;
        downRightPointZ=centerZ;
       
        Acad::ErrorStatus es=createNewCircle(centerX,centerY,centerZ,radius,layer);
        if(es!=Acad::eOk)
        {
                acutPrintf("\nCan't create a line,error: %s",
                        acadErrorStatusText(es));
                return es;
        }
        es=createNewLine(upLeftPointX,upLeftPointY,upLeftPointZ,
                downRightPointX,downRightPointY,downRightPointZ,layer);
        if(es!=Acad::eOk)
        {
                acutPrintf("\nCan't create a line,error: %s",
                        acadErrorStatusText(es));
                return es;
        }
        es=createNewLine(downLeftPointX,downLeftPointY,downLeftPointZ,
                upRightPointX,upRightPointY,upRightPointZ,layer);
        if(es!=Acad::eOk)
        {
                acutPrintf("\nCan't create a line,error: %s",
                        acadErrorStatusText(es));
                return es;
        }
        return es;
}


//////////////////////
//create bolt point
//////////////////////
Acad::ErrorStatus  
createBoltPoint(double centerX,double centerY,double centerZ,AcDbObjectId layer)
{
        double compaValue;
        double upLeftPointX;
        double upLeftPointY;
        double upLeftPointZ;
        double upRightPointX;
        double upRightPointY;
        double upRightPointZ;
        double downLeftPointX;
        double downLeftPointY;
        double downLeftPointZ;
        double downRightPointX;
        double downRightPointY;
        double downRightPointZ;

        compaValue=10.0;

        upLeftPointX=centerX-compaValue;
        upLeftPointY=centerY+compaValue;
        upLeftPointZ=centerZ;

        upRightPointX=centerX+compaValue;
        upRightPointY=centerY+compaValue;
        upRightPointZ=centerZ;
       
        downLeftPointX=centerX-compaValue;
        downLeftPointY=centerY-compaValue;
        downLeftPointZ=centerZ;

        downRightPointX=centerX+compaValue;
        downRightPointY=centerY-compaValue;
        downRightPointZ=centerZ;
       
        Acad::ErrorStatus es=createNewLine(upLeftPointX,upLeftPointY,upLeftPointZ,
                downRightPointX,downRightPointY,downRightPointZ,layer);
        if(es!=Acad::eOk)
        {
                acutPrintf("\nCan't create a line,error: %s",
                        acadErrorStatusText(es));
                return es;
        }
        es=createNewLine(downLeftPointX,downLeftPointY,downLeftPointZ,
                upRightPointX,upRightPointY,upRightPointZ,layer);
        if(es!=Acad::eOk)
        {
                acutPrintf("\nCan't create a line,error: %s",
                        acadErrorStatusText(es));
                return es;
        }       
        es=createNewLine(upLeftPointX,upLeftPointY,upLeftPointZ,
                upRightPointX,upRightPointY,upRightPointZ,layer);
        if(es!=Acad::eOk)
        {
                acutPrintf("\nCan't create a line,error: %s",
                        acadErrorStatusText(es));
                return es;
        }
        es=createNewLine(upRightPointX,upRightPointY,upRightPointZ,
                downRightPointX,downRightPointY,downRightPointZ,layer);
        if(es!=Acad::eOk)
        {
                acutPrintf("\nCan't create a line,error: %s",
                        acadErrorStatusText(es));
                return es;
        }
        es=createNewLine(downRightPointX,downRightPointY,downRightPointZ,
                downLeftPointX,downLeftPointY,downLeftPointZ,layer);
        if(es!=Acad::eOk)
        {
                acutPrintf("\nCan't create a line,error: %s",
                        acadErrorStatusText(es));
                return es;
        }
        es=createNewLine(downLeftPointX,downLeftPointY,downLeftPointZ,
                upLeftPointX,upLeftPointY,upLeftPointZ,layer);
        if(es!=Acad::eOk)
        {
                acutPrintf("\nCan't create a line,error: %s",
                        acadErrorStatusText(es));
                return es;
        }
        return es;
}


/////////////////////////////////////
//read dwg file(Drawing template)
/////////////////////////////////////
void readDwgFile()
{
        AcDbDatabase* pCurDb;
        AcDbDatabase* pDb = new AcDbDatabase(Adesk::kFalse);
        pDb->readDwgFile("A1.dwg",_SH_DENYRW);
        pCurDb = acdbHostApplicationServices()->workingDatabase();

        if(pCurDb->insert(AcGeMatrix3d::kIdentity,pDb) != Acad::eOk)
        {
        delete pDb;
        }

        delete pDb;
}



/////////////////////////////
//read csv file and plot
/////////////////////////////
void plotFromCsvFile()
{
        FILE *fp;
        char *c;
        char temp[1000];
        char spanName[40];
        char lastLine[1000];
        char tempLine[1][18];
        char tempLineData[20][18];
        static char comma[]={","};
        double lineTwoData[1];
        double lineXyzData[10][56];
        unsigned i;
        unsigned j;
        unsigned k;
        unsigned row;

        row=1;
        for(i=0;i<1;i++)
        {
                lineTwoData=0;
        }
        for(i=0;i<10;i++)
        {
                for(j=0;j<56;j++)
                {
                        lineXyzData[j]=0;
                }
        }
               
        fp = fopen("coordinatesCsv.csv","r");
        if(fp!=NULL)
        {
                do
                {
                        c = fgets(temp,1000,fp);
                        if(c!=NULL)
                        {
                                if(row==1)
                                {       
                                        for(i=0;i<=strlen(spanName);i++)
                                        {
                                                if(temp!=comma[0])
                                                {
                                                        spanName=temp;
                                                }
//                                                else
//                                                {
//                                                        acutPrintf("\n Can't find the span name.");
//                                                }
                                        }
                                        row++;
                                }
                                else if(row==2)
                                {
                                        i=0;
                                        j=0;
                                        k=0;

                                        do
                                        {
                                                if(temp!=comma[0])
                                                {
                                                        tempLine[k][j]=temp;
                                                        j++;
                                                        i++;
                                                }
                                                else
                                                {
                                                        i++;
                                                        j=0;
                                                        k++;
                                                }
                                        } while(temp!=NULL);
                                        for(i=0;i<2;i++)
                                        {
                                                lineTwoData=atof(tempLine);
                                        }
                                        row++;
                                }
                                else if(isalpha(temp[0])!=0)
                                {
                                        for(i=0;i<=strlen(lastLine);i++)
                                        {
                                                if(temp!=comma[0])
                                                {
                                                        lastLine=temp;
                                                }
//                                                else
//                                                {
//                                                        acutPrintf("\n There is not temp .");
//                                                }
                                        }
                                }       
                                else
                                {
                                        i=0;
                                        j=0;
                                        k=0;
                                        char comma[]={","};

                                        do
                                        {
                                                if(temp!=comma[0])
                                                {
                                                        tempLineData[k][j]=temp;
                                                        j++;
                                                        i++;
                                                }
                                                else
                                                {
                                                        i++;
                                                        j=0;
                                                        k++;
                                                }
                                        } while(temp!=NULL);
                                        for(j=0;j<56;j++)
                                        {
                                                // change char string to double data
                                                // scale: 1:125
                                                lineXyzData[row-3][j]=atof(tempLineData[j]);
                                        }
                                        row++;
                                }
                        }       
                        for(i=0;i<1000;i++)
                        {
                                temp=0;
                        }
                }while (c != NULL);          /*repeat nutil NULL*/
        fclose(fp);
        }
        else
        acutPrintf("File not found!\n");
       
        /////////////////////////////////////
        //plot the dwg file
        /////////////////////////////////////
        double sin;
        double cos;
        double increment;
        double incrementx;
        double incrementy;
        double incrementz;
        double x;
        double y;
        double z;
        double endOfTheTargetJoint[100][6];
        double endOfTheActualJoint[100][6];
       
        incrementz=0;
        j=0;
        k=0;

        AcDbObjectId actualLineLayerId;
        Acad::ErrorStatus es=createNewLayer("actual lines",1,actualLineLayerId);
        if(es!=Acad::eOk)
        {
                acutPrintf("\nCan't create actual lines layer.Error: %s",
                        acadErrorStatusText(es));
        }
        else
        {
                acutPrintf("\nCreate actual lines layer successful!");
        }
        AcDbObjectId actualPointLayerId;
        es=createNewLayer("actual points",1,actualPointLayerId);
        if(es!=Acad::eOk)
        {
                acutPrintf("\nCan't create actual points layer.Error: %s",
                        acadErrorStatusText(es));
        }
        else
        {
                acutPrintf("\nCreate actual points layer successful!");
        }
        AcDbObjectId targetLineLayerId;
        es=createNewLayer("target lines",5,targetLineLayerId);
        if(es!=Acad::eOk)
        {
                acutPrintf("\nCan't create target lines layer.Error: %s",
                        acadErrorStatusText(es));
        }
        else
        {
                acutPrintf("\nCreate target lines layer successful!");
        }
        AcDbObjectId targetPointLayerId;
        es=createNewLayer("target points",5,targetPointLayerId);
        if(es!=Acad::eOk)
        {
                acutPrintf("\nCan't create target points layer.Error: %s",
                        acadErrorStatusText(es));
        }
        else
        {
                acutPrintf("\nCreate target points layer successful!");
        }

        for(i=0;i<(row-3);i++)
        {
                //plot target joint  point
                createPinJointPoint(lineXyzData[2],lineXyzData[3],lineXyzData[4],targetPointLayerId);
                createPinJointPoint(lineXyzData[5],lineXyzData[6],lineXyzData[7],targetPointLayerId);
                createPinJointPoint(lineXyzData[8],lineXyzData[9],lineXyzData[10],targetPointLayerId);
                createBoltPoint(lineXyzData[11],lineXyzData[12],lineXyzData[13],targetPointLayerId);
                createBoltPoint(lineXyzData[14],lineXyzData[15],lineXyzData[16],targetPointLayerId);
                createBoltPoint(lineXyzData[17],lineXyzData[18],lineXyzData[19],targetPointLayerId);
                createBoltPoint(lineXyzData[20],lineXyzData[21],lineXyzData[22],targetPointLayerId);
                createPinJointPoint(lineXyzData[23],lineXyzData[24],lineXyzData[25],targetPointLayerId);
                createPinJointPoint(lineXyzData[26],lineXyzData[27],lineXyzData[28],targetPointLayerId);
                //plot the target joint line
                sin=(lineXyzData[3]-lineXyzData[9])/(sqrt(pow((lineXyzData[2]-lineXyzData[8]),2)
                        +pow((lineXyzData[3]-lineXyzData[9]),2)));
                cos=(lineXyzData[2]-lineXyzData[8])/(sqrt(pow((lineXyzData[2]-lineXyzData[8]),2)
                        +pow((lineXyzData[3]-lineXyzData[9]),2)));
                increment=(lineXyzData[1]-(sqrt(pow((lineXyzData[2]-lineXyzData[8]),2)
                        +pow((lineXyzData[3]-lineXyzData[9]),2))))/2;
                if(cos==0)
                {
                        incrementx=0;
                }
                else
                {
                        incrementx=increment/cos;
                }
                if(sin==0)
                {
                        incrementy=0;
                }
                else
                {
                        incrementy=increment/sin;
                }
                endOfTheTargetJoint[j][0]=lineXyzData[2]+incrementx;
                endOfTheTargetJoint[j][1]=lineXyzData[3]+incrementy;
                endOfTheTargetJoint[j][2]=lineXyzData[4]+incrementz;
                endOfTheTargetJoint[j][3]=lineXyzData[8]-incrementx;
                endOfTheTargetJoint[j][4]=lineXyzData[9]-incrementy;
                endOfTheTargetJoint[j][5]=lineXyzData[10]-incrementz;
                createNewLine(endOfTheTargetJoint[j][0],endOfTheTargetJoint[j][1],endOfTheTargetJoint[j][2],
                        endOfTheTargetJoint[j][3],endOfTheTargetJoint[j][4],endOfTheTargetJoint[j][5],targetLineLayerId);
                j++;
                //plot the actual joint point
                createPinJointPoint(lineXyzData[29],lineXyzData[30],lineXyzData[31],actualPointLayerId);
                createPinJointPoint(lineXyzData[32],lineXyzData[33],lineXyzData[34],actualPointLayerId);
                createPinJointPoint(lineXyzData[35],lineXyzData[36],lineXyzData[37],actualPointLayerId);
                createBoltPoint(lineXyzData[38],lineXyzData[39],lineXyzData[40],actualPointLayerId);
                createBoltPoint(lineXyzData[41],lineXyzData[42],lineXyzData[43],actualPointLayerId);
                createBoltPoint(lineXyzData[44],lineXyzData[45],lineXyzData[46],actualPointLayerId);
                createBoltPoint(lineXyzData[47],lineXyzData[48],lineXyzData[49],actualPointLayerId);
                createPinJointPoint(lineXyzData[50],lineXyzData[51],lineXyzData[52],actualPointLayerId);
                createPinJointPoint(lineXyzData[53],lineXyzData[54],lineXyzData[55],actualPointLayerId);
                //plot the actual joint line
                sin=(lineXyzData[30]-lineXyzData[36])/(sqrt(pow((lineXyzData[29]-lineXyzData[35]),2)
                        +pow((lineXyzData[30]-lineXyzData[36]),2)));
                cos=(lineXyzData[29]-lineXyzData[35])/(sqrt(pow((lineXyzData[29]-lineXyzData[35]),2)
                        +pow((lineXyzData[30]-lineXyzData[36]),2)));
                increment=(lineXyzData[1]-(sqrt(pow((lineXyzData[29]-lineXyzData[35]),2)
                        +pow((lineXyzData[30]-lineXyzData[36]),2))))/2;
                if(cos==0)
                {
                        incrementx=0;
                }
                else
                {
                        incrementx=increment/cos;
                }
                if(sin==0)
                {
                        incrementy=0;
                }
                else
                {
                        incrementy=increment/sin;
                }
                endOfTheActualJoint[k][0]=lineXyzData[29]+incrementx;
                endOfTheActualJoint[k][1]=lineXyzData[30]+incrementy;
                endOfTheActualJoint[k][2]=lineXyzData[31]+incrementz;
                endOfTheActualJoint[k][3]=lineXyzData[35]-incrementx;
                endOfTheActualJoint[k][4]=lineXyzData[36]-incrementy;
                endOfTheActualJoint[k][5]=lineXyzData[37]-incrementz;
                createNewLine(endOfTheActualJoint[k][0],endOfTheActualJoint[k][1],endOfTheActualJoint[k][2],
                        endOfTheActualJoint[k][3],endOfTheActualJoint[k][4],endOfTheActualJoint[k][5],actualLineLayerId);
                k++;   
        }
        //Plot straight lines to join the ends of the joint line
        //Plot straight lines to join the ends of the target joint line
        for(i=0;i<(j-1);i++)
        {
                x=endOfTheTargetJoint[0];
                y=endOfTheTargetJoint[1];
                z=endOfTheTargetJoint[2];
                i++;
                createNewLine(x,y,z,endOfTheTargetJoint[0],endOfTheTargetJoint[1],
                        endOfTheTargetJoint[2],targetLineLayerId);
                i--;
                x=endOfTheTargetJoint[3];
                y=endOfTheTargetJoint[4];
                z=endOfTheTargetJoint[5];
                i++;
                createNewLine(x,y,z,endOfTheTargetJoint[3],endOfTheTargetJoint[4],
                        endOfTheTargetJoint[5],targetLineLayerId);
                i--;
        }
        //Plot straight lines to join the ends of the actual joint line
        for(i=0;i<(j-1);i++)
        {
                x=endOfTheActualJoint[0];
                y=endOfTheActualJoint[1];
                z=endOfTheActualJoint[2];
                i++;
                createNewLine(x,y,z,endOfTheActualJoint[0],endOfTheActualJoint[1],
                        endOfTheActualJoint[2],actualLineLayerId);
                i--;
                x=endOfTheActualJoint[3];
                y=endOfTheActualJoint[4];
                z=endOfTheActualJoint[5];
                i++;
                createNewLine(x,y,z,endOfTheActualJoint[3],endOfTheActualJoint[4],
                        endOfTheActualJoint[5],actualLineLayerId);
                i--;
        }
        //Plot straight lines to join the joint center points
        //Plot straight lines to join the target joint center points
        for(i=0;i<(row-4);i++)
        {
                x=lineXyzData[5];
                y=lineXyzData[6];
                z=lineXyzData[7];
                i++;
                createNewLine(x,y,z,lineXyzData[5],lineXyzData[6],
                        lineXyzData[7],targetLineLayerId);
                i--;
        }
        //Plot straight lines to join the actual joint center points
        for(i=0;i<(row-4);i++)
        {
                x=lineXyzData[32];
                y=lineXyzData[33];
                z=lineXyzData[34];
                i++;
                createNewLine(x,y,z,lineXyzData[32],lineXyzData[33],
                        lineXyzData[34],actualLineLayerId);
                i--;
        }
        if(acedCommand(RTSTR,"zoom",RTSTR,"e",0)!=RTNORM)
        {
                return;
        }
        acutPrintf("\nThe span name : %s ",spanName);
        acutPrintf("\nThe joint infomation : %s ",lastLine);
}  


///////////////////////
//command function
///////////////////////
void runIt()
{       
//        readDwgFile();
        plotFromCsvFile();
}


////////////////////////
//initialize function
////////////////////////
void initApp()
{
        acedRegCmds->addCommand("ASDK_BRIDGE",
                                                        "Bridge",
                                                        "Bridge",
                                                        ACRX_CMD_MODAL,
                                                        runIt);
}


////////////////////
//unload function
////////////////////
void unloadApp()
{
        acedRegCmds->removeGroup("ASDK_BRIDGE");
}


////////////////////////////////
//application main function
////////////////////////////////
extern "C" AcRx::AppRetCode
acrxEntryPoint(AcRx::AppRetCode msg,void* appId)
{
        switch(msg)
        {
        case AcRx::kInitAppMsg:
                acrxDynamicLinker->unlockApplication(appId);
                acrxDynamicLinker->registerAppMDIAware(appId);
                initApp();
                break;
        case AcRx::kUnloadAppMsg:
                unloadApp();
        }
        return AcRx::kRetOK;
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-8-22 10:03:11 | 显示全部楼层
你这是CAD内集的程序, 现你想要改成什么样?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-8-22 10:17:15 | 显示全部楼层
我也不知道阿,就是改成简单一点,还有就是错误处理。你看怎么改好?我是用arx for 2004,vc7的,(不会用)。快帮我啊!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-8-22 12:02:06 | 显示全部楼层
汗。。。
没有头绪怎么改?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-8-22 12:52:45 | 显示全部楼层
是这样的:
//include files
#include <string.h>
#include <aced.h>
#include <dbents.h>
#include <dbsymtb.h>
#include <adslib.h>
#include <acestext.h>
#include <dbapserv.h>
#include <dbgroup.h>
#include <rxregsvc.h>
#include <stdio.h>
#include <dbidmap.h>
#include <lngtrans.h>
#include <dbltrans.h>
#include <dbmain.h>
#include <math.h>
#include <share.h>
#include <stdlib.h>
#include <ctype.h>


//functions statement
void readDwgFile();                         //读入一个DWG文件,并显示在屏幕上,等一下也是在这里绘图,其实就是一个图框
void plotFromCsvFile();                   //从一个CSV文件读入数据(许多坐标,放大倍数,平移量,其他信息等)
Acad::ErrorStatus createNewLine();    //绘制直线
Acad::ErrorStatus createNewCircle();  //绘制圆
Acad::ErrorStatus createNewLayer();  //创建一个新层
Acad::ErrorStatus createPinJointPoint();   //绘制一个小模块(一个小圆,中心加一个叉)
Acad::ErrorStatus createBoltPoint();  //绘制一个小模块(一个正方形,中心加一个叉)
void runIt();
void initApp();
void unloadApp();
//以上include是arx for 2000 的。我现在是用arx for 2004,要怎么改?还有就是VC7里怎么设置?
//要修改的就是以上的各个函数了。
//还有,我想把一个已经存在的层设置为当前层,然后在绘制直线什么的,就在这个层上绘制,
//要改的时候在把别的层设为当前层?我原来是把每一条直线或圆加到所需要的层中,太麻烦了!
//以上代码在VC6中编译后可以在cad2002上运行,但在VC7编译后,在cad]2004上运行到创建第四个图层就错了!
//AutoCAD Error Abroting: FATAL ERROR: Unhandled Access Violation Reading Oxae9000c Exception at 1c0134ch
//谢谢看完!
//急待回答!


附:CSV文件格式
Format of input file
&#8226;        it is a csv file with the following layout
&#8226;        first line is span name
&#8226;        second line is rotational multiplying factor and translational multiplying factor.
&#8226;        each of the subsequent line is the information for a segment as follows:

join number
joint width
target joint left point (xyz)
target joint center point (xyz)
target joint right point (xyz)
target left front bolt (xyz)
target right front bolt (xyz)
target left back bolt (xyz)
target right back bolt (xyz)
target front pin (xyz)
target back pin (xyz)
actual joint left point (xyz)
actual joint center point (xyz)
actual joint right point (xyz)
actual left front bolt (xyz)
actual right front bolt (xyz)
actual left back bolt (xyz)
actual right back bolt (xyz)
actual front pin (xyz)
actual back pin (xyz)
       
&#8226;        there 18 xyz coordinates on each line
&#8226;        there are 2 + 18 * 3 numbers on each line
&#8226;        the last line has only got joint information. There will be no bolt and pin information.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-21 15:20:33 | 显示全部楼层
太乱了,需要整理一下再放上来。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-12 03:57 , Processed in 0.184018 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表