999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

AutoCAD中圓弧折線化方法與實現

2016-11-28 07:14:33劉虎
城市勘測 2016年5期
關鍵詞:二次開發方法

劉虎

(蚌埠市勘測設計研究院,安徽 蚌埠 233000)

?

AutoCAD中圓弧折線化方法與實現

劉虎*

(蚌埠市勘測設計研究院,安徽 蚌埠 233000)

AutoCAD作為一種重要的地形圖制圖軟件,圖中存在大量的圓弧圖元。由于圓弧只有端點或圓心坐標,弧線本身缺乏精確的坐標信息,因此導致一些數據檢查時出錯。AutoCAD軟件本身不提供圓弧轉折線的功能。本文嘗試采用等角切分方法,利用VBA二次開發技術,在保持圖形原有特征及精度要求的前提下,將圓弧、圓及多段線中的圓弧分別轉換為純折線的多段線,從而去除圓弧部分。滿足基礎地理信息數據庫建庫等特殊的數據需求。

AutoCAD;圓弧;等角切分;折線

1 前 言

AutoCAD以其友好的界面設計,命令與鼠標相結合的操作模式,尤其是強大的制圖與設計功能,豐富的二次開發環境,在工程制圖、地形圖測繪等領域應用廣泛,成為矢量制圖生產的首要軟件之一[1]。軟件提供了包括各種圖形對象繪制、圖形編輯、三維模型構建及相關標注等豐富的制圖功能,能夠滿足大多數生產需要。但AutoCAD是一種面向各行業的通用軟件平臺,在一些特定領域略顯不足,如數據庫管理等[2]。國內測繪行業多用AutoCAD作為地形圖繪制工具,而將現有AutoCAD格式地形圖轉為地理信息系統(GIS)數據時,不可避免的涉及精度與屬性問題[3]。在AutoCAD繪制地形圖中,在采集類似道路路口、花壇等有一定弧度的地物要素時,經常采用圓弧或圓來繪制。采用圓弧,達到了方便、美觀的制圖目的,但其缺陷也是明顯的,弧線缺少精確的點位坐標。弧線是通過一定參數模擬繪制出來的,缺乏坐標明確標示,在GIS數據拓撲處理中,很容易出現重疊、縫隙等錯誤。如何將圓弧(包括圓弧、圓及多段線中的弧段)轉為具有明確坐標的折線,就很有必要[4]。

AutoCAD本身不提供將圖形中圓弧轉為折線的命令或工具,一般采用第三方軟件來進行圓弧轉折線。本文嘗試采用AutoCAD自帶的VBA二次開發技術,制作一個數據處理工具,用于圖中圓弧向折線轉換,以期滿足GIS入庫需求,提高工作效率。

2 AutoCAD VBA開發與凸度

2.1 AutoCAD VBA二次開發

AutoCAD VBA二次開發環境是軟件自身攜帶的一種強大的軟件二次開發技術,具有VB的基本語法特征,且能與AutoCAD運行于同一處理空間,并通過ActiveX Automation接口實現對AutoCAD的編程控制,直接利用AutoCAD的圖形處理資源。可以通過AutoCAD命令VBAIDE啟動軟件開發環境,進行程序編寫[5]。2.2 凸度

凸度在AutoCAD多段線中指一個頂點與下一個頂點之間形成的弧之間角度的1/4的正切值,用于設置一段多段線的彎曲程度。凸度為0代表一個直線段,凸度為1代表一個半圓段,介于0~1之間為劣弧,大于1為優弧[6]。如圖1所示,圓弧AB對應圓心角為a,拱高h,弦長2s,則圓弧AB的凸度n為:

n=tan(a÷4)=h÷s

圖1 凸度

3 技術流程

3.1 技術流程

本文中處理的圓弧包括AutoCAD圖形文件中單獨繪制的圓弧(Arc)、圓(Circle)及多段線中弧段。圓弧折線化方法有兩種方式:等角和等距,這里采用等角方法。對于圓形,直接采用等角切分進行折線化。單獨的圓弧,則先轉換為多段線,然后采用多段線圓弧轉折線的方法進行轉換。總的技術流程如圖2所示。

圖2 圓弧折線化技術流程圖

3.2 圓弧折線化算法

在采用等角切分方法將圓弧轉折線的過程中,將用到AutoCAD自帶的一個方法:PolarPoint。其有三個參數,分別為:起點(StartPoint)、角度(Angle)和距離(Distance)。可以通過起點,按照一定角度,按照設定距離,獲取目標點的坐標(TargetPoint)。

TargetPoint =PolarPoint(StartPoint,Angle,Distance)

圓弧的凸度n,可以通過AutoCAD自帶方法GetBulge(i)獲取,其參數i為當前弧段起始節點的點號。

圓弧端點A、B的坐標分別為(x1,y1)、(x2,y2),則圓弧弦長2s為:

圓弧拱高h為:

