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

📄 cjming_ding_maokou.cpp

📁 这是书上的代码
💻 CPP
字号:
#include "StdAfx.h"
#include"cjming_ding_maokou.h"
Ccjming_ding_maokou::Ccjming_ding_maokou(data *Data,double bpoint[3][2],CString gname)
{
	T=Data->T;
	DR=Data->DR;
	HR=Data->HR;
	h=Data->h;
	R=Data->R;
	d=Data->d;
	h=Data->h;
	
		group_name=gname;
	for(int i=0;i<3;i++)
		for(int j=0;j<2;j++)
			basepoint[i][j]=bpoint[i][j];
		
		isok=check_data();
		if(!isok) return;
		//创建缓冲区 
		struct resbuf *pr ;
		   pr=acutBuildList(AcDb::kDxfText,"cjming_ding_maokou",
			AcDb::kDxfXdInteger32,0,
			AcDb::kDxfXdInteger32,0,AcDb::kDxfXdInteger32,0,
			AcDb::kDxfXdInteger32,0,AcDb::kDxfXdInteger32,0,
			AcDb::kDxfXdInteger32,0,
			AcDb::kDxfReal,T,   AcDb::kDxfXdReal,DR,
            AcDb::kDxfXdReal,HR,AcDb::kDxfXdReal,h,
			AcDb::kDxfReal,R,   AcDb::kDxfReal,d,
			RTNONE);
		//可能因类型不匹配而出错 long ---kDxfInteger32
		CString sname="cjming_ding_maokou";
		sname+=group_name;
		create_group(&sname,pr);
		
		get_list();
		get_overlist();
		get_leftlist();
}

Ccjming_ding_maokou:: ~Ccjming_ding_maokou()
{
}



//计算函数
BOOL Ccjming_ding_maokou:: get_list()
{  
	AcGePoint3d temp_point;
	temp_point.x=basepoint[0][0];
	temp_point.y=basepoint[0][1];
	//第1点
	list.Add(temp_point);
	//第2点
	temp_point.x=list[0].x+DR/2+HR/50;
        list.Add(temp_point);
        //第3点
	temp_point.x=list[1].x-HR/50;
	temp_point.y=list[1].y-HR;
    list.Add(temp_point);
    //第4点
    double cita;
        cita=acos((R-(DR-d)/4)/R);
	temp_point.x=list[2].x-R+R*cos(cita);
	temp_point.y=list[2].y-R*sin(cita);
	list.Add(temp_point);
    //第5点
	temp_point.x=list[3].x*2-list[2].x;
	temp_point.y=list[3].y*2-list[2].y;
	list.Add(temp_point);
    //第6点
        temp_point.x=list[0].x+d/2;
        temp_point.y=list[4].y;
	list.Add(temp_point);
	//第7点
	temp_point.x=list[0].x+T/2;
	temp_point.y=list[5].y-(T-d)/2;
	list.Add(temp_point);
    //第8点
	temp_point.x=list[0].x*2-list[6].x;
	temp_point.y=list[6].y;
        list.Add(temp_point);
    //第9点
	temp_point.x=list[0].x*2-list[5].x;
	temp_point.y=list[5].y;
        list.Add(temp_point);
    //第10点
	temp_point.x=list[0].x*2-list[4].x;
	temp_point.y=list[4].y;
        list.Add(temp_point);
	//第11点
        temp_point.x=list[0].x*2-list[3].x;
        temp_point.y=list[3].y;
        list.Add(temp_point);
	//第12点
	temp_point.x=list[0].x*2-list[2].x;
        temp_point.y=list[2].y;
        list.Add(temp_point);
        //第13点
	temp_point.x=list[0].x*2-list[1].x;
        temp_point.y=list[1].y;
        list.Add(temp_point);
        //第14点
	temp_point.x=list[0].x;
        temp_point.y=list[6].y;
	list.Add(temp_point);
    //第15点
        temp_point.x=list[2].x-R;
	temp_point.y=list[2].y;
        list.Add(temp_point);
    //第16点
	temp_point.x=list[11].x+R;
	temp_point.y=list[11].y;
        list.Add(temp_point);
    //第17点
	temp_point.x=list[9].x-R;
	temp_point.y=list[9].y;
        list.Add(temp_point);
    //第18点
	 temp_point.x=list[4].x+R;
	 temp_point.y=list[4].y;
	 list.Add(temp_point);
	 
   //写入角度(19)
	temp_point.x=3.1415926*2-cita;
	temp_point.y=3.1415926*2;
	list.Add(temp_point);
	return TRUE;
}


