" />

国产黄色毛片-国产黄色毛片视频-国产黄色片91-国产黄色片一级-一级坐爱片-一级免费

VBA實現AutoCadMap下電桿符號批量轉換

所屬欄目:電子技術論文 發布日期:2012-10-13 10:49 熱度:

  摘要:AutoCADMAP是我們所熟知的地理信息制圖的重要軟件之一,它不僅操作方便,而且功能十分強大.但由于我們需求的多樣性,它在有些方面已經不能滿足我們的需求.因此需要我們自己開發些功能來解決我們的需求問題.AutoCADMAP提供了強大的VBA開發技術,為我們實現AutoCADMAP的二次開發提供了有效的途徑.本文在為提高生產效率與準確度的環境下,基于VBA開發實現了AutoCADMAP電桿符號的批量轉換.
  關鍵詞:VBA,電桿符號,AutoCADMAP
  1引言
  所謂電桿符號既電力機車軌道兩旁的電桿.在我們進行數字化的時候,軌道載CAD中是一條平行雙線,而電桿則是作為符號分布在平行線的兩側,而且要求符號的方向要垂直于軌道方向.通常一條軌道兩側總計會有幾千個電桿符號,如果人工操作,則需要對每個符號進行處理,旋轉.這將極大的降低工作效率,而且準確度也得不到保障.為解決這種需求。AutoCADMAP提供了強大的VBA開發技術,為我們實現AutoCADMAP的二次開發提供了必要的接口,使我們能通過這些接口和VBA語言實現CAD電桿符號的批量轉換。
  2系統目標
  利用VBA語言與AutoCADMAP二次開發接口的結合,編寫程序實現電桿符號的批量轉換,提高生產效率,增強準確度.
  3系統設計方案
  (1)數據錄入,把要數字化的電力機車軌道和符號輸入到AutoCADMAP中,電桿符號中心線的末端要畫在軌道上或穿過軌道,如圖1所示:
  
  圖1
  (2)利用AutoCADMAP的打斷相交線工具,把剛才繪制的所有相交線打斷,刪除多余的部分,如圖2所示:
  
  圖2
  (3)通過以上兩個步驟,使電力機車軌道變成了很多條線段,使每相鄰兩個電桿符號都有一段獨立的機車軌道,通過編程獲取這段機車軌道的方向(線角度),把電桿符號分別相對這個角度旋轉正90度,負90度.通過程序分別選擇所有的軌道和電桿符號,通過遍歷,最終達到效果如圖3所示:
  
  圖3
  4主要程序代碼:
  SubDIANGAN()
  DimlayerObjAsAcadLayer
  SetlayerObj=ThisDrawing.Layers.Add("GBLOCK")
  DimAngleFirstAsDouble
  DimAngleSecondAsDouble
  DimselsetAsAcadSelectionSet
  DimselAsAcadSelectionSet
  DimFilterType(0)AsInteger
  DimFilterData(0)AsVariant
  DimvarAAsVariant
  DimvarBAsVariant
  DimintIAsInteger
  FilterType(0)=0
  FilterData(0)="LWPOLYLINE"
  varA=FilterType
  varB=FilterData
  IfThisDrawing.SelectionSets.Count<>0Then
  ForintI=0ToThisDrawing.SelectionSets.Count-1
  Setselset=ThisDrawing.SelectionSets.Item(intI)
  selset.Delete
  OnErrorResumeNext
  NextintI
  EndIf
  sset.Delete
  Setselset=ThisDrawing.SelectionSets.Add("SS3")
  selset.SelectOnScreenFilterType,FilterData
  Setsel=ThisDrawing.SelectionSets.Add("SS4")
  FilterType(0)=0
  FilterData(0)="LWPOLYLINE"
  sel.SelectOnScreenFilterType,FilterData
  DimpobAsAcadLWPolyline
  DimPOB2AsAcadLWPolyline
  DimJpointAsVariant,TpointAsVariant
  DimblockBHAsAcadBlockReference
  DimstrDirNameAsString
  Dimbj(10000,2)AsDouble
  DimrAsInteger,jAsInteger,cjAsInteger
  strDirName="D:G500編輯程序dqhtl.dwg"
  r=0
  cj=0
  ForEachpobInselset
  ForEachPOB2Insel
  cj=0
  Jpoint=pob.IntersectWith(POB2,acExtendNone)
  IfUBound(Jpoint)>0Then
  Forj=0Tor-1
  IfJpoint(0)=bj(j,0)AndJpoint(1)=bj(j,1)Then
  cj=cj+1
  EndIf
  Nextj
  bj(r,0)=Jpoint(0)
  bj(r,1)=Jpoint(1)
  r=r+1
  Ifcj>0Then
  Else
  Dimpp(2)AsDouble
  pp(0)=Jpoint(0)
  pp(1)=Jpoint(1)
  pp(2)=0
  DimkAsInteger
  Fork=0ToUBound(pob.Coordinates)
  Ifpob.Coordinate(0)(0)=Jpoint(0)Andpob.Coordinate(0)(1)=Jpoint(1)Then
  CallAngle(pob.Coordinate(0)(0),pob.Coordinate(0)(1),pob.Coordinate(1)(0),pob.Coordinate(1)(1),AngleFirst,AngleSecond)
  Else
  k=(UBound(pob.Coordinates)+1)/2-1
  CallAngle(pob.Coordinate(k-1)(0),pob.Coordinate(k-1)(1),pob.Coordinate(k)(0),pob.Coordinate(k)(1),AngleFirst,AngleSecond)
  EndIf
  Nextk
  SetblockBH=ThisDrawing.ModelSpace.InsertBlock(pp,strDirName,0.1,0.1,0.1,AngleFirst)
  blockBH.Layer="GBLOCK"
  SetblockBH=ThisDrawing.ModelSpace.InsertBlock(pp,strDirName,0.1,0.1,0.1,AngleSecond)
  blockBH.Layer="GBLOCK"
  EndIf
  EndIf
  NextPOB2
  Nextpob
  EndSub
  5結束語
  AutoCADMAP二次開發接口和VBA語言的結合所產生的作用是非常強大的,本文所實現的功能只是它的一個簡單的典型應用,它個更多功能還需大家去發掘去體會。
  參考文獻
  
  [1]AutoCAD+VBA二次開發來源:InterNet明經通道

文章標題:VBA實現AutoCadMap下電桿符號批量轉換

轉載請注明來自:http://www.optiwork.cn/fblw/dianxin/dianzijishu/13488.html

相關問題解答

SCI服務

搜論文知識網 冀ICP備15021333號-3

主站蜘蛛池模板: 亚洲国产欧美精品一区二区三区 | 丝袜紧身裙国产在线播放 | 成人网在线视频 | 亚洲一级高清在线中文字幕 | 99re热这里只有精品视频 | a免费网站 | 亚洲日本一区二区三区 | 国产欧美日韩视频免费61794 | 欧美亚洲免费 | chineseoldman色老头videos | 午夜国产精品久久久久 | 草草影院www色欧美极品 | 欧美成人精品福利在线视频 | 在线免费观看欧美 | 国产孕妇孕交视频 | 99精品视频在线这里只有 | 香蕉亚洲精品一区二区 | 天堂影院jav成人天堂免费观看 | 国产成人精品视频免费大全 | 国产呦精品系列在线 | www成人国产在线观看网站 | 在线一级片| 一区二区三区在线 | 网站 | 国产精品久久不卡日韩美女 | 亚洲欧美手机在线观看 | 国产成人刺激视频在线观看 | 国产精品成人观看视频免费 | 99亚洲视频 | 国产永久免费高清动作片www | 性强烈欧美一级毛片 | 日韩美女专区中文字幕 | 国产欧美一区二区日本加勒比 | 精品免费久久久久久久 | 99久久精品6在线播放 | 国产亚洲欧美在线播放网站 | 欧美日韩另类在线观看视频 | 欧美亚洲国产人成aaa | a一级免费视频 | 色碰碰| 久久精品欧美日韩精品 | 亚洲精品区 |