📄 cjming_ding_maokou.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 + -