h=|(s÷2)×n|

圓弧的半徑r為:

r=(h2+s2)÷(h×2)

獲取圓弧AB的弦的方向角AngleAB可以采用AutoCAD自帶函數AngleFromXAxis,參數為A、B兩點坐標:

AngleAB=AngleFromXAxis(A,B)

求取圓弧頂點朝向圓心的方位角AngleMidPtVector,其中PI=3.1415926:

AngleMidPtVector=Sgn(n)×PI÷2+AngleAB

求取圓弧AB弦中點坐標PtMid(x,y):

x=(x1+x2)÷2

y=(y1+y2)÷2

采用AutoCAD自帶方法PolarPoint獲取圓弧AB對應的圓心坐標PtCircle:

PtCircle=PolarPoint(PtMid,AngleMidPtVector,r-h)

求取圓弧對應圓心坐標后,可以按照圓心到圓弧端點A、B的方位角,按照等角切分的原則,逐個角度算出對應圓弧上的坐標值,并添加到多段線中,從而實現圓弧向多段線的轉換。

3.3 程序實現

在AutuoCAD VBA二次開發環境編寫處理程序,將圓弧、圓及含有圓弧的多段線,轉換為全部為折線的多段線。以一段弧線轉折線為例,主要代碼如下:

dblChord=GetDist2D(dblP1(0),dblP1(1),dblP2(0),dblP2(1)) '求出弦長

dblSagitta=Abs(dblChord / 2 * objPL.GetBulge(i)) '求出拱高

dbl_Bugle_Radius=(dblSagitta ^ 2 + (dblChord / 2) ^ 2) / dblSagitta / 2 '求出半徑

dblAngle_tmp=objDoc.Utility.AngleFromXAxis(dblP1,dblP2) '弦的方向角

dblMidPt_NormalVector=Sgn(objPL.GetBulge(i)) * PI / 2 + dblAngle_tmp '圓弧頂點朝向圓心的方位角,始終在圓弧內側,通過dblAngle_tmp加減PI/2實現

dblMidPt_tmp2(0)=(dblP1(0) + dblP2(0)) / 2

dblMidPt_tmp2(1)=(dblP1(1) + dblP2(1)) / 2

dblMidPt_tmp=objDoc.Utility.PolarPoint(dblMidPt_tmp2,dblMidPt_NormalVector,dbl_Bugle_Radius - dblSagitta)

vCenterPoint=dblMidPt_tmp '圓心坐標

dblAngle1=objDoc.Utility.AngleFromXAxis(dblMidPt_tmp,dblP1)

dblAngle2=objDoc.Utility.AngleFromXAxis(dblMidPt_tmp,dblP2)

If objPL.GetBulge(i) < 0 Then '獲取當前i節點起始的凸度值,且為順時針方向

np=i

objPL.SetBulge i,0 '將第一段圓弧設為直線

dblAngle=dblAngle1

If dblAngle1>dblAngle2 Then '圓弧未跨過X正軸,angle1到angle2沿順時針遞減

For dbl=dblAngle1 To dblAngle2 Step-dblAngleValue’按照切分角度,切分圓弧

dblAngle=dblAngle-dblAngleValue

dblMidPt_tmp=objDoc.Utility.PolarPoint(vCenterPoint,dblAngle,dbl_Bugle_Radius)

newVertex(0)=dblMidPt_tmp(0)

newVertex(1)=dblMidPt_tmp(1)

objPL.AddVertex np+1,newVertex’增加多段線節點

np=np+1

Next dbl

End If

圓弧轉為折線,轉換后所得折線與圓弧不可避免存在一定誤差。折線點越多,越密集,與圓弧的誤差越小,折線也更加圓滑,反之,則誤差越大。在程序中,可以通過設置切分的角度值,調整轉折線后的節點數,從而調整轉換精度。角度值越小,折線節點越多,精度越高。圖3中,a為原圖,包含1個圓,2個圓弧及1個全部為圓弧組成的多段線,b、c、d分別為采用切分角度為1度角、4度角、8度角轉換后的折線,轉換后的點密度和折線平滑度區別明顯。

圖3 圓弧轉折線

4 結 論

使用本文的轉換方法,編寫數據處理程序,通過選擇集過濾選擇圓弧、圓及多段線,并分別予以折線化處理,達到了設計目的,解決了生產中的實際需求,提高了工作效率。但方法本身尚有不足之處,首先缺少對橢圓、樣條等特殊曲線的折線化處理;其次欠缺對塊參照中的圓弧處理過程。這些將是后續改進與完善的方向。

[1] 崔先國,張明波. AutoCAD中擴展圖元數據的應用[J]. 礦山測量,1999(8).

[2] 周蓉,杜曉榮,張麗華等. 圖形系統二次開發環境的研究與實現[J]. 合肥工業大學學報,2004.