BOOL Ccjming_ding_maokou:: get_overlist()
{
	 return TRUE;  

}


BOOL Ccjming_ding_maokou:: draw()
{
	AcDbDatabase  *pDb;
	AcDbBlockTable *pBt;//块表
	AcDbBlockTableRecord *pBtr;//块表记录
	
	AcDbGroup  *pGroup;
	CString    sname="cjming_ding_maokou";
	AcDb3dPolyline  *pployline;
	AcGePoint3dArray  vertices;
	AcDbObjectId  id;
	AcDbLine *pline;
	pDb=acdbHostApplicationServices()->workingDatabase();
	sname+=group_name;
	open_group(pGroup,&sname); 
	pDb->getBlockTable(pBt,AcDb::kForRead);
	pBt->getAt(ACDB_MODEL_SPACE,pBtr,AcDb::kForWrite);
	pBt->close();
      //开始画图
      vertices.append(list[5]);
      vertices.append(list[6]);
      vertices.append(list[7]);
      vertices.append(list[8]);
      vertices.append(list[5]); 
      vertices.append(list[4]); 
    select_layer("cast_jm_c_layer");
	pployline=new AcDb3dPolyline(AcDb::k3dSimplePoly,vertices);
	pBtr->appendAcDbEntity(id,pployline);
	pployline->close();
	pGroup->append(id);
     
       //直线(13,2)
        pline=new AcDbLine(list[12],list[1]);
	pBtr->appendAcDbEntity(id,pline);
	pline->close();
    pGroup->append(id); 
     //取id的值
	rexdata re;
	re.long_value=id.asOldId();
	set_xdata(4,&re,pGroup);  
	

       //直线(12,13)
        pline=new AcDbLine(list[11],list[12]);
	pBtr->appendAcDbEntity(id,pline);
	pline->close();
        pGroup->append(id);
       
     
      //直线(2,3)
        pline=new AcDbLine(list[1],list[2]);
	pBtr->appendAcDbEntity(id,pline);
	pline->close();
	pGroup->append(id);
	   
     
      //右边两个弧
       AcDbArc  *parc;
	parc=new AcDbArc(list[14],R,list[18][0],list[18][1]);
	pBtr->appendAcDbEntity(id,parc);
	parc->close();
	pGroup->append(id);
	
	parc=new AcDbArc(list[17],R,list[18][0]-3.1415926,3.1415926);
	pBtr->appendAcDbEntity(id,parc);
	parc->close();
	pGroup->append(id);	
	//左边两个弧
		parc=new AcDbArc(list[15],R,3.1415926,3.1415926*3-list[18][0]);
	pBtr->appendAcDbEntity(id,parc);
	parc->close();
	pGroup->append(id);	
	parc=new AcDbArc(list[16],R,0,3.1415926*2-list[18][0]);
	pBtr->appendAcDbEntity(id,parc);
	parc->close();
	pGroup->append(id);	
     
     //画点划线
	AcGePoint3d  start,end;
	select_layer("cast_jm_cn_layer");
	start.set(list[0][0],list[0][1]+20,0.0);
	end.set(list[13][0],list[13][1]-20,0.0);
	pline=new AcDbLine(start,end);
	pBtr->appendAcDbEntity(id,pline);
	pline->close();
	pGroup->append(id);

      re.long_value=1;
	set_xdata(1,&re,pGroup);
	pBtr->close();
	pGroup->close();
	return TRUE;
}


BOOL Ccjming_ding_maokou:: drawoversee()
{           
	return TRUE;
}


