📄 exhcad.h
字号:
#ifndef EXHCAD
#define EXHCAD
#include "comm.h"
Status ExhCAD::InitTitle(ads_hdlg htitledlg){
ads_set_tile(htitledlg,"school",IDS_TITLE_School);
ads_set_tile(htitledlg,"project",IDS_TITLE_Project);
ads_set_tile(htitledlg,"author",IDS_TITLE_Author);
ads_set_tile(htitledlg,"teacher",IDS_TITLE_Teacher);
ads_set_tile(htitledlg,"check",IDS_TITLE_Check);
ads_set_tile(htitledlg,"scale",IDS_TITLE_Scale);
ads_mode_tile(htitledlg,"scale",MODE_DISABLE);
ads_set_tile(htitledlg,"size",IDS_TITLE_Size);
ads_mode_tile(htitledlg,"size",MODE_DISABLE);
ads_set_tile(htitledlg,"date",IDS_TITLE_Date);
return OK;
}
Status ExhCAD::InitDeTable(ads_hdlg hdetabledlg){
ads_set_tile(hdetabledlg,"area",IDS_DETABLE_Area);
ads_set_tile(hdetabledlg,"insert",IDS_DETABLE_Insert);
ads_mode_tile(hdetabledlg,"insert",MODE_DISABLE);
ads_set_tile(hdetabledlg,"fumeoutt",IDS_DETABLE_Fumeoutt);
ads_set_tile(hdetabledlg,"fumeint",IDS_DETABLE_Fumeint);
ads_set_tile(hdetabledlg,"fumeq",IDS_DETABLE_Fumeq);
ads_set_tile(hdetabledlg,"airoutt",IDS_DETABLE_Airoutt);
ads_set_tile(hdetabledlg,"airint",IDS_DETABLE_Airint);
ads_set_tile(hdetabledlg,"airq",IDS_DETABLE_Airq);
return OK;
}
Status ExhCAD::SetTitle(ads_hdlg htitledlg){
ads_action_tile(htitledlg,"accept",Title_accept);
return OK;
}
Status ExhCAD::SetDeTable(ads_hdlg hdetabledlg){
ads_action_tile(hdetabledlg,"accept",DeTable_accept);
return OK;
}
static void CALLB Title_undo(ads_callback_packet *cpkt){
ads_done_dialog(cpkt->dialog,DLGOK);
return ;
}
static void CALLB DeTable_undo(ads_callback_packet *cpkt){
ads_done_dialog(cpkt->dialog,DLGOK);
return ;
}
static void CALLB Title_accept(ads_callback_packet *cpkt){
ads_get_tile(cpkt->dialog,"school",Titles->School,256);
ads_get_tile(cpkt->dialog,"project",Titles->Project,256);
ads_get_tile(cpkt->dialog,"author",Titles->Author,256);
ads_get_tile(cpkt->dialog,"teacher",Titles->Teacher,256);
ads_get_tile(cpkt->dialog,"check",Titles->Check,256);
ads_get_tile(cpkt->dialog,"scale",Titles->Scale,256);
ads_get_tile(cpkt->dialog,"size",Titles->Size,256);
ads_get_tile(cpkt->dialog,"date",Titles->Date,256);
ads_done_dialog(cpkt->dialog,DLGOK);
return ;
}
static void CALLB DeTable_accept(ads_callback_packet *cpkt){
ads_get_tile(cpkt->dialog,"area",Detables->Area,256);
ads_get_tile(cpkt->dialog,"insert",Detables->Insert,256);
ads_get_tile(cpkt->dialog,"fumeoutt",Detables->Fumeoutt,256);
ads_get_tile(cpkt->dialog,"fumeint",Detables->Fumeint,256);
ads_get_tile(cpkt->dialog,"fumeq",Detables->Fumeq,256);
ads_get_tile(cpkt->dialog,"airoutt",Detables->Airoutt,256);
ads_get_tile(cpkt->dialog,"airint",Detables->Airint,256);
ads_get_tile(cpkt->dialog,"airq",Detables->Airq,256);
ads_done_dialog(cpkt->dialog,DLGOK);
return ;
}
Status ExhCAD::Init(){
ads_printf(IDS_ExhCAD_Init);
Titles=(TITLE *)malloc(sizeof(TITLE));
Detables=(DETABLE *)malloc(sizeof(DETABLE));
pDb=acdbCurDwg();
pDb->setOrthomode(1);
pDb->setDimscale(10);
return OK;
}
Status ExhCAD::Help(char *FileName,char *Topic,int Command){
ads_help(FileName,Topic,Command);
return OK;
}
Status ExhCAD::About(char *AppInformation){
ads_printf(AppInformation);
return OK;
}
char * ExhCAD::GetExhCADFile(char *FileName){
int i,j;
char *m_FileName=NULL;
m_FileName=ads_getappname();
for(i=0;i<(int)strlen(m_FileName);i++)
if(m_FileName[i]=='\\') j=i;
m_FileName[++j]=NULL;
m_FileName=strcat(m_FileName,FileName);
return m_FileName;
}
Status ExhCAD::Draw(void){
char DrawType;
ads_initget(RSG_NONULL,KeyWUDSL);
ads_getkword(PromptDrawType,&DrawType);
switch(DrawType){
case KeyWindPipe:
DrawWindPipe();break;
case KeyUContainer:
DrawUContainer();break;
case KeyDContainer:
DrawDContainer();break;
case KeySteel:
DrawSteel();break;
case KeyLinker:
DrawLinker();break;
default:
break;
}
return OK;
}
Status ExhCAD::DimensionPipe(void){
AcDbDimStyleTable *pStyleTable;
AcDbDimStyleTableIterator *pIterator;
AcDbObjectId styleId,objIdLine,DimIdLine,DimIdCircle,objIdCircle;
AcDbBlockTableRecord *pBlock;
AcDbBlockTable *pBlockTable;
ads_name entLine,entCircle;
ads_point ptLine,ptCircle;
AcDbLine *pLine;
AcDbCircle *pCircle;
AcGePoint3d startpoint,endpoint,relativepoint,centerpoint;
double Distance,Radius,leaderLength;
char *distance=new char[256];
char *diameter=new char[256];
acdbCurDwg()->getDimStyleTable(pStyleTable,
AcDb::kForRead);
pStyleTable->newIterator(pIterator);
pIterator->getRecordId(styleId);
delete pIterator;
pStyleTable->close();
ads_entsel(PromptPipeLen,entLine,ptLine);
acdbGetObjectId(objIdLine,entLine);
acdbOpenObject(pLine,objIdLine,AcDb::kForRead);
acdbCurDwg()->getBlockTable(pBlockTable,
AcDb::kForRead);
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlock,
AcDb::kForWrite);
startpoint=pLine->startPoint();
endpoint=pLine->endPoint();
relativepoint.x=startpoint.x-10,relativepoint.y=startpoint.y+(endpoint.y-startpoint.y)/2;
Distance=ads_distance(asDblArray(startpoint),asDblArray(endpoint))*10;
ads_rtos(Distance,1,-1,distance);
AcDbAlignedDimension *pDimensionLine=new AcDbAlignedDimension(startpoint,
endpoint,
relativepoint,
distance,
styleId);
ads_entsel(PromptPipeDiameter,entCircle,ptCircle);
acdbGetObjectId(objIdCircle,entCircle);
acdbOpenObject(pCircle,objIdCircle,AcDb::kForRead);
centerpoint=pCircle->center();
Radius=pCircle->radius();
ads_rtos(Radius*2,1,-1,diameter);
endpoint.x=centerpoint.x+Radius;
startpoint.x=centerpoint.x-Radius;
endpoint.y=startpoint.y=centerpoint.y;
leaderLength=1;
AcDbDiametricDimension *pDimensionCircle=new AcDbDiametricDimension(startpoint,
endpoint,
leaderLength,
diameter,
styleId);
pBlock->appendAcDbEntity(DimIdLine, pDimensionLine);
pBlock->appendAcDbEntity(DimIdCircle, pDimensionCircle);
pBlockTable->close();
pBlock->close();
pDimensionLine->close();
pDimensionCircle->close();
pLine->close();
pCircle->close();
return OK;
}
Status ExhCAD::DimensionContainer(void){
AcDbDimStyleTable *pStyleTable;
AcDbDimStyleTableIterator *pIterator;
AcDbObjectId styleId,objIdLine,DimIdLine;
AcDbBlockTableRecord *pBlock;
AcDbBlockTable *pBlockTable;
ads_name entLine;
ads_point ptLine;
AcDbLine *pLine;
AcGePoint3d startpoint,endpoint,relativepoint;
double Distance;
char *distance=new char[256];
acdbCurDwg()->getDimStyleTable(pStyleTable,
AcDb::kForRead);
pStyleTable->newIterator(pIterator);
pIterator->getRecordId(styleId);
delete pIterator;
pStyleTable->close();
ads_entsel(PromptContainerLWH,entLine,ptLine);
acdbGetObjectId(objIdLine,entLine);
acdbOpenObject(pLine,objIdLine,AcDb::kForRead);
acdbCurDwg()->getBlockTable(pBlockTable,
AcDb::kForRead);
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlock,
AcDb::kForWrite);
startpoint=pLine->startPoint();
endpoint=pLine->endPoint();
if(startpoint.x==endpoint.x)
relativepoint.x=startpoint.x-10,relativepoint.y=startpoint.y+(endpoint.y-startpoint.y)/2;
else
relativepoint.y=startpoint.y-10,relativepoint.x=startpoint.x+(endpoint.x-startpoint.x)/2;
Distance=ads_distance(asDblArray(startpoint),asDblArray(endpoint))*10;
ads_rtos(Distance,1,-1,distance);
ads_printf(distance);
AcDbAlignedDimension *pDimensionLine=new AcDbAlignedDimension(startpoint,
endpoint,
relativepoint,
distance,
styleId);
pBlock->appendAcDbEntity(DimIdLine, pDimensionLine);
pBlockTable->close();
pBlock->close();
pDimensionLine->close();
pLine->close();
return OK;
}
Status ExhCAD::DimensionWindPipe(void){
AcDbDimStyleTable *pStyleTable;
AcDbDimStyleTableIterator *pIterator;
AcDbObjectId styleId,objIdLine,DimIdLine;
AcDbBlockTableRecord *pBlock;
AcDbBlockTable *pBlockTable;
ads_name entLine;
ads_point ptLine;
AcDbLine *pLine;
AcGePoint3d startpoint,endpoint,relativepoint;
double Distance;
char *distance=new char[256];
acdbCurDwg()->getDimStyleTable(pStyleTable,
AcDb::kForRead);
pStyleTable->newIterator(pIterator);
pIterator->getRecordId(styleId);
delete pIterator;
pStyleTable->close();
ads_entsel(PromptWindPipeLWH,entLine,ptLine);
acdbGetObjectId(objIdLine,entLine);
acdbOpenObject(pLine,objIdLine,AcDb::kForRead);
acdbCurDwg()->getBlockTable(pBlockTable,
AcDb::kForRead);
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlock,
AcDb::kForWrite);
startpoint=pLine->startPoint();
endpoint=pLine->endPoint();
if(startpoint.x==endpoint.x)
relativepoint.x=startpoint.x+10,relativepoint.y=startpoint.y+(endpoint.y-startpoint.y)/2;
else
relativepoint.y=startpoint.y+10,relativepoint.x=startpoint.x+(endpoint.x-startpoint.x)/2;
Distance=ads_distance(asDblArray(startpoint),asDblArray(endpoint))*10;
ads_rtos(Distance,1,-1,distance);
ads_printf(distance);
AcDbAlignedDimension *pDimensionLine=new AcDbAlignedDimension(startpoint,
endpoint,
relativepoint,
distance,
styleId);
pBlock->appendAcDbEntity(DimIdLine, pDimensionLine);
pBlockTable->close();
pBlock->close();
pDimensionLine->close();
pLine->close();
return OK;
}
Status ExhCAD::DimensionSteel(void){
ads_printf(IDS_ExhCAD_Dimension);
return OK;
}
Status ExhCAD::Dimension(void){
char DimensionType;
ads_initget(RSG_NONULL,KeyPCWS);
ads_getkword(PromptDimensionType,&DimensionType);
switch(DimensionType){
case KeyPipe:
DimensionPipe();break;
case KeyContainer:
DimensionContainer();break;
case KeyWindPipe:
DimensionWindPipe();break;
case KeySteel:
DimensionSteel();break;
default:
break;
}
return OK;
}
Status ExhCAD::DrawWindPipe(void){
AcGePoint3d startpoint,pt1,pt2,pt3,pt4;
AcDbLine *pLine1=NULL,*pLine2,*pLine3,*pLine4;
ads_real lenwidth=1420,height=100;
AcDbObjectId objId;
AcDbBlockTableRecord *pBlock;
AcDbBlockTable *pBlockTable;
ads_getreal(PromptWLW,&lenwidth);
ads_getreal(PromptWH,&height);
lenwidth=lenwidth/10,height=height/10;
pDb->setOsmode(2);//mid
ads_getpoint(asDblArray(basepoint),PromptWindPipeBasePoint,asDblArray(startpoint));
acdbCurDwg()->getBlockTable(pBlockTable,
AcDb::kForRead);
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlock,
AcDb::kForWrite);
pt1.x=startpoint.x-lenwidth/2,pt1.y=startpoint.y;
pt2.x=startpoint.x+lenwidth/2,pt2.y=startpoint.y;
pt3.x=startpoint.x+lenwidth/2,pt3.y=startpoint.y+height;
pt4.x=startpoint.x-lenwidth/2,pt4.y=startpoint.y+height;
pLine2=new AcDbLine(pt2,pt3);
pLine3=new AcDbLine(pt3,pt4);
pLine4=new AcDbLine(pt4,pt1);
pBlock->appendAcDbEntity(objId, pLine2);
pBlock->appendAcDbEntity(objId, pLine3);
pBlock->appendAcDbEntity(objId, pLine4);
pBlockTable->close();
pBlock->close();
pLine2->close();
pLine3->close();
pLine4->close();
return OK;
}
Status ExhCAD::DrawDContainer(void){
AcGePoint3d startpoint,pt1,pt2,pt3,pt4;
AcDbLine *pLine1,*pLine2,*pLine3,*pLine4;
ads_real lenwidth=3298,height=200;
AcDbObjectId objId;
AcDbBlockTableRecord *pBlock;
AcDbBlockTable *pBlockTable;
ads_getreal(PromptDCLW,&lenwidth);
ads_getreal(PromptDCH,&height);
lenwidth=lenwidth/10,height=height/10;
pDb->setOsmode(1);//mid
ads_getpoint(asDblArray(basepoint),PromptDContainerBasePoint,asDblArray(startpoint));
acdbCurDwg()->getBlockTable(pBlockTable,
AcDb::kForRead);
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlock,
AcDb::kForWrite);
startpoint.y=startpoint.y+5;
pt1.x=startpoint.x-lenwidth/2,pt1.y=startpoint.y;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -