📄 unt_readgra.pas
字号:
Parameters.ParamByName('v').Value:=Graphic_Id;
ExecSQL;
open;first;
//把“大巷”图层中的标示的开拓工序加入到“工序”表中
for i:=0 to Recordcount-1 do
begin
//inc(frm_main.PosId);
//frm_main.SbarFull;
Str:=fieldbyName('Text').AsString;
Isd:=frm_data.ADOT_Task.Locate('Task_Name',Str,[loCaseInsensitive]);
if Isd=false then
begin
Id:=GetId(frm_data.ADOT_Task,'Task_Id');
frm_data.ADOT_Task.Append;
frm_data.ADOT_Task.FieldByName('Task_Id').AsInteger:=Id+1;
frm_data.ADOT_Task.FieldByName('shaft_Id').AsInteger:=1;
frm_data.ADOT_Task.FieldByName('TaskT_Id').AsInteger:=0;
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+1;
frm_data.ADOT_TaskArea.FieldByName('Area_Id').AsInteger:=1; //??:为什么都是1
frm_data.ADOT_TaskArea.FieldByName('Level_Id').AsInteger:=1;
frm_data.ADOT_TaskArea.FieldByName('Dis').AsFloat:=0;
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_TaskArea.Post;
//
end;
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
begin
frm_data.ADOT_Task.Locate('Task_Name',Str,[loCaseInsensitive]); //?
//把开拓工序加入到“巷道回采面子表”中,并标明未处理(NotDeal),即动态演示中没有辨识和处理开拓系统
frm_data.ADOT_CWork.Append;
frm_data.ADOT_CWork.FieldByName('Task_Id').AsInteger:=Id;
frm_data.ADOT_CWork.FieldByName('Graphic_Id').AsInteger:=Graphic_Id;
frm_data.ADOT_CWork.FieldByName('Sp1_LType').AsInteger:=0;
frm_data.ADOT_CWork.FieldByName('Sp1_LHnd').AsString:='NotDeal';
frm_data.ADOT_CWork.FieldByName('Sp2_LType').AsInteger:=0;
frm_data.ADOT_CWork.FieldByName('Sp2_LHnd').AsString:='NotDeal';
frm_data.ADOT_CWork.Post;
end;
next;
end;}
Frm_Gra.Refresh;
end;
procedure TRead_Graph.Add_StopLine(Sp_F:integer;IdStr:string); //
var ObjectItem,IntersectP:olevariant;
Id,StrPos,EId:integer;
Hnd,Str:string;
IsP:boolean;
begin
with frm_data do
for Id:=0 to ACAD.ObjCount-1 do
begin
//inc(frm_main.PosId);
//frm_main.SbarFull;
ObjectItem:=ACAD.AcadMod.item(Id);
Hnd:=ObjectItem.handle;
if (Pos(IdStr,ObjectItem.Layer)=0)or(Hnd=THandle) then continue;
EId:=ObjectItem.entityType;
if (EId<>2)and(EId<>19)and(EId<>24) then continue;
IntersectP:=vararraycreate([0,2],vardouble);
IntersectP:=ACAD.ObjItem.intersectwith(ObjectItem,0);
try
str:=floattostr(IntersectP[0]); //可能会出现EAccessViolation错误
except
Continue;
end;
for StrPos:=0 to 2 do CenterPoint[StrPos]:=IntersectP[StrPos];
if Sp_f=0 //0-停采线
then begin
Add_point(CenterPoint,0,0,0);
StrPos:=ADOT_Points.fieldbyname('Point_Id').AsInteger;
end;
if Sp_f=1 //1-断层交点
then begin
IsP:=P1EqualP2(CenterPoint,StartPoint);
if IsP=true
then StrPos:=Sp_Id
else StrPos:=Ep_Id;
end;
with ADOT_Stop do
begin
Append;
fieldbyname('LType').asinteger:=ACAD.ObjItemId;
fieldbyname('StopL_Id').asinteger:=ObjId;
fieldbyname('Graphic_Id').asinteger:=Graphic_Id;
fieldbyname('InS_LType').asinteger:=EId;
fieldbyname('InS_Hnd').asstring:=Hnd;
fieldbyname('Stop_Id').asinteger:=StrPos;
fieldbyname('Sp_F').AsInteger:=Sp_F;
post;
end;
end;
end;
procedure TRead_Graph.ReadGraph(GraphName: string);//读取图纸数据
var ItemId,Id,PCou,EnId:integer;
Isexist:boolean;
begin
Graphic_Id:=frm_data.ADOT_Graph.fieldbyname('Graphic_Id').AsInteger;
ObjectCount:=0; //记录读取处理的实体个数,注意与下面的ObjCount变量区别
ACAD:=TGetCADData.Create;
Hint_Frm.Caption:='处理过程提示';
Hint_Frm.DockSite:=false;
Hint_Frm.Button1.Enabled:=false;
Hint_Frm.Label1.Caption:='正在取得实体的个数.....';
Hint_Frm.Show;
Frm_Gra.Refresh;
with ACAD do
begin
if Link_CAD then exit;
Open_doc(GraphName);//打开图形
AcadApp.visible:=false;
ObjCount:=AcadMod.Count;
//frm_main.sbar.Panels[0].Text:='正在取得实体的个数.....';
//frm_main.Step:=frm_main.Sbarlen/ObjCount;
//frm_main.PosId:=0;
//frm_main.col:=clMedGray;
Id:=0;
try
for ItemId:=0 to ObjCount-1 do
begin
//inc(frm_main.PosId);
//frm_main.SbarFull;
Hint_Frm.Refresh;
Frm_Gra.Refresh;
ObjItem:=AcadMod.item(ItemId);
EnId:=ObjItem.entityType;
if (((Pos('工作面',ObjItem.Layer)<>0)and(ObjItem.Color=1)and(ObjItem.LineType='DASHED'))
or(Pos('断层',ObjItem.Layer)<>0))and((EnId=2)or(EnId=19)or(EnId=24))
and(IsSimple<>2)
then inc(Id);
if (Pos('断层',ObjItem.Layer)<>0)and((EnId=21)or(EnId=32)) then Id:=Id-1;
end;
//frm_main.sbar.Panels[0].Text:='正在读取开拓平面图.....';
Hint_Frm.Label1.Caption:='正在读取开拓平面图.....';
Hint_Frm.Refresh;
Frm_Gra.Refresh;
ObjCount:=AcadMod.Count*(Id+1)+AcadDoc.Layers.count
+AcadDoc.LineTypes.count
+AcadDoc.TextStyles.count;
//frm_main.Step:=frm_main.Sbarlen/ObjCount;
//frm_main.PosId:=0;
//frm_main.col:=clMedGray;
RS_Layer(Layers); //把图纸中的所有图层信息读入到Layers中
Add_Layer; //TReadGraph类的一个过程,把图层信息加入到数据表ADOT_Layer中去
// RS_TextStyle(TextStyles,Fontfiles); Add_TextStyle;
RS_LineType(LineTypes); Add_LineType; //读取线型信息,并加入到数据表中
{根据简单和复杂两种情况分别读取矿井开拓平面图的数据}
ObjCount:=AcadMod.Count;
for ItemId:=0 to ObjCount-1 do
begin
//inc(frm_main.PosId);
//frm_main.SbarFull;
ObjItem:=AcadMod.item(ItemId);
if IsSimple=0 then //简单读图
begin
TLayer:=ObjItem.Layer;
if Pos('工作面',TLayer)+Pos('大巷',TLayer)+Pos('断层',TLayer)=0 then Continue;
end;
ObjItemId:=ObjItem.entityType;
inc(ObjectCount); //记录读取处理的实体个数,注意与ObjCount变量区别
case ObjItemId of //如果是简单获取,则只获取巷道和工作面数据
//如果是复杂获取,则获取所有的图形数据
//1:;
2, 24: //3Dpoly,Pline
begin
RS_3DPoly(PCou,ListPoints,Widthlist,Buglelist,TCol,TClosed,TLayer,TLineType,THandle);
Isexist:=frm_data.ADOT_Pline.Locate('Graphic_Id;Handle',vararrayof([Graphic_Id,THandle]),[LocaseInsensitive]);
if Isexist //如果存在该多段线,则返回开始下一个循环
then begin
{if (((Pos('工作面',TLayer)<>0)and(TCol=1)and(TLineType='DASHED'))
or((pos('断层',TLayer)<>0)and(ObjItemId=24)and(Widthlist[0]=0)
and(Widthlist[2*(PCou-1)-1]=0)))
and(IsSimple<>2)
then for Id:=0 to ObjCount-1 do
begin
//inc(frm_main.PosId);
//frm_main.SbarFull;
end;}
continue;
end;
for Id:=0 to PCou-1 do
begin
//把多段线上的定位点(包括起点和终点)信息加入数据库
Add_Point(ListPoints[Id],Widthlist[2*Id],Widthlist[2*Id+1],BugleList[Id]);
//标记起点
if Id=0 then Sp_Id:=frm_data.ADOT_Points.fieldbyname('Point_Id').AsInteger;
//标记终点
if Id=PCou-1 then Ep_Id:=frm_data.ADOT_Points.fieldbyname('Point_Id').AsInteger;
end;
Add_3DPoly;//把多段线加入数据表中
//如果是停采线,则进一步处理。(停采线在工作面图层,为红色点划线)
if (Pos('工作面',TLayer)<>0)and(TCol=1)
and(TLineType='DASHED')and(IsSimple<>2)
then begin
ObjId:=frm_data.ADOT_Pline.fieldbyname('Pline_Id').AsInteger;
Add_StopLine(0,'工作面');
end;
//处理断层线
{if (pos('断层',TLayer)<>0)and(ObjItemId=24)
and(Widthlist[0]=0)and(Widthlist[2*(PCou-1)-1]=0)
and(IsSimple<>2)
then begin
ObjId:=frm_data.ADOT_Pline.fieldbyname('PLine_Id').AsInteger;
Add_StopLine(1,'断层');
end; }
end;
//3:;
4:begin//Arc
RS_Arc(CenterPoint,TCol,Radius,TStartAng,TEndAng,TLayer,TLineType,THandle);
Isexist:=frm_data.ADOT_Arc.Locate('Graphic_Id;Handle',vararrayof([Graphic_Id,THandle]),[LocaseInsensitive]);
if Isexist then continue;
Add_Point(CenterPoint,0,0,0);
CenP_Id:=frm_data.ADOT_Points.fieldbyname('Point_Id').AsInteger;
Add_Arc;
end;
//5:; 6:; 7:;
8:begin //Circle
RS_Circle(CenterPoint,TCol,Radius,TLayer,TLineType,THandle);
Isexist:=frm_data.ADOT_Circle.Locate('Graphic_Id;Handle',vararrayof([Graphic_Id,THandle]),[LocaseInsensitive]);
if Isexist then continue;
Add_Point(CenterPoint,0,0,0);
CenP_Id:=frm_data.ADOT_Points.fieldbyname('Point_Id').AsInteger;
Add_Circle;
end;
//9:; 10:; 11:; 12:; 13:; 14:; 15:;
16:begin
RS_Ellipse(CenterPoint,EndPoint,TCol,Radius,TStartAng,TEndAng,TLayer,TLineType,THandle);
Isexist:=frm_data.ADOT_Arc.Locate('Graphic_Id;Handle',vararrayof([Graphic_Id,THandle]),[LocaseInsensitive]);
if IsExist then continue;
Add_Point(CenterPoint,0,0,0);
CenP_Id:=frm_data.ADOT_Points.fieldbyname('Point_Id').AsInteger;
Add_Point(EndPoint,0,0,0);
Ep_Id:=frm_data.ADOT_Points.fieldbyname('Point_Id').AsInteger;
Add_Ellipse;
end;
//17:;18:;
19:begin //line
RS_Line(StartPoint,EndPoint,TCol,TLayer,TLineType,Thandle);
Isexist:=frm_data.ADOT_line.Locate('Graphic_Id;Handle',vararrayof([Graphic_Id,THandle]),[LocaseInsensitive]);
if Isexist
then begin
if (((Pos('工作面',TLayer)<>0)and(TCol=1)
and(TLineType='DASHED'))or(pos('断层',TLayer)<>0))
and(IsSimple<>2)
then for Id:=0 to ObjCount-1 do
begin
//inc(frm_main.PosId);
//frm_main.SbarFull;
end;
continue;
end;
Add_Point(StartPoint,0,0,0);
Sp_Id:=frm_data.ADOT_Points.fieldbyname('Point_Id').AsInteger;
Add_Point(EndPoint,0,0,0);
Ep_Id:=frm_data.ADOT_Points.fieldbyname('Point_Id').AsInteger;
Add_Line;
if (Pos('工作面',TLayer)<>0)and(TCol=1)
and(TLineType='DASHED')and(IsSimple<>2)
then begin
ObjId:=frm_data.ADOT_line.fieldbyname('Line_Id').AsInteger;
Add_StopLine(0,'工作面');
end;
if (pos('断层',TLayer)<>0)and(IsSimple<>2)
then begin
ObjId:=frm_data.ADOT_line.fieldbyname('Line_Id').AsInteger;
Add_StopLine(1,'断层');
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -