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

📄 unt_readgra.pas

📁 煤矿行业采掘接替计划自动生成系统
💻 PAS
📖 第 1 页 / 共 5 页
字号:
   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 + -