解斌,朱大勇,郝煜
(1.武漢市勘測設計研究院,湖北武漢 430022;2.天津市勘察院,天津 300191)
AutoDesk公司的AutoCAD軟件,以其杰出的圖形編輯和處理能力得到了廣泛應用。在應用中,常常需要結合專業情況將圖形繪制功能進行擴充,僅靠Auto-CAD自身的功能,難以滿足應用中對效率的需求。在筆者的工作中,常常需要對房屋分成平面示意圖中的房屋邊長進行標注。雖然AutoCAD提供了長度的標注功能,但是手工對每條邊進行標注,不僅耗時,而且標注位置難以精確控制,也無法形成統一的標準。
本文對邊長自動標注的方法進行了闡述。經該方法生成的標注滿足以下幾個特點:①標注垂直于所標注邊長;②連續共線的多線統一標注;③所有標注到標注邊長的垂距相等;④標注點位于標注邊長的中心;⑤標注文字已標注點位中心居中對齊。
ObjectARX是一種開發AutoCAD應用程序的工具,它以C++為編程語言,采用先進的面向對象的編程原理,提供可與AutoCAD直接交互的開發環境,能使用戶方便快捷地開發出高效簡潔的AutoCAD應用程序。其主要特點如下:
(1)能對AutoCAD的所有事務進行完整的、先進的、面向對象的設計與開發,相比其他二次開發工具其速度更快、集成度更高、穩定性更強。
(2)ObjectARX包含的動態鏈接庫與AutoCAD在同一地址空間運行并能直接利用AutoCAD核心數據結構和代碼,使二次開發者可以充分利用AutoCAD的開放結構,直接訪問AutoCAD數據庫結構、圖形系統以及CAD幾何造型核心,以實時擴展AutoCAD的功能,創建能全面享受AutoCAD固有命令的新命令。
(3)ObjectARX可以按需要加載應用程序,并可以在同一水平上與Windows系統集成,甚至與其他Windows應用程序實現交互操作。
使用ObjectARX開發技術,可以創建快速、高效、緊湊的AutoCAD程序,使ARX應用程序不僅具有交互性、綜合性,而且還具有智能性。應用ObjectARX技術生成的ARX應用程序充分體現了ObjectARX技術的優點,同時還可在不同的操作系統中移植。
(1)自動標注基本過程
第一步:手工點選待標注的閉合多邊形。
第二步,計算標注點相對標注邊的方向值。標注點在直線左邊,則相對方向值為90°,否則取270°。
第三步:逐個標注邊長。根據邊的兩個端點及第二步計算的標注方向值,計算標注點,并加入標記到AutoCAD的圖形空間。
(2)計算標注點相對方向
標注點的相對方向,指的是標注點相對于所標注的線段的旋轉角。如圖1所示,閉合多邊形起點為a,止點為b,p1,p2為多邊形中待標注的線段。如標注在多邊形外部,則相對方向為90°,反之如標注在內部,相對方向則為270°。
算法過程如下:
第一步:取閉合多邊形第一點和第二點,并以其中點為基點用極坐標方法解算出與之相交90°、距離為0.5 m的標注點坐標。
第二步:取第一步計算的坐標點,判斷其是否在標注多邊形的內部。如該點坐標滿足注記的條件,則相對方向為90°,反之取270°。

圖1 標注點相對方向示意圖
(3)點鏈的旋轉與多余點的刪除
在實際繪圖過程中,會出現相鄰多點共線的情況,這時候要求把這些共線的點合并為一條邊來注記。為了簡化操作,必須避免起始點和終止點以及它們的相鄰點產生三點或多點共線的情況。一方面需要對多邊形的點鏈進行旋轉,務必使起始點處不出現三點及多點共線的情況。另一方面僅需保留多點共線時的端點,刪除中間點。我們把前后兩條邊不共線的點叫做拐點。點鏈的旋轉實際上是從起始點開始,找到第一個拐點,并以其作為點鏈的起始點,其操作過程只是改變點在點鏈中的位置。共線冗余點的刪除會改變點鏈的大小,實現過程中為了不改變原始圖形,對多邊形注記時首先復制多邊形點鏈,然后對復制的點鏈進行旋轉和刪除操作。
(4)逐邊計算標注點并注記
標注點的計算采用極坐標方法,利用ObjectARX提供的API函數acutPolar來實現。其函數原型如下:

第一個參數表示基準點,第二個參數表示兩點連線的方位角,第三個參數表示兩點之間的距離,第四個參數表示待求點。基準點一般取線段兩端點的中點,方位角取線段的方位角與相對方向之和,距離一般取注記高度的一半。
標注點計算出來后,便在標注點處插入標注。下面是具體實現的代碼:
acedCommand(RTSTR,"._dimaligned",RTPOINT,pt1,RTPOINT,pt2,RTPOINT,pt3,0);
參數pt1,pt2是標注線段的兩個端點,pt3是標注點坐標。acedCommand是一個API函數,其參數由一串參數類型及其值組成,并以0作為結束。如圖2和圖3是實際標注效果圖。

圖2 在房屋輪廓外標注效果圖

圖3 在房屋輪廓內標注效果圖
本文詳細介紹了AutoCAD平臺下多邊形邊長自動標注實現的方法,并利用VC.NET 2002和Object-ARX 2005作為開發工具,實現了該方法,給出了應用實例。通過實踐表明,該方法有較強的針對性和實用性,提高了房屋分成平面示意圖的生產效率。
[1] 李長勛.AutoCAD ObjectARX程序開發技術[M].北京:國防工業出版社,2005
[2] Harvey M.Deitel,Paul J.Deitel著.郭凱,蔡飛譯.VC++.NET高級編程[M].北京:清華大學出版社,2004
[3] 張晉西.Visula Basic與AutoCAD二次開發[M].北京:清華大學出版社,2002
[4] 張帆.ObjectARX開發實例教程[M].北京智帆高科科技有限公司,2007
[5] Charles McAuley著.李世國,潘建忠,平雪良譯.Programming AutoCAD 2000 Using ObjectARX[M].北京:機械工業出版社,2000
[6] 李冠億.深居淺出AutoCAD二次開發開發基礎.2010