• Flex 加载dxf


     因为已经写过加载dwg了,dxf应该不陌生,dxf是个开源格式,所以加载比较简单这里直接附上as的代码,但是真正使用场景还是比较少,dwg文件比较多

      1 package widgetscadastre.SZ_ImportCAD 
      2 {
      3     /**
      4      * ...
      5      * @author haibalai
      6      */
      7     import com.esri.ags.Graphic;
      8     import com.esri.ags.geometry.Extent;
      9     import com.esri.ags.geometry.MapPoint;
     10     import com.esri.ags.geometry.Polygon;
     11     import com.esri.ags.geometry.Polyline;
     12     import com.szpl.extension.base.impl.AccessPoint;
     13     import flash.events.Event;
     14     import flash.net.FileFilter;
     15     import flash.net.FileReference;
     16     import flash.utils.Dictionary;
     17     
     18     import mx.collections.ArrayCollection;
     19     import mx.controls.Alert;
     20     import mx.utils.ObjectUtil;
     21     import mx.utils.StringUtil;
     22     
     23     public class DxfTool 
     24     {
     25         
     26         public function DxfTool() 
     27         {
     28             
     29         }
     30         
     31         
     32 
     33         
     34         [Bindable]
     35         private var layerList:ArrayCollection = null;
     36         
     37         private var coorArray:Array = null;
     38         private var initExtent:Extent = null;
     39         
     40         private var _callFun:Function;
     41         public function dxfLoad(bytedata:String,callFun:Function = null)
     42         {
     43             _callFun = callFun;
     44             dxfHandle(bytedata);
     45             
     46         }
     47         
     48         
     49         
     50         private function dxfHandle(coorStr:String):void
     51         {
     52                 
     53                 layerList = new ArrayCollection;
     54                 try
     55                 {
     56                     
     57                     coorArray = StringUtil.trim(coorStr).split("
    ");
     58                     
     59                     var i:int=0;  //当前读取的行数
     60                     var entitiesRowNum:int = 0; //实体所在行数
     61                     initExtent = new Extent;
     62                     
     63                     while(i<coorArray.length)
     64                     {
     65                         if(StringUtil.trim(coorArray[i]).toUpperCase()=="$LIMMIN")   //读取地图范围
     66                         {
     67                             i = i + 2;
     68                             initExtent.xmin = Number(StringUtil.trim(coorArray[i]));  //最小x
     69                             i = i + 2;
     70                             initExtent.ymin = Number(StringUtil.trim(coorArray[i]));  //最小y
     71                         }
     72                         else if(StringUtil.trim(coorArray[i]).toUpperCase()=="$LIMMAX")
     73                         {
     74                             i = i + 2;
     75                             initExtent.xmax = Number(StringUtil.trim(coorArray[i]));  //最大x
     76                             i = i + 2;
     77                             initExtent.ymax = Number(StringUtil.trim(coorArray[i]));  //最大y
     78                         }
     79                         else if(StringUtil.trim(coorArray[i]).toUpperCase()=="ENTITIES")
     80                         {
     81                             entitiesRowNum=i;  //记录实体所在行位置
     82                             i++;
     83                             break;
     84                         }
     85                         i++;
     86                     }
     87                     
     88                     var dictionary:Dictionary = new Dictionary;
     89                     //加载图层
     90                     while(i<coorArray.length)
     91                     {
     92                         if(StringUtil.trim(coorArray[i])=="8") //读取到图层
     93                         {
     94                             i++;
     95                             if (dictionary[StringUtil.trim(coorArray[i])]==null) //判断图层是否存在
     96                             {
     97                                 var obj:Object = {name:StringUtil.trim(coorArray[i]), RowNum:i};  //图层名及图层所在行数
     98                                 dictionary[StringUtil.trim(coorArray[i])]=obj;
     99                                 this.layerList.addItem(obj);
    100                             }
    101                             
    102                             
    103                             i++;
    104                         }
    105                         if(StringUtil.trim(coorArray[i])=="")  //遇到空行则终止循环
    106                         {
    107                             i++;
    108                             break;
    109                         }
    110                         i++;
    111                     }
    112                 }
    113                 catch(e:Error)
    114                 {
    115                     Alert.show("读取有误:"+e.message.toString());
    116                 }
    117                 loadLayer()
    118 
    119         }
    120         
    121         private function loadLayer():void
    122         {
    123             var coord:String = "";
    124             var graphicArr:Array = new Array();
    125             if(layerList!=null)
    126             {
    127                 for (var j:int = 0; j < layerList.length; j++ )
    128                 {
    129                     
    130                 
    131                     var layerObj:Object = layerList[j];
    132                     var i:Number = layerObj.RowNum; //当前图层所在行数
    133                     while(i < coorArray.length)
    134                     {
    135                         if(StringUtil.trim(coorArray[i]) == layerObj.name)  //找到对应图层
    136                         {
    137                             i++;
    138                             while(i<coorArray.length)
    139                             {
    140                                 if(StringUtil.trim(coorArray[i])=="100")
    141                                 {
    142                                     i++;
    143                                     break;
    144                                 }
    145                                 i++;
    146                             }
    147                             
    148                             switch(StringUtil.trim(coorArray[i]))
    149                             {
    150                                 case "AcDbPolyline":
    151                                 {
    152                                     i = i + 2; 
    153                                     var iNodeCount:Number = Number(StringUtil.trim(coorArray[i]));  //顶点个数
    154                                     i = i + 2; 
    155                                     var geomeryType:String = StringUtil.trim(coorArray[i]); //图形类型
    156                                     
    157                                     i = i + 2;
    158                                     var pointArray:Array = new Array;
    159                                 
    160                                     while(pointArray.length < iNodeCount)
    161                                     {
    162                                         var mapPoint:MapPoint = new MapPoint;
    163                                         i = i + 2;
    164                                         
    165                                         mapPoint.x = Number(StringUtil.trim(coorArray[i]));   //x坐标
    166                                         i = i + 2;
    167                                         
    168                                         mapPoint.y = Number(StringUtil.trim(coorArray[i]));   //y坐标
    169                                         
    170                                         pointArray.push(mapPoint);
    171                                         
    172                                         
    173                                     }
    174                                     if(geomeryType == "0")   //  0代表折线
    175                                     {
    176                                         //var paths:Array = new Array;
    177                                         //paths.push(pointArray);
    178                                         //
    179                                         //var polyline:Polyline = new Polyline;
    180                                         //polyline.paths = paths;
    181                                         //
    182                                         //var gra:Graphic = new Graphic;
    183                                         //gra.geometry = polyline;
    184                         
    185                                     }
    186                                     else if(geomeryType == "1")  //  1代表折线闭合为多边形
    187                                     {
    188                                         var rings:Array = new Array;
    189                                         rings.push(pointArray);
    190                                         
    191                                         var polygon:Polygon = new Polygon;
    192                                         polygon.rings = rings;
    193                                         
    194                                         var graphic:Graphic = new Graphic;
    195                                         graphic.geometry = polygon;
    196                                         graphicArr.push(graphic);
    197                                         
    198                                             
    199                                     }
    200                                     break;
    201                                 }
    202                                 case "AcDbLine":
    203                                     break;
    204                                 case "AcDbPoint":
    205                                     break;
    206                                 case "AcDbSpline":
    207                                     
    208                                     break;
    209                             }
    210                             i++;
    211                         }
    212                         else
    213                         {
    214                             i++;
    215                         }
    216                     }
    217                     
    218                 }
    219                 
    220             }
    221             if (graphicArr.length > 0)
    222             {
    223                 for each(var graphic:Graphic  in graphicArr)
    224                 {
    225                     coord += AccessPoint.exchange.polygon_to_CoordText(graphic.geometry as Polygon) + "*";
    226                 }
    227                 coord = coord.substring(0,coord.length - 1)
    228                 
    229             }
    230               
    231             _callFun.call(null, coord);
    232         }
    233         
    234     }
    235 
    236 }
  • 相关阅读:
    ESP8266-12F引脚接法
    esp8266物联网开发六:让ESP32-CAM五彩斑斓
    esp8266物联网开发五:SSL保驾护航
    esp8266物联网开发四:MQTT再论部控
    esp8266物联网开发三:MQTT初窥貌容
    esp8266物联网开发二:Arduino名门正派
    esp8266物联网开发一:MicroPython初战江湖
    一些错误记录
    jimdb压测踩坑记
    Caffeine批量加载浅析
  • 原文地址:https://www.cnblogs.com/haibalai/p/5030985.html
Copyright © 2020-2023  润新知