• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Android的DXF文件解析以及數(shù)控代碼的生成

      2018-06-19 03:19:16廈門盈趣科技股份有限公司周春林張燕鵬黃智全李立鋒蔡權(quán)權(quán)
      電子世界 2018年11期
      關(guān)鍵詞:凸度圓弧代碼

      廈門盈趣科技股份有限公司 周春林 張燕鵬 黃智全 李立鋒 蔡權(quán)權(quán)

      1 引言

      就目前而且AutoCAD仍然是國(guó)際市場(chǎng)上廣為流行的繪圖軟件,而市場(chǎng)上也有很多將AutoCAD中的圖形輪廓轉(zhuǎn)換為數(shù)據(jù)加工所需要使用到的G代碼的方法。但是這些方法基本使用場(chǎng)景都是局限于臺(tái)式電腦以及數(shù)控機(jī)臺(tái)配套的顯示屏。如果可以使用Android平板電腦,直接生成下位機(jī)所需要的數(shù)控加工代碼,將提高編程操作的便捷性以及編程的可視性,提高了編程的效率。

      2 DXF解析與轉(zhuǎn)換

      DXF是AutoCAD中的一種文件格式,其中DXF的ASCII數(shù)據(jù)格式具有良好的可讀性。DXF可以使用文本編輯器打開(kāi),會(huì)發(fā)現(xiàn)DXF是由多個(gè)單行的數(shù)據(jù)組成。DXF文件主要包含了六個(gè)文件段,而我們主要關(guān)心的是實(shí)體段(ENTITIES SECTION),里面包含了圖形信息,DXF的解析過(guò)程即將這些圖形信息轉(zhuǎn)換為我們所需要的JAVA實(shí)體類。由于DXF是多行的數(shù)據(jù)組成,可以直接將整個(gè)DXF文件作為輸入流,一行一行的去讀取DXF文件。實(shí)體段中我們所需要的實(shí)體段主要有直線、圓、圓弧、橢圓、多線段??梢酝ㄟ^(guò)表1的組碼信息去解析DXF文件,并且新建對(duì)應(yīng)的Java實(shí)體類保存這些信息。而在DXF中的實(shí)體中有多線段,多線段的組碼42為凸度,凸度為0表示兩點(diǎn)之間沒(méi)有弧度,兩點(diǎn)形成直線。凸度絕對(duì)值小于1表示圓弧包角小于180°,凸度絕對(duì)值大于1表示圓弧包角大于180°。而凸度小于0表示圓弧包角為逆時(shí)針,凸度大于0表示圓弧包角為順時(shí)針。

      凸度為四分之一圓角的正切值,由此可以計(jì)算出凸度的圓角。由此可以計(jì)算出該圓角的圓弧以及半徑。從而計(jì)算出該圓弧的起始角度以及終止角度。

      最后可將多線段轉(zhuǎn)換為圓弧以及直線。

      表1 DXF組碼信息

      3 DXF在Android系統(tǒng)中的繪制

      將DXF中的圖形信息解析為對(duì)應(yīng)的實(shí)體類以后,想要利用這些信息在Android應(yīng)用中繪制出CAD圖,還需要將各個(gè)實(shí)體的坐標(biāo)信息進(jìn)行轉(zhuǎn)換,由于Java坐標(biāo)系和CAD坐標(biāo)系是Y軸的正方向不同的,并且DXF的圖形區(qū)域和Java的圖形區(qū)域是不同的,所以還需要將DXF的坐標(biāo)系轉(zhuǎn)換為Java坐標(biāo)系。首先利用如下公式計(jì)算出DXF轉(zhuǎn)換為Java坐標(biāo)系所需要放大或者縮小的倍數(shù)。其中dxfMaxX、dxfMinX、dxf-MaxY以及dxfMinY為解析出的DXF圖形信息中的最大值和最小值。screenWidth和screenHeight為Android圖形區(qū)域的分辨率。

      float autoXSpace = dxfMaxX - dxfMinX;

      float autoYSpace = dxfMaxY - dxfMinY;

      float Nx = autoXSpace / screenWidth;

      float Ny = autoYSpace / screenHeight;

      float multiple = Math.max(Nx, Ny);

      計(jì)算出兩者之間轉(zhuǎn)換的倍數(shù)以后,在通過(guò)如下公式計(jì)算出各個(gè)實(shí)體的Java坐標(biāo)系。

      float javaX = (dxfX - dxfMinX) / multiple;

      float javaY = (dxfMaxY - dxfY) / multiple;

      至于圓弧以及整圓的半徑直接除以倍數(shù)即可。

      利用Android自定義View以及Canvas即畫板在視圖中繪制DXF圖形,利用paint(畫筆)以及Android的繪圖API,drawLine、draw-Circle以及drawArc去繪制對(duì)應(yīng)的CAD圖形,使用的坐標(biāo)是轉(zhuǎn)換后的Java坐標(biāo)。

      需要注意的是在DXF的坐標(biāo)系中圓弧的角度是順時(shí)針?lè)较?,而drawArc繪制的圓弧時(shí)逆時(shí)針的,所以要繪制出和DXF圖形中的圓弧信息一樣,需要使用360-圓弧的終止角度作為起始角度,然后計(jì)算出圓弧掃過(guò)的區(qū)域,最后利用drawArc在Java坐標(biāo)系中繪制出圓弧的圖形。

      經(jīng)過(guò)如上的步驟即可在Android應(yīng)用中繪制出DXF圖形,經(jīng)過(guò)如下公式的可實(shí)現(xiàn)圖形的放大、縮小以及平移。

      縮放時(shí)兩指的中點(diǎn)坐標(biāo) - (縮放時(shí)兩指的中點(diǎn)坐標(biāo)– 圖形Java坐標(biāo)) * 當(dāng)前縮放的倍數(shù) / 上一次縮放的倍數(shù) + 當(dāng)前坐標(biāo)的偏移量– 上一次的偏移量;

      經(jīng)過(guò)上述公式的運(yùn)算可重新計(jì)算出Java的坐標(biāo),再利用當(dāng)前的坐標(biāo)重新繪制CAD圖形。即可實(shí)現(xiàn)DXF圖形的放大、縮小以及平移。如圖1所示 。

      圖1 DXF在Android平板中的繪制

      4 數(shù)控代碼的生成

      將DXF圖形在Android系統(tǒng)中繪制出并實(shí)現(xiàn)圖形區(qū)域的放大、縮小以及平移后。可通過(guò)監(jiān)聽(tīng)Android圖形區(qū)域的點(diǎn)擊事件,獲取當(dāng)前點(diǎn)擊的坐標(biāo)點(diǎn)。通過(guò)當(dāng)前的坐標(biāo)點(diǎn)和實(shí)體類中的Java坐標(biāo)系,計(jì)算出點(diǎn)擊點(diǎn)到各個(gè)實(shí)體類圖形區(qū)域的距離。對(duì)于直線可通過(guò)點(diǎn)到直線之間的距離計(jì)算,點(diǎn)到整圓的距離可通過(guò)點(diǎn)到圓心的距離減去半徑計(jì)算。而點(diǎn)到圓弧的距離可計(jì)算點(diǎn)擊點(diǎn)到圓弧的起點(diǎn)與終點(diǎn)的中點(diǎn)距離。通過(guò)計(jì)算出哪個(gè)實(shí)體類離點(diǎn)擊點(diǎn)最近。取出當(dāng)前的實(shí)體類到列表中。

      拾取完相應(yīng)的實(shí)體類以后,可利用實(shí)體類中的DXF坐標(biāo),將這些實(shí)體類信息,轉(zhuǎn)換為G代碼。

      直線軌跡的G代碼為:

      G00 X1 Y1 Z1

      G01 X2 Y2 Z2

      其中X1,Y1和Z1代表的直線DXF中的起點(diǎn)坐標(biāo)。X2,Y2和Z2代表的是直線DXF的終點(diǎn)坐標(biāo)。

      整圓以及圓弧的軌跡G代碼為:

      G02 X Y Z I J K

      G03 X Y Z I J K

      其中G02表示順時(shí)針,G03表示逆時(shí)針。其中X、Y和Z表示圓弧的終點(diǎn)坐標(biāo),需要注意的是圓弧的終點(diǎn)坐標(biāo)就是起點(diǎn)坐標(biāo)。I、J和K表示的是起點(diǎn)坐標(biāo)到圓心坐標(biāo)的映射。以上是基礎(chǔ)的圖形軌跡G代碼,可結(jié)合自定義的輔助代碼,生成G代碼文件。并且通過(guò)WIFI傳送到下位機(jī),使下位機(jī)運(yùn)行特定的軌跡以及執(zhí)行相應(yīng)的動(dòng)作。

      5 總結(jié)

      使用Android平板去導(dǎo)入CAD圖形,并且可在平板中繪制出DXF圖形??蛇x擇所需要加工的軌跡,最后根據(jù)直線以及圓弧的G代碼軌跡,生成對(duì)應(yīng)的G代碼文件,將所生成的G代碼文件,通過(guò)WIFI下載到數(shù)控機(jī)床,可以實(shí)現(xiàn)移動(dòng)示教,提高了示教的靈活性以及便捷性。

      [1]曹斌,李光耀等.基于DXF文件格式的二維復(fù)雜圖形數(shù)控代碼自動(dòng)生成法[M].機(jī)械設(shè)計(jì)與制造,2003,2.

      [2]孫成才,孫喜梅等.AutoCAD的DXF文件格式及其轉(zhuǎn)換接口研究[M].微型電腦應(yīng)用,2001,8.

      [3]陳樹(shù)敏等.DXF文件實(shí)體解析及其Java最小包絡(luò)矩形的實(shí)現(xiàn)[M].廣東省高性能計(jì)算重點(diǎn)實(shí)驗(yàn)室建設(shè),2010,6.

      [4]左大利.DXF文件實(shí)體解析及其Java最小包絡(luò)矩形的實(shí)現(xiàn)[M].機(jī)電工程技術(shù),2010,39(8):136-137.

      猜你喜歡
      凸度圓弧代碼
      利用軸線交錯(cuò)修整砂輪凸度曲線的方法探討
      哈爾濱軸承(2022年1期)2022-05-23 13:12:58
      淺析圓弧段高大模板支撐體系設(shè)計(jì)與應(yīng)用
      3800mm中板軋機(jī)變凸度工作輥輥形研究①
      基于精軋平坦度優(yōu)先的凸度分配策略
      異步凸度軋制對(duì)AZ31鎂合金板坯損傷抑制分析
      外圓弧面銑削刀具
      創(chuàng)世代碼
      創(chuàng)世代碼
      創(chuàng)世代碼
      創(chuàng)世代碼
      兰溪市| 石河子市| 宿松县| 高清| 边坝县| 杨浦区| 澄城县| 岫岩| 东阿县| 广西| 孝昌县| 花莲市| 阜平县| 都兰县| 乌鲁木齐市| 温州市| 突泉县| 宁远县| 泰来县| 宿州市| 阳新县| 新郑市| 句容市| 上犹县| 安阳县| 瑞金市| 西乌珠穆沁旗| 玉龙| 恭城| 融水| 久治县| 温泉县| 班玛县| 芒康县| 望都县| 监利县| 铅山县| 灯塔市| 浙江省| 广州市| 三台县|