帮看看入门级(vc++和arx)的程序,帮忙大改一下
2009-05-10 04:52:21 PM
更多相关内容请访问"CAD家园论坛",万人专家团为您在线答疑!
帮看看入门级(c++和arx)的程序,帮忙大改一下:(arx for 2004和c7。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=acdbHostApplicationSerices()->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);
AcGeector3d 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=acdbHostApplicationSerices()->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=acdbHostApplicationSerices()->workingDatabase()
->getSymbolTable(pLayerTable,AcDb::kForWrite);
if(es!=Acad::eOk)
{
delete pLayerTableRecord;
return es;
}
//open linetype table
AcDbLinetypeTable *pLinetypeTbl;
es=acdbHostApplicationSerices()->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 compaalue;
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;
compaalue=radius/sqrt(2.0);
upLeftPointX=centerX-compaalue;
upLeftPointY=centerY+compaalue;
upLeftPointZ=centerZ;
upRightPointX=centerX+compaalue;
upRightPointY=centerY+compaalue;
upRightPointZ=centerZ;
downLeftPointX=centerX-compaalue;
downLeftPointY=centerY-compaalue;
downLeftPointZ=centerZ;
downRightPointX=centerX+compaalue;
downRightPointY=centerY-compaalue;
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 compaalue;
double upLeftPointX;
double upLeftPointY;
double upLeftPointZ;
double upRightPointX;
double upRightPointY;
double upRightPointZ;
double downLeftPointX;
double downLeftPointY;
double downLeftPointZ;
double downRightPointX;
double downRightPointY;
double downRightPointZ;
compaalue=10.0;
upLeftPointX=centerX-compaalue;
upLeftPointY=centerY+compaalue;
upLeftPointZ=centerZ;
upRightPointX=centerX+compaalue;
upRightPointY=centerY+compaalue;
upRightPointZ=centerZ;
downLeftPointX=centerX-compaalue;
downLeftPointY=centerY-compaalue;
downLeftPointZ=centerZ;
downRightPointX=centerX+compaalue;
downRightPointY=centerY-compaalue;
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)
/////////////////////////////////////
oid readDwgFile()
{
AcDbDatabase* pCurDb;
AcDbDatabase* pDb = new AcDbDatabase(Adesk::kFalse);
pDb->readDwgFile("A1.dwg",_SH_DENYRW);
pCurDb = acdbHostApplicationSerices()->workingDatabase();
if(pCurDb->insert(AcGeMatrix3d::kIdentity,pDb) != Acad::eOk)
{
delete pDb;
}
delete pDb;
}
/////////////////////////////
//read cs file and plot
/////////////////////////////
oid plotFromCsFile()
{
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[i]=0;
}
for(i=0;i<10;i++)
{
for(j=0;j<56;j++)
{
lineXyzData[i][j]=0;
}
}
fp = fopen("coordinatesCs.cs","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[i]!=comma[0])
{
spanName[i]=temp[i];
}
//else
//{
//acutPrintf("\n Can't find the span name.");
//}
}
row++;
}
else if(row==2)
{
i=0;
j=0;
k=0;
do
{
if(temp[i]!=comma[0])
{
tempLine[k][j]=temp[i];
j++;
i++;
}
else
{
i++;
j=0;
k++;
}
} while(temp[i]!=NULL);
for(i=0;i<2;i++)
{
lineTwoData[i]=atof(tempLine[i]);
}
row++;
}
else if(isalpha(temp[0])!=0)
{
for(i=0;i<=strlen(lastLine);i++)
{
if(temp[i]!=comma[0])
{
lastLine[i]=temp[i];
}
//else
//{
//acutPrintf("\n There is not temp .");
//}
}
}
else
{
i=0;
j=0;
k=0;
char comma[]={","};
do
{
if(temp[i]!=comma[0])
{
tempLineData[k][j]=temp[i];
j++;
i++;
}
else
{
i++;
j=0;
k++;
}
} while(temp[i]!=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[i]=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[i][2],lineXyzData[i][3],lineXyzData[i][4],targetPointLayerId);
createPinJointPoint(lineXyzData[i][5],lineXyzData[i][6],lineXyzData[i][7],targetPointLayerId);
createPinJointPoint(lineXyzData[i][8],lineXyzData[i][9],lineXyzData[i][10],targetPointLayerId);
createBoltPoint(lineXyzData[i][11],lineXyzData[i][12],lineXyzData[i][13],targetPointLayerId);
createBoltPoint(lineXyzData[i][14],lineXyzData[i][15],lineXyzData[i][16],targetPointLayerId);
createBoltPoint(lineXyzData[i][17],lineXyzData[i][18],lineXyzData[i][19],targetPointLayerId);
createBoltPoint(lineXyzData[i][20],lineXyzData[i][21],lineXyzData[i][22],targetPointLayerId);
createPinJointPoint(lineXyzData[i][23],lineXyzData[i][24],lineXyzData[i][25],targetPointLayerId);
createPinJointPoint(lineXyzData[i][26],lineXyzData[i][27],lineXyzData[i][28],targetPointLayerId);
//plot the target joint line
sin=(lineXyzData[i][3]-lineXyzData[i][9])/(sqrt(pow((lineXyzData[i][2]-lineXyzData[i][8]),2)
+pow((lineXyzData[i][3]-lineXyzData[i][9]),2)));
cos=(lineXyzData[i][2]-lineXyzData[i][8])/(sqrt(pow((lineXyzData[i][2]-lineXyzData[i][8]),2)
+pow((lineXyzData[i][3]-lineXyzData[i][9]),2)));
increment=(lineXyzData[i][1]-(sqrt(pow((lineXyzData[i][2]-lineXyzData[i][8]),2)
+pow((lineXyzData[i][3]-lineXyzData[i][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[i][2]+incrementx;
endOfTheTargetJoint[j][1]=lineXyzData[i][3]+incrementy;
endOfTheTargetJoint[j][2]=lineXyzData[i][4]+incrementz;
endOfTheTargetJoint[j][3]=lineXyzData[i][8]-incrementx;
endOfTheTargetJoint[j][4]=lineXyzData[i][9]-incrementy;
endOfTheTargetJoint[j][5]=lineXyzData[i][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[i][29],lineXyzData[i][30],lineXyzData[i][31],actualPointLayerId);
createPinJointPoint(lineXyzData[i][32],lineXyzData[i][33],lineXyzData[i][34],actualPointLayerId);
createPinJointPoint(lineXyzData[i][35],lineXyzData[i][36],lineXyzData[i][37],actualPointLayerId);
createBoltPoint(lineXyzData[i][38],lineXyzData[i][39],lineXyzData[i][40],actualPointLayerId);
createBoltPoint(lineXyzData[i][41],lineXyzData[i][42],lineXyzData[i][43],actualPointLayerId);
createBoltPoint(lineXyzData[i][44],lineXyzData[i][45],lineXyzData[i][46],actualPointLayerId);
createBoltPoint(lineXyzData[i][47],lineXyzData[i][48],lineXyzData[i][49],actualPointLayerId);
createPinJointPoint(lineXyzData[i][50],lineXyzData[i][51],lineXyzData[i][52],actualPointLayerId);
createPinJointPoint(lineXyzData[i][53],lineXyzData[i][54],lineXyzData[i][55],actualPointLayerId);
//plot the actual joint line
sin=(lineXyzData[i][30]-lineXyzData[i][36])/(sqrt(pow((lineXyzData[i][29]-lineXyzData[i][35]),2)
+pow((lineXyzData[i][30]-lineXyzData[i][36]),2)));
cos=(lineXyzData[i][29]-lineXyzData[i][35])/(sqrt(pow((lineXyzData[i][29]-lineXyzData[i][35]),2)
+pow((lineXyzData[i][30]-lineXyzData[i][36]),2)));
increment=(lineXyzData[i][1]-(sqrt(pow((lineXyzData[i][29]-lineXyzData[i][35]),2)
+pow((lineXyzData[i][30]-lineXyzData[i][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[i][29]+incrementx;
endOfTheActualJoint[k][1]=lineXyzData[i][30]+incrementy;
endOfTheActualJoint[k][2]=lineXyzData[i][31]+incrementz;
endOfTheActualJoint[k][3]=lineXyzData[i][35]-incrementx;
endOfTheActualJoint[k][4]=lineXyzData[i][36]-incrementy;
endOfTheActualJoint[k][5]=lineXyzData[i][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[i][0];
y=endOfTheTargetJoint[i][1];
z=endOfTheTargetJoint[i][2];
i++;
createNewLine(x,y,z,endOfTheTargetJoint[i][0],endOfTheTargetJoint[i][1],
endOfTheTargetJoint[i][2],targetLineLayerId);
i--;
x=endOfTheTargetJoint[i][3];
y=endOfTheTargetJoint[i][4];
z=endOfTheTargetJoint[i][5];
i++;
createNewLine(x,y,z,endOfTheTargetJoint[i][3],endOfTheTargetJoint[i][4],
endOfTheTargetJoint[i][5],targetLineLayerId);
i--;
}
//Plot straight lines to join the ends of the actual joint line
for(i=0;i<(j-1);i++)
{
x=endOfTheActualJoint[i][0];
y=endOfTheActualJoint[i][1];
z=endOfTheActualJoint[i][2];
i++;
createNewLine(x,y,z,endOfTheActualJoint[i][0],endOfTheActualJoint[i][1],
endOfTheActualJoint[i][2],actualLineLayerId);
i--;
x=endOfTheActualJoint[i][3];
y=endOfTheActualJoint[i][4];
z=endOfTheActualJoint[i][5];
i++;
createNewLine(x,y,z,endOfTheActualJoint[i][3],endOfTheActualJoint[i][4],
endOfTheActualJoint[i][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[i][5];
y=lineXyzData[i][6];
z=lineXyzData[i][7];
i++;
createNewLine(x,y,z,lineXyzData[i][5],lineXyzData[i][6],
lineXyzData[i][7],targetLineLayerId);
i--;
}
//Plot straight lines to join the actual joint center points
for(i=0;i<(row-4);i++)
{
x=lineXyzData[i][32];
y=lineXyzData[i][33];
z=lineXyzData[i][34];
i++;
createNewLine(x,y,z,lineXyzData[i][32],lineXyzData[i][33],
lineXyzData[i][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
///////////////////////
oid runIt()
{
//readDwgFile();
plotFromCsFile();
}
////////////////////////
//initialize function
////////////////////////
oid initApp()
{
acedRegCmds->addCommand("ASDK_BRIDGE",
"Bridge",
"Bridge",
ACRX_CMD_MODAL,
runIt);
}
////////////////////
//unload function
////////////////////
oid unloadApp()
{
acedRegCmds->remoeGroup("ASDK_BRIDGE");
}
////////////////////////////////
//application main function
////////////////////////////////
extern "C" AcRx::AppRetCode
acrxEntryPoint(AcRx::AppRetCode msg,oid* appId)
{
switch(msg)
{
case AcRx::kInitAppMsg:
acrxDynamicLinker->unlockApplication(appId);
acrxDynamicLinker->registerAppMDIAware(appId);
initApp();
break;
case AcRx::kUnloadAppMsg:
unloadApp();
}
return AcRx::kRetOK;
}
你这是CAD内集的程序, 现你想要改成什么样?
我也不知道阿,就是改成简单一点,还有就是错误处理。你看怎么改好?我是用arx for 2004,c7的,(不会用)。快帮我啊!
汗。。。
没有头绪怎么改?
是这样的:
//include files
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//functions statement
oid readDwgFile(); //读入一个DWG文件,并显示在屏幕上,等一下也是在这里绘图,其实就是一个图框
oid plotFromCsFile(); //从一个CS文件读入数据(许多坐标,放大倍数,平移量,其他信息等)
Acad::ErrorStatus createNewLine(); //绘制直线
Acad::ErrorStatus createNewCircle(); //绘制圆
Acad::ErrorStatus createNewLayer(); //创建一个新层
Acad::ErrorStatus createPinJointPoint(); //绘制一个小模块(一个小圆,中心加一个叉)
Acad::ErrorStatus createBoltPoint(); //绘制一个小模块(一个正方形,中心加一个叉)
oid runIt();
oid initApp();
oid unloadApp();
//以上include是arx for 2000 的。我现在是用arx for 2004,要怎么改?还有就是C7里怎么设置?
//要修改的就是以上的各个函数了。
//还有,我想把一个已经存在的层设置为当前层,然后在绘制直线什么的,就在这个层上绘制,
//要改的时候在把别的层设为当前层?我原来是把每一条直线或圆加到所需要的层中,太麻烦了!
//以上代码在C6中编译后可以在cad2002上运行,但在C7编译后,在cad]2004上运行到创建第四个图层就错了!
//AutoCAD Error Abroting: FATAL ERROR: Unhandled Access iolation Reading Oxae9000c Exception at 1c0134ch
//谢谢看完!
//急待回答!
附:CS文件格式
Format of input file
•it is a cs file with the following layout
•first line is span name
•second line is rotational multiplying factor and translational multiplying factor.
•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)
•there 18 xyz coordinates on each line
•there are 2 + 18 * 3 numbers on each line
•the last line has only got joint information. There will be no bolt and pin information.
太乱了,需要整理一下再放上来。
0 条评论:
发表评论
订阅 帖子评论 [Atom]
<< 主页