[3] 黃杏元,馬勁松,湯勤. 地理信息系統概論[M]. 北京:高等教育出版社,2001.

[4] 錢業宏,花向紅. AutoCAD擴展數據在地形圖建庫中的應用[J]. 城市勘測,2008(1).

[5] 王建設,時東玉,禇喆等. AutoCAD二次開發解決二調數據采集中的問題[J]. 現代測繪,2008(6).

[6] 張帆. AutoCAD+VBA二次開發教程[M]. 北京:清華大學出版社,2006(6).

The Method of Converting the Arc Into Broken Lines and its Implementation in AutoCAD

Liu Hu

(Bengbu Design and Research Institute of Geotechnical Investigation and Surveying,Bengbu 233000,China)

As an important topographic map mapping software,AutoCAD contains a lot of arc graphic elements in the graph. Due to the arc only include endpoint or the coordinates of the center of circle,and the arc itself do not has accurate coordinate information which leading to some error when checking data. But AutoCAD software itself does not provide the function of change arc into broken lines. In this paper,we try to propose a new method for dividing the arc into broken lines. In the proposed method,equiangular segmentation algorithm is used and VBA language is adopted for algorithm developing;it can maintains the original feature and the accuracy of the figure,and convert the arc of the circle and the arc of the multi-lines into the multi section lines of the pure line,respectively,thereby the arc part is removed. The proposed method can meet the special needs of basic geographic information database construction.

AutoCAD;the arc;equiangular segmentation;broken line

1672-8262(2016)05-129-03

P209

B

2016—04—22

劉虎(1983—),男,碩士,工程師,主要從事GIS數據處理、地理信息工程開發、航空攝影測量等工作。

猜你喜歡
二次開發方法
淺談基于Revit平臺的二次開發
甘肅科技(2020年20期)2020-04-13 00:30:02
西門子Operate高級編程的旋轉坐標系二次開發
淺談Mastercam后處理器的二次開發
模具制造(2019年3期)2019-06-06 02:11:02
學習方法
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
Micaps3.2 版本二次開發入門淺析
西藏科技(2015年12期)2015-09-26 12:13:51
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
捕魚
ANSYS Workbench二次開發在汽車穩定桿CAE分析中的應用
汽車零部件(2014年5期)2014-11-11 12:24:32
主站蜘蛛池模板: 免费A级毛片无码无遮挡| 国产在线91在线电影| 福利片91| 综合网天天| 国产亚洲精品97在线观看| 91一级片| 久久精品中文字幕少妇| 九色视频最新网址| 国产人人射| aaa国产一级毛片| 国产另类视频| 91人人妻人人做人人爽男同| 亚洲人成影视在线观看| 青草国产在线视频| 欧美日韩国产在线播放| 亚洲日本中文字幕天堂网| 亚洲国产综合精品中文第一| 亚洲欧美精品在线| 国产屁屁影院| 日日噜噜夜夜狠狠视频| 九九香蕉视频| AV无码无在线观看免费| 毛片卡一卡二| 亚洲国产成人在线| 午夜福利亚洲精品| 亚洲精品无码不卡在线播放| 欧美日韩福利| 成年人国产视频| 国产成人久视频免费 | 99久久精品免费视频| 99热这里只有精品国产99| 亚洲欧美日韩另类| 欧美成人看片一区二区三区| 这里只有精品在线播放| 夜夜操国产| 日本国产在线| 国产91久久久久久| 麻豆精品国产自产在线| 国产99视频免费精品是看6| 日本精品视频一区二区| 91久久天天躁狠狠躁夜夜| 亚洲三级a| 午夜日b视频| 欧美亚洲另类在线观看| 成年女人a毛片免费视频| 玩两个丰满老熟女久久网| 国产欧美视频综合二区 | 国模沟沟一区二区三区| 欧美在线精品怡红院 | 亚洲国产黄色| 青青热久麻豆精品视频在线观看| 人人91人人澡人人妻人人爽 | 一本久道热中字伊人| 狠狠色成人综合首页| 女人毛片a级大学毛片免费| 99视频在线精品免费观看6| 欧美精品xx| 亚洲第一网站男人都懂| 国内精品免费| 日韩123欧美字幕| 欧美一级专区免费大片| 国产成人无码综合亚洲日韩不卡| 精品久久久久久久久久久| 国产精品久久久免费视频| 日韩天堂在线观看| 久久这里只有精品国产99| 国产视频你懂得| 91偷拍一区| 国产自无码视频在线观看| 亚洲午夜国产精品无卡| 中国丰满人妻无码束缚啪啪| 综合亚洲网| 亚洲AV无码久久精品色欲| 波多野结衣中文字幕久久| 欧洲欧美人成免费全部视频| 日韩在线永久免费播放| 91免费观看视频| 老司国产精品视频91| 人人澡人人爽欧美一区| 国产美女人喷水在线观看| av在线5g无码天天| 99热这里只有精品久久免费|