BOOL Ccjming_ding_maokou::dim()
{
  //打开数据库
	AcDbDatabase *pdatabase;
	pdatabase=acdbHostApplicationServices()->workingDatabase();
	AcDbBlockTable *pblocktable;

	pdatabase->getBlockTable(pblocktable,AcDb::kForRead);
	AcDbBlockTableRecord *pblocktablerecord;
	pblocktable->getAt(ACDB_MODEL_SPACE,pblocktablerecord,AcDb::kForWrite);
	pblocktable->close();
	//打开组
	AcDbGroup *pgroup;
	CString gname="cjming_ding_maokou";
	gname+=group_name;
	open_group(pgroup,&gname);
	//设置当前层
	select_layer("cast_dim_layer");
	
	//开始标注
	AcGePoint3d dimposition;
    AcGePoint3d  temp_point;
	AcDbObjectId dimid;
	char *dim_string;
	
	//开始横参数
	//标注参数DR(12,3)
	dim_string=get_dimstring(DR,0);
	dimposition.set(list[0].x,list[2].y+20,0);
	AcDbAlignedDimension *temp_dim=new AcDbAlignedDimension(list[11],list[2],dimposition,dim_string);
	pblocktablerecord->appendAcDbEntity(dimid,temp_dim);
	temp_dim->close();
	pgroup->append(dimid);

	//标注参数d(9,6)
	dim_string=get_dimstring(d,0);
	dimposition.set(list[0].x,list[5].y,0);
	temp_dim=new AcDbAlignedDimension(list[8],list[5],dimposition,dim_string);
	pblocktablerecord->appendAcDbEntity(dimid,temp_dim);
	temp_dim->close();
	pgroup->append(dimid);

    //标注参数T(8,7)
	dim_string=get_dimstring(T,0);
	dimposition.set(list[0].x,list[6].y-20,0);
	temp_dim=new AcDbAlignedDimension(list[7],list[6],dimposition,dim_string);
	pblocktablerecord->appendAcDbEntity(dimid,temp_dim);
	temp_dim->close();
	pgroup->append(dimid);

	//标注参数h(3,7)
	dim_string=get_dimstring(h,0);
	dimposition.set(list[1].x+20,list[2].y/2+list[6].y/2,0);
	temp_point.x=list[6].x;
	temp_point.y=list[2].y;
	temp_dim=new AcDbAlignedDimension(list[6],temp_point,dimposition,dim_string);
	pblocktablerecord->appendAcDbEntity(dimid,temp_dim);
	temp_dim->close();
	pgroup->append(dimid);

	//标注参数HR(2,3)
	dim_string=get_dimstring(HR,0);
	dimposition.set(list[1].x+20,list[1].y/2+list[2].y/2,0);
	temp_point.x=list[2].x;
	temp_point.y=list[1].y;
	temp_dim=new AcDbAlignedDimension(temp_point,list[2],dimposition,dim_string);
	pblocktablerecord->appendAcDbEntity(dimid,temp_dim);
	temp_dim->close();
	pgroup->append(dimid);
	//结束横参数
	
	//标注1:50
	double ang;
	ang=atan(50);
	dimposition.set((list[1].x+list[2].x)/2+3,(list[1].y+list[2].y)/2,0);
	AcDbMText *temp_dim1=new AcDbMText();
	temp_dim1->setLocation(dimposition);
	temp_dim1->setContents("1:50");
	temp_dim1->setRotation(ang);
	pblocktablerecord->appendAcDbEntity(dimid,temp_dim1);
	temp_dim1->close();
	pgroup->append(dimid);
			
	//标注R
	dim_string=get_dimstring(R,1);
	temp_point.x=list[14].x+R*cos((list[18].x+list[18].y)/2);
	temp_point.y=list[14].y+R*sin((list[18].x+list[18].y)/2);
	AcDbRadialDimension *temp_dim2=new AcDbRadialDimension(list[14],temp_point,-R/2,dim_string);
	pblocktablerecord->appendAcDbEntity(dimid,temp_dim2);
	temp_dim2->close();
	pgroup->append(dimid);
        
        
        
	//标住结束
	rexdata re;
	re.long_value=2;
	set_xdata(1,&re,pgroup);
	

	pblocktablerecord->close();
		pgroup->close();
	return TRUE;
}

BOOL Ccjming_ding_maokou::check_data()
{
	return TRUE;
}
 BOOL Ccjming_ding_maokou::dimleft(){return TRUE;}
 BOOL Ccjming_ding_maokou::save_data(){return TRUE;}
 BOOL Ccjming_ding_maokou::get_leftlist(){return TRUE;}
 BOOL Ccjming_ding_maokou::drawleft(){return TRUE;}
 BOOL Ccjming_ding_maokou::dimoversee(){return TRUE;}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -