⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exhcad.h

📁 《管状换热器计算机辅助设计系统ExhCAD绘图系统(版本:1.01a Final)》为自由软件
💻 H
📖 第 1 页 / 共 2 页
字号:
#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 + -