📄 unt_readgra.pas
字号:
Setlength(W_L_F_Points[j],k);
Setlength(wlist,2*k);
Setlength(blist,k);
frm_data.ADOT_Points.Locate('Point_Id',Sp_List[j],[loCaseInsensitive]);
for m:=0 to k-1 do
begin
W_L_F_Points[j,m,0]:=frm_data.ADOT_Points.fieldbyname('X').AsFloat;
W_L_F_Points[j,m,1]:=frm_data.ADOT_Points.fieldbyname('Y').AsFloat;
W_L_F_Points[j,m,2]:=frm_data.ADOT_Points.fieldbyname('Z').AsFloat;
wlist[2*m]:=frm_data.ADOT_Points.fieldbyname('SWidth').AsFloat;
wlist[2*m+1]:=frm_data.ADOT_Points.fieldbyname('EWidth').AsFloat;
blist[m]:=frm_data.ADOT_Points.fieldbyname('Bugle').AsFloat;
frm_data.ADOT_Points.Next;
end;
Dis1:=Distance(StopInW[j],W_L_F_Points[j,0]);
Dis2:=Distance(StopInW[j],W_L_F_Points[j,Ep_List[j]-Sp_List[j]]);
if (Dis1-Dis2)>1e-3
then for n:=0 to (k div 2)-1 do
begin
ExPoint(W_L_F_Points[j,n],W_L_F_Points[j,k-n-1]);
ExDouble(wlist[n],wlist[k-n-1]);
ExDouble(blist[n],blist[k-n-1]);
frm_data.ADOT_Points.Locate('Point_Id',Sp_List[j]+n,[loCaseInsensitive]);
frm_data.ADOT_Points.Edit;
frm_data.ADOT_Points.fieldbyname('X').AsFloat:=W_L_F_Points[j,n,0];
frm_data.ADOT_Points.fieldbyname('Y').AsFloat:=W_L_F_Points[j,n,1];
frm_data.ADOT_Points.fieldbyname('Z').AsFloat:=W_L_F_Points[j,n,2];
frm_data.ADOT_Points.fieldbyname('SWidth').AsFloat:=wlist[2*n];
frm_data.ADOT_Points.fieldbyname('EWidth').AsFloat:=wlist[2*n+1];
frm_data.ADOT_Points.fieldbyname('Bugle').AsFloat:=blist[n];
frm_data.ADOT_Points.Post;
frm_data.ADOT_Points.Locate('Point_Id',Sp_List[j]+k-n-1,[loCaseInsensitive]);
frm_data.ADOT_Points.Edit;
frm_data.ADOT_Points.fieldbyname('X').AsFloat:=W_L_F_Points[j,k-n-1,0];
frm_data.ADOT_Points.fieldbyname('Y').AsFloat:=W_L_F_Points[j,k-n-1,1];
frm_data.ADOT_Points.fieldbyname('Z').AsFloat:=W_L_F_Points[j,k-n-1,2];
frm_data.ADOT_Points.fieldbyname('SWidth').AsFloat:=wlist[2*(k-n-1)];
frm_data.ADOT_Points.fieldbyname('EWidth').AsFloat:=wlist[2*(k-n-1)+1];
frm_data.ADOT_Points.fieldbyname('Bugle').AsFloat:=blist[k-n-1];
frm_data.ADOT_Points.Post;
end;
RecPoints[len-j-1]:=W_L_F_Points[j,k-1];//多边形的顶边
end;
{确定采区的多边形,计算采区名}
for r:=0 to AreaTxtNum-1 do
begin
Isd:=PInListP(len,AreaTxtPs[r],RecPoints); //判断采区文本插入点是否在采区多边形区域内
if Isd then break;
end;
//对存放到AreaTxt中的采区文本进行处理,提取相关信息
if r=AreaTxtNum then r:=AreaTxtNum-1;
k:=pos('采区',AreaTxt[r]);
//m:=pos('水平',AreaTxt[j]);
//n:=pos('山',AreaTxt[j]);
str:='';
AreaName:='';
//以下直接读取采区名称,即CAD图中直接写××采区
AreaName:=AreaTxt[r];
{LevelName:='';
SXHill:='条带区';
len:=1;
//从采区文本中获取需要的信息
while len<Length(AreaTxt[j]) do
begin
str:=str+AreaTxt[j,len];
inc(Len);
If Len=k
then begin
AreaName:=str;
Str:='';
Len:=Len+4;//跳过“采区”两个字所占的位置数
end;
if len=m
then begin
LevelName:=str+'水平';
Str:='';
Len:=Len+4;
end;
if len=n
then begin
SXHill:=str+'山采区';
Str:='';
Len:=Len+2;
end;
end;
AreaName:=AreaName+SXHill;
if Pos('上山',SXHill)<>0 then SXHill:='上山采区';
if Pos('下山',SXHill)<>0 then SXHill:='下山采区';}
//添加“水平”表记录 (水平直接从界面添加)
{Isd:=frm_data.ADOT_Level.Locate('Level_name',LevelName,[loCaseInsensitive]);
if Isd=false
then begin
Id:=GetId(frm_data.ADOT_Level,'Level_Id');
frm_data.ADOT_Level.Append;
frm_data.ADOT_Level.FieldByName('Level_Id').AsInteger:=Id+1;
frm_data.ADOT_Level.FieldByName('Shaft_Id').AsInteger:=1;
frm_data.ADOT_Level.FieldByName('Level_name').AsString:=LevelName;
frm_data.ADOT_Level.fieldbyname('Height').AsFloat:=0;
frm_data.ADOT_Level.fieldbyname('Ind_Storage').AsFloat:=0;
frm_data.ADOT_Level.fieldbyname('Pro_Storage').AsFloat:=0;
frm_data.ADOT_Level.fieldbyname('Ser_Year').AsInteger:=0;
frm_data.ADOT_Level.Post;
end;}
//m:=frm_data.ADOT_Level.fieldbyname('Level_Id').AsInteger;
//添加“采区”表记录
Isd:=frm_data.ADOT_Area.Locate('Area_Name',AreaName,[loCaseInsensitive]);
if Isd=false
then begin
k:=GetId(frm_data.ADOT_Area,'Area_Id');
frm_data.ADOT_Area.Append;
frm_data.ADOT_Area.FieldByName('Area_Id').AsInteger:=k+1;
frm_data.ADOT_Area.FieldByName('Shaft_Id').AsInteger:=1;
frm_data.ADOT_Area.FieldByName('Area_Name').AsString:=AreaName;
frm_data.ADOT_Area.fieldbyname('Ind_Storage').AsFloat:=0;
frm_data.ADOT_Area.fieldbyname('Pro_Storage').AsFloat:=0;
//frm_data.ADOT_Area.FieldByName('SXHill').AsString:=SXHill;
//frm_data.ADOT_Area.FieldByName('LR').AsString:='单翼';
frm_data.ADOT_Area.FieldByName('ProCou').AsInteger:=0;
frm_data.ADOT_Area.Post;
end;
n:=frm_data.ADOT_Area.FieldByName('Area_Id').AsInteger;
//逐一处理该停采线上的交点
for j:=0 to frm_data.ADOQ_Aid.RecordCount-2 do //ADOQ_Aid:在“停采线和断层”表中找到LType=m和StopL_Id=n的停采线所有的交点
begin
len:=(Ep_List[j]-Sp_List[j]+1)+(Ep_List[j+1]-Sp_List[j+1]+1);
//Ep_List[j]-Sp_List[j]+1:表示停采线上第j个交点所对应的交线的定位点个数(包括起点和终点)
//Ep_List[j+1]-Sp_List[j+1]+1:表示停采线上第j+1个交点所对应的交线的定位点个数(包括起点和终点)
setlength(RecPoints,len); //停采线上的两个交点对应的两条交线与停采线所构成的四边形上的定位点个数
for k:=0 to Ep_List[j]-Sp_List[j] do RecPoints[k]:=W_L_F_Points[j,k];
for k:=0 to Ep_List[j+1]-Sp_List[j+1] do RecPoints[len-k-1]:=W_L_F_Points[j+1,k];
Isd:=false;
for k:=0 to WorkTxtNum-1 do
begin
if abs(WorkTxtPs[k,2]-RecPoints[0,2])>1e-3 then continue;
Isd:=PInListP(len,WorkTxtPs[k],RecPoints);
if Isd then break;
end;
if Isd then //如果这个多边形内有文本,代表这个多边形是个工作面,执行工作面的操作 k
begin
EncodeStr(WorkTxt[k],strWork,fz,fm); //WorkTxt[k]:从CAD图中读取的工作面文本,strWork:回采面名称
//添加“区段”表记录,也就是添加回采工作面
Isd:=frm_data.ADOT_TaskS.Locate('Area_Id;TS_Name',vararrayof([n,StrWork]),[loCaseInsensitive]);
If Isd=false then
begin
Id:=GetId(frm_data.ADOT_TaskS,'TS_Id');
frm_data.ADOT_TaskS.Append;
frm_data.ADOT_TaskS.FieldByName('Shaft_Id').AsInteger:=1;
frm_data.ADOT_TaskS.FieldByName('TS_Id').AsInteger:=Id+1;
frm_data.ADOT_TaskS.FieldByName('Area_Id').AsInteger:=n;
frm_data.ADOT_TaskS.FieldByName('TS_Name').AsString:=StrWork;
frm_data.ADOT_TaskS.post;
//添加“工序”表记录
Id:=GetId(frm_data.ADOT_Task,'Task_Id');
for len:=1 to High(CommonTask) do //若采区工序名称表中有n条记录,每个回采工作面就会对应n个采掘工序,因此每个回采工作面名称都会产生n个采掘工序,并写入工序表中
begin
Str:=StrWork+CommonTask[len].CommonTaskName;
{IId:=0; //0,工序类型:开拓(在工序类型表中)
if (CommonTask[len].CommonTaskTypeName='风巷掘进')
then IId:=2; //2,风巷(在工序类型表中)
if(CommonTask[len].CommonTaskTypeName='机巷掘进')
then IId:=3; //3,机巷(在工序类型表中)
if (CommonTask.TsNT[len]='开切眼掘进')
then IId:=4; //4,开切眼(在工序类型表中)
if CommonTask.TsNT[len]='安装调试'
then IId:=5; //5,工序类型:安装调试(在工序类型表中)
if CommonTask.TsNT[len]='回采'
then IId:=6;//6,回采(在工序类型表中)}
frm_data.ADOT_Task.Append;
frm_data.ADOT_Task.FieldByName('Task_Id').AsInteger:=Id+len; //Id在for len:=1 to High(CommonTask) do之外,而len又从1开始,所以要以Id+len来计工序编号
frm_data.ADOT_Task.FieldByName('shaft_Id').AsInteger:=1;
frm_data.ADOT_Task.FieldByName('TaskT_Id').AsInteger:=CommonTask[len].Type_Id;
frm_data.ADOT_Task.FieldByName('Task_Name').AsString:=Str;
frm_data.ADOT_Task.FieldByName('LightP').AsFloat:=0;
frm_data.ADOT_Task.FieldByName('WLT_Id').AsInteger:=0;
frm_data.ADOT_Task.FieldByName('Equ_Id').AsInteger:=0;
frm_data.ADOT_Task.post;
//添加“工序采区”表记录
frm_data.ADOT_TaskArea.Append;
frm_data.ADOT_TaskArea.FieldByName('TA_Id').AsInteger:=1;
frm_data.ADOT_TaskArea.FieldByName('Task_Id').AsInteger:=Id+len;
frm_data.ADOT_TaskArea.FieldByName('Level_Id').AsInteger:=1;
frm_data.ADOT_TaskArea.FieldByName('Area_Id').AsInteger:=n;
frm_data.ADOT_TaskArea.FieldByName('Dis').AsFloat:=0;
frm_data.ADOT_TaskArea.FieldByName('TBPara').AsFloat:=1;//顶底板 岩性
frm_data.ADOT_TaskArea.FieldByName('StPara').AsFloat:=1;//构造
frm_data.ADOT_TaskArea.FieldByName('WtPara').AsFloat:=1;//水文
frm_data.ADOT_TaskArea.FieldByName('CHPara').AsFloat:=1;//瓦斯
frm_data.ADOT_TaskArea.FieldByName('AccPara').AsFloat:=1;// 事故
frm_data.ADOT_TaskArea.FieldByName('SecPara').AsFloat:=1;//断面
frm_data.ADOT_TaskArea.FieldByName('TraPara').AsFloat:=1;//支护方式
frm_data.ADOT_TaskArea.FieldByName('CaDPara').AsFloat:=1;//后续运输方式
frm_data.ADOT_TaskArea.FieldByName('WorkDay').AsInteger:=0;
frm_data.ADOT_TaskArea.FieldByName('WillSim').AsBoolean:=false;
frm_data.ADOT_TaskArea.FieldByName('IsSim').AsBoolean:=false;
frm_data.ADOT_TaskArea.FieldByName('Material').AsFloat:=0;
frm_data.ADOT_TaskArea.FieldByName('Equipment').AsFloat:=0;
frm_data.ADOT_TaskArea.FieldByName('Electricity').AsFloat:=0;
frm_data.ADOT_TaskArea.FieldByName('Q').AsFloat:=0;
//
frm_data.ADOT_Task.MoveBy(-High(CommonTask)+1);
end;
end;
Str:=StrWork+CommonTask[1].CommonTaskName; //CommonTask[1].CommonTaskName='风巷'
//Str:=StrWork+'风巷';
frm_data.ADOT_Task.Locate('Task_Name',Str,[loCaseInsensitive]);
Id:=frm_data.ADOT_Task.fieldbyname('Task_Id').AsInteger;
//添加“巷道回采面子表”表记录
Isd:=frm_data.ADOT_CWork.Locate('Graphic_Id;Task_Id',vararrayof([Graphic_Id,Id]),[loCaseInsensitive]);
if Isd=false then //若没有找到Id对应的Task_Id的记录,则添加进表中
for len:=1 to High(CommonTask) do
if (pos('掘进',CommonTask[len].CommonTaskTypeName)>0)or(pos('回采',CommonTask[len].CommonTaskTypeName)>0) then
begin
frm_data.ADOT_CWork.Append;//风巷
frm_data.ADOT_CWork.FieldByName('Task_Id').AsInteger:=Id+len-1; //此处用法的妙处:能够自动过滤掉“安装调试”工序的Task_Id编号,使得工序表中的Task_Id在巷道回采面表中不出现。
frm_data.ADOT_CWork.FieldByName('Graphic_Id').AsInteger:=Graphic_Id;
if CommonTask[len].CommonTaskTypeName='风巷掘进' then
begin
k:=j-1;k1:=j; //j是标志当前正在处理的一条停采线上的交点,也可以理解为一条交线,正是这些交线形成了回采面及其巷道
//原来:k:=j;k1:=j+1;
//if pos('上山采区',SXHill)<>0 then
//begin
//k:=j+1;k1:=j; //若是上山采区,则回风巷在
//end;
end;
if CommonTask[len].CommonTaskTypeName='机巷掘进' then
begin
k:=j+1; k1:=j+2;
//原来:k:=j+1;k1:=j;
//if pos('上山采区',SXHill)<>0 then
//begin
//k:=j;k1:=j+1;
//end;
end;
if CommonTask[len].CommonTaskTypeName='开切眼掘进' then
begin
k:=j;k1:=j+1;
//
//if pos('上山采区',SXHill)<>0 then
//begin
//k:=j+1;k1:=j;
//end;
end;
if CommonTask[len].CommonTaskTypeName='开切眼下段掘进' then
begin
k:=j;k1:=j+1;
//if pos('上山采区',SXHill)<>0 then
//begin
//k:=j+1;k1:=j;
//end;
end;
if CommonTask[len].CommonTaskTypeName='开切眼上段掘进' then
begin
k:=j+1;k1:=j;
//if pos('上山采区',SXHill)<>0 then
//begin
//k:=j;k1:=j+1;
//end;
end;
if CommonTask[len].CommonTaskTypeName='回采' then
begin
k:=j;k1:=j+1;
end;
frm_data.ADOT_CWork.FieldByName('Sp1_LType').AsInteger:=StopInwTId[k]; //交线类型
frm_data.ADOT_CWork.FieldByName('Sp1_LHnd').AsString:=StopHnd[k]; //交线句柄
frm_data.ADOT_CWork.FieldByName('Sp2_LType').AsInteger:=StopInwTId[k1];
frm_data.ADOT_CWork.FieldByName('Sp2_LHnd').AsString:=StopHnd[k1];
frm_data.ADOT_CWork.Post;
end;
end;
end; //end: for j:=0 to frm_data.ADOQ_Aid.RecordCount-2 do //ADOQ_Aid:在“停采线和断层”表中找到LType=m和StopL_Id=n的停采线所有的交点
{说明:
StopInwPId//交点编号
StopInW//交点
StopHnd//交线句柄
StopInwTId//交线类型2、24,19
W_L_F_Points//交线,有多少交点就有多少交线
Sp_List//交线起点编号
Ep_List//交线终点编号
工作面(文本的插入点的z坐标)
确定是条带式布置还是采区式布置
按照停采线交点的分布,确定该停采线对应采区的各个工作面和巷道的分布情况}
next;
end; //end: for i:=0 to recordcount-1 do //从第一条停采线开始处理,
end;
//获取“大巷”图层中的有关文本信息
{close;
SQL.Clear;
SQL.Add('Select Text from 文本,图层 ');
SQL.Add('where (文本.Graphic_Id=:v)and(图层.Layer_Id=文本.Layer_Id)');
SQL.Add('and(图层.Layer like '+''''+'%大巷%'+''''+') ');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -