




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
目 錄基礎篇 1實例1基例子 11、新建項目 12、添加引用 13、全局變定義 14、打開文件 25、定義啟動象的函數 2實例2獲取CAD中形對象 51、獲取圖形52、中常用圖對象名稱 53、獲取鼠點擊位置 5實例3直對象 71、獲取直的坐標 72、其他常屬性和7實例4多線對象 91、獲取多線節(jié)點標 92、其他常屬性和10實例5獲三維多線節(jié)點標 實例6獲點的坐標 13實例7獲塊的插點 14實例8獲文字插點及內容 15實例9獲樣條曲的控制坐標及合點坐標 171、獲取樣曲線的制點坐標 172、獲取樣曲線的合點坐標 18實例10選201、在屏幕選擇對象 202、根據條選擇對象 203、根據范選擇對象 25實例11繪基本271、繪制直線 272、添加文字 273、繪制三多段線 28實例12編對象 301、復制對象 302、刪除對象 303、旋轉對象 304、縮放對象 325、移動對象 34實例13圖對象 371、添加新層 372、刪除圖層 383、設置圖鎖定、結、可性及線型 38實例14其他 391、向發(fā)送命令 392、創(chuàng)建一新的文件 393、保存文件 404、文件另為 405、關閉文檔 426、退出43應用篇 44實例15獲坐標 441、新建項目 442、獲取直坐標 463、獲取多線節(jié)點標 484、獲取三多段線點坐標 505、獲取樣曲線控點坐標 526、獲取樣曲線擬點坐標 547、獲取點坐標 568、獲取塊插入點 579、獲得文插入點內容 5810、獲取種線節(jié)坐標 60、表格顯示據 6212、輸出文本文件 6613、輸出Excel表格 67實例16向應用 711、線段的向判斷 712、更改面方向 74實例17根等高繪制剖圖 801、獲取兩多段線交點 802、根據等線繪制面圖 81實例18邊搜索 921、凸邊界922、含凹邊的凸邊搜索 953、邊界內的個數 99實例19一三角介紹 1051、定義繪面片的數 1052、定義一集判斷繪制于體的數GetBaseTrian() 1053、劃分三1064、錯誤處理 107實例20Delaunay角剖分 1、獲取點坐標數組 2、獲取點外圍邊界 3、根據邊及內部生成三4、繪制三網和邊 121實例21開量計算 1241、開挖方計算原理 1242、填方量算原理 1263、既有挖、又有方的計原理 1274、程序設步驟及現(xiàn) 132實例22據TIN成等高線 1421、定義數結構 1422、選擇三形面片1433、參數設并繪制高線 143實例23根高度生成TIN 1471、新建項目 1482、添加相控件 1493、全局變定義 1504、打開圖文件 1505、生成方網格點 1506、生成1517、保存文件 152實例24根剖面及路徑立模型 1561、選取剖線 1562、選取路對象 1573、編輯面對象 158實例25根澆注息劃分壩模型 1661、讀取澆信息數據 1662、大壩模的搜索1703、劃分模型 171實例26智賦予高值 1751、提取高注記 1752、連接高注記 1793、賦予高值 1844、搜索首205基于VisualC#的AutoCAD開發(fā)及其在工程中的應用基于VisualC#的AutoCAD開發(fā)及其在工程中的應用PAGE10PAGE10基礎篇實例1 基本例子1、新建項目啟動aludo2005“D開發(fā)如下:2、添加引用添加AutoCAD的引用AutoCAD2007TypeLibrary和AutoCAD/ObjectDBXCommon17.0TypeLibrary,如下圖所示:3、全局變量定義在全局變量中定義如下:Autodesk.AutoCAD.Interop.AcadApplicationAcadApp;Autodesk.AutoCAD.Interop.AcadDocumentAcadDoc;其中,AcadApplication是CAD對象接口,AcadDocument是CAD文件。4、打開CAD文件添加一個按鈕,為按鈕添加如下代碼,實現(xiàn)打開一個CAD文件的功能:privatevoidbutton1_Click(objectsender,EventArgse){OpenFileDialogpOpenDG=newOpenFileDialog();pOpenDG.ShowDialog();stringfilePath=pOpenDG.FileName;AcadApp=newAcadApplication();AcadApp.Application.Visible=true;AcadDoc=AcadApp.Documents.Open(filePath,null,null);}程序運行結果如下圖所示:如果沒AcadApp.Application.Visible=只在=newAcadApplication();”對象,每次都如時就不要再5、定義啟動CAD對象的函數D“啟動()如下:privatevoid啟動CAD(){try{AcadApp=(AcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject("AutoCAD.Application");AcadDoc=AcadApp.ActiveDocument;}catch{OpenFileDialogpOpenDG=newOpenFileDialog();pOpenDG.Filter="CAD文件(*.dwg)|*.dwg|CAD圖形文件(*.dxf)|*.dxf";pOpenDG.Title="打開CAD文件";pOpenDG.ShowDialog();stringfilePath=pOpenDG.FileName;if(filePath==""){MessageBox.Show("選擇CAD文件無效!","文件無效!");Application.Exit();}AcadApp=newAcadApplication();AcadDoc=AcadApp.Documents.Open(filePath,null,null);}AcadApp.Application.Visible=true;Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);}其中“Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);”是使得CAD對象在最前面,要調用該函數“ro.saa,如下圖所示:面的函數CAD()”try…catch語句用于試程序是否如果則AcadApp當前文檔有啟動可以在程序啟動的代碼中調用該函數,如下:privatevoidForm1_Load(objectsender,EventArgse){啟動CAD();}實例2 獲取CAD中圖形對象1、獲取CAD圖形對象在文件中有包含很多圖形對象,如點、線、面、體等等。獲取圖形對象主要通過AcadDocument.Utility.GetEntity()按鈕Name“獲取對象名稱事件代碼如下:privatevoid獲取對象名稱_Click(objectsender,EventArgse){Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);objectreturnObj,pickPoint;stringpickPrompt="選取物體對象!";AcadDoc.Utility.GetEntity(outreturnObj,outpickPoint,pickPrompt);AcadObjectreturnCADObj=(AcadObject)returnObj;MessageBox.Show("選取對象為:"+returnCADObj.ObjectName.ToString());Microsoft.VisualBasic.Interaction.AppActivate(this.Text);}“rf.saa.Iraio.Appia(adAp.aio);”是將當前窗D中獲取的對象,pickPointpickPromp(操作外還需AcadObjectreturnCADObj,將前面returnObj對象賦予它,AcadObject就接對該AutoCAD:2、CAD中常用圖形對象名稱序號名稱對象名稱(ObjectName)序號名稱對象名稱(ObjectName)CAD中對應的命令1直線AcDbLineLINE2多段線AcDbPolylinePLINE3二維多段線AcDb2dPolylinePLINE(樣條曲線后)4樣條曲線AcDbSplineSPLINE5三維多段線AcDb3dPolyline3DPOLY6圓AcDbCircleCIRCLE7圓弧AcDbArcARC8點AcDbPointPOINT9單行文本AcDbTextDTEXT10多行文本AcDbMTextMTEXT11面域AcDbRegionREGION12圖案填充AcDbHatchBHATCH13塊對象AcDbBlockReferenceBLOCK14面片AcDbFace3DFACE3、獲取鼠標點擊位置同時獲取在CAD中點擊的坐標位置,首先定義一個數組用于保存點擊的坐標位置,如下double[]pickPointArray;然后將點擊返回的對象pickPoint強制轉換成Double數據類型,如下:pickPointArray=(Double[])pickPoint;然后用一個消息窗體來顯示結果,如下:MessageBox.Show("點擊位置:X="+pickPointArray[0].ToString()+",Y="+pickPointArray[1].ToString()+",Z="+pickPointArray[2].ToString());運行程序,其結果如下圖所示:至此,按鈕“獲取對象名稱”的Click事件中所有程序代碼如下:privatevoid獲取對象名稱_Click(objectsender,EventArgse){Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);objectreturnObj,pickPoint;stringpickPrompt="選取物體對象!";double[]pickPointArray;AcadDoc.Utility.GetEntity(outreturnObj,outpickPoint,pickPrompt);AcadObjectreturnCADObj=(AcadObject)returnObj;pickPointArray=(Double[])pickPoint;MessageBox.Show("選取對象為:"+returnCADObj.ObjectName.ToString());MessageBox.Show("點擊位置:X="+pickPointArray[0].ToString()+",Y="+pickPointArray[1].ToString()+",Z="+pickPointArray[2].ToString());Microsoft.VisualBasic.Interaction.AppActivate(this.Text);}實例3 直線對象1、獲取直線的坐標要獲取直線的坐標首先必須獲取到直線對象,然后通過該直線的屬性來獲得它的坐標值。首先,設置其Nae和xt屬性都為“然后如下:privatevoid獲取直線的坐標_Click(objectsender,EventArgse){handle01:Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);objectreturnObj,pickPoint;stringpickPrompt="選取直線!";AcadDoc.Utility.GetEntity(outreturnObj,outpickPoint,pickPrompt);AcadObjectreturnCADObj=(AcadObject)returnObj;if(returnCADObj.ObjectName=="AcDbLine"){AcadLinereturnLine=(AcadLine)returnCADObj;double[]lineStartPoint=newDouble[2];double[]lineEndPoint=newDouble[2];lineStartPoint=(Double[])returnLine.StartPoint;lineEndPoint=(Double[])returnLine.EndPoint;MessageBox.Show(+lineStartPoint[0].ToString()+","+lineStartPoint[1].ToString()+","+lineStartPoint[2].ToString()+"\n"+"直線的終點坐標為:"+lineEndPoint[0].ToString()+","+lineEndPoint[1].ToString()+","+lineEndPoint[2].ToString());}else{MessageBox.Show("選擇的不是直線!請重新選擇!");gotohandle01;} Microsoft.VisualBasic.Interaction.AppActivate(this.Text);}先“returnCADObj.ObjectName=="否如果再若則EndPoint來獲取直線的起點坐標和終運行程序,其結果如下圖所示:2、其他常用屬性和方法若需該Delete()Length屬性還屬性還、Rotate等方法還實例4 多段線對象1、獲取多段線節(jié)點坐標獲取多段線節(jié)點坐標主要是通過AcadLWPolyline對象的Coordinates屬性獲取。添加一個按鈕,設置其Name和xt“同時hxtxae“stIf“獲Click事件添加如下:privatevoid獲取多段線節(jié)點坐標_Click(objectsender,EventArgse){handle01:Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);objectreturnObj,pickPoint;stringpickPrompt="選取多段線!";AcadDoc.Utility.GetEntity(outreturnObj,outpickPoint,pickPrompt);AcadObjectreturnCADObj=(AcadObject)returnObj;if(returnCADObj.ObjectName=="AcDbPolyline"){AcadLWPolylinereturnPolyLine=(AcadLWPolyline)returnCADObj;double[]polyLinePoint;polyLinePoint=(Double[])returnPolyLine.Coordinates;inti,pointCount=polyLinePoint.Length/2;stringshowInfo="";for(i=0;i<polyLinePoint.Length-1;i=i+2){"\n";
showInfo+=polyLinePoint[i].ToString()+","+polyLinePoint[i+1].ToString()+}}else{
showInfo+="標高為:"+returnPolyLine.Elevation.ToString();ResultInfo.Text=showInfo;MessageBox.Show("選擇的不是多段線!請重新選擇!");gotohandle01;}Microsoft.VisualBasic.Interaction.AppActivate(this.Text);}其中,polyLinePoinpolyLinePoint.Length表示數組的長Polyline中所有節(jié)aWline的orias屬性中只(X坐標和Y坐標Z坐標ElevationpointCount=polyLinePoint.Length/2。運行程序,其顯示結果如下圖所示:2、其他常用屬性和方法和直線對象一樣,若需要刪除該直線對象,通過對象的Delete()方法即可完成。其常用的屬性和方法如下表所示:屬性說明方法說明Area多段線所包圍范圍的面積Delete()刪除多段線Closed是否閉合Explode()分解多段線ConstantWidth全局寬度get_Coordinate(Index)獲取多段線中指定點的坐標Coordinates節(jié)點坐標GetBoundingBox(MinPoint,MaxPoint)盒的最最小坐標位置Document所在的CAD文檔Highlight(bool)是否高亮顯示Layer所在圖層IntersectWith(IntersectObject,option)與其他圖形對象相交操作Length長度Move(FromPoint,ToPoint)移動多段線Normal多段線所在面的法線set_Coordinate(Index,pVal)設置指定節(jié)點的坐標Visible是否可見Rotate(BasePoint,RotationAngle)根據基點擊角度旋轉多段線實例5 獲取三維多段線節(jié)點坐標獲取三維多段線節(jié)點坐標是通過Acad3DPolyline的Coordinates屬性來獲取。添加一個按鈕,設置其Name和xt屬性都為“,為其k事件添加代碼如下:privatevoid獲取三維多段線節(jié)點坐標_Click(objectsender,EventArgse){handle01:Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);objectreturnObj,pickPoint;stringpickPrompt="選取三維多段線!";AcadDoc.Utility.GetEntity(outreturnObj,outpickPoint,AcadObjectreturnCADObj=(AcadObject)returnObj;if(returnCADObj.ObjectName=="AcDb3dPolyline"){Acad3DPolylinereturn3dPolyLine=(Acad3DPolyline)returnCADObj;double[]TDpolyLinePoint;TDpolyLinePoint=(Double[])return3dPolyLine.Coordinates;inti;stringshowInfo="";for(i=0;i<TDpolyLinePoint.Length-2;i=i+3){1].ToString()
showInfo+=TDpolyLinePoint[i].ToString()+","+TDpolyLinePoint[i++","+TDpolyLinePoint[i+2].ToString()+"\n";}}else{
ResultInfo.Text=showInfo;MessageBox.Show("選擇的不是三維多段線!請重新選擇!");gotohandle01;} Microsoft.VisualBasic.Interaction.AppActivate(this.Text);}其中,return3dPolyLine.Coordinates長3*n的數組(n為節(jié)點個數所示:實例6 獲取點的坐標獲取點的坐標是通過AcadPoint的Coordinates屬性來獲取。添加一個按鈕,設置其Name和Text屬性都為“,為其k事件添加代碼privatevoid獲取點的坐標_Click(objectsender,EventArgse){handle01:Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);objectreturnObj,pickPoint;stringpickPrompt="選取點!";AcadDoc.Utility.GetEntity(outreturnObj,outpickPoint,pickPrompt);AcadObjectreturnCADObj=(AcadObject)returnObj;if(returnCADObj.ObjectName=="AcDbPoint"){AcadPointreturnPointObj=(AcadPoint)returnCADObj;double[]PointCoord;PointCoord=(Double[])returnPointObj.Coordinates;stringshowInfo;showInfo=PointCoord[0].ToString()+","+PointCoord[1].ToString()+","+PointCoord[2].ToString();ResultInfo.Text=showInfo;}else{MessageBox.Show("選擇的不是點!請重新選擇!");gotohandle01;}Microsoft.VisualBasic.Interaction.AppActivate(this.Text);}運行程序,其結果如下圖所示:實例7 獲取塊的插入點獲取點的坐標是通過AcadBlockReference的InsertionPoint屬性來獲取。添加一個按鈕,設置其Name和Text屬性都為然后k事件添加代碼privatevoid獲取塊的插入點_Click(objectsender,EventArgse){handle01:Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);objectreturnObj,pickPoint;stringpickPrompt="選取塊!";AcadDoc.Utility.GetEntity(outreturnObj,outpickPoint,pickPrompt);AcadObjectreturnCADObj=(AcadObject)returnObj;if(returnCADObj.ObjectName=="AcDbBlockReference"){AcadBlockReferencereturnBlock=(AcadBlockReference)returnCADObj;double[]blockPoint;blockPoint=(Double[])returnBlock.InsertionPoint;stringshowInfo;showInfo=blockPoint[0].ToString()+","+blockPoint[1].ToString()+","+blockPoint[2].ToString();ResultInfo.Text=showInfo;}else{MessageBox.Show("選擇的不是塊!請重新選擇!");gotohandle01;}Microsoft.VisualBasic.Interaction.AppActivate(this.Text);}運行程序,其結果如下圖所示:實例8 獲取文字插入點及內容獲取文字插入點及內容是通過或的InsertionPoint屬性來獲取插入點坐標、通過xtrng按鈕Nae和xt“然后Click事件添加代碼如下:privatevoid獲取文字插入點及內容_Click(objectsender,EventArgse){handle01:Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);objectreturnObj,pickPoint;stringpickPrompt="選取文字!";AcadDoc.Utility.GetEntity(outreturnObj,outpickPoint,pickPrompt);AcadObjectreturnCADObj=(AcadObject)returnObj;if(returnCADObj.ObjectName=="AcDbText"){AcadTextreturnTextObj=(AcadText)returnCADObj;double[]textInsertionPoint;textInsertionPoint=(Double[])returnTextObj.InsertionPoint;stringshowInfo;showInfo=textInsertionPoint[0].ToString()+","+textInsertionPoint[1].ToString()+","+textInsertionPoint[2].ToString();showInfo+="\n文字內容為:"+returnTextObj.TextString.ToString();ResultInfo.Text=showInfo;}elseif(returnCADObj.ObjectName=="AcDbMText"){AcadMTextreturnMTextObj=(AcadMText)returnCADObj;double[]textInsertionPoint;textInsertionPoint=(Double[])returnMTextObj.InsertionPoint;stringshowInfo;showInfo=textInsertionPoint[0].ToString()+","+textInsertionPoint[1].ToString()+","+textInsertionPoint[2].ToString();showInfo+="\n文字內容為:"+returnMTextObj.TextString.ToString();ResultInfo.Text=showInfo;}else{MessageBox.Show("選擇的不是文字!請重新選擇!");gotohandle01;}Microsoft.VisualBasic.Interaction.AppActivate(this.Text);}運行程序,其結果如下圖所示:實例9 獲取樣條曲線的控制點坐標及擬合點坐標1、獲取樣條曲線的控制點坐標獲取樣條曲線的控制點坐標是通過AcadSpline的ControlPoints屬性來獲取樣條曲線的控制點坐標。添加一個按鈕ae和xt屬性都為“,為其k事件添加代碼privatevoid獲取樣條曲線控制點坐標_Click(objectsender,EventArgse){handle01:Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);objectreturnObj,pickPoint;stringpickPrompt="選取樣條曲線!";AcadDoc.Utility.GetEntity(outreturnObj,outpickPoint,pickPrompt);AcadObjectreturnCADObj=(AcadObject)returnObj;if(returnCADObj.ObjectName=="AcDbSpline"){AcadSplinereturnSpline=(AcadSpline)returnCADObj;double[]splineControlPoint;splineControlPoint=(Double[])returnSpline.ControlPoints;stringshowInfo="";inti;for(i=0;i<splineControlPoint.Length-2;i=i+3){1].ToString()
showInfo+=splineControlPoint[i].ToString()+","+splineControlPoint[i++","+splineControlPoint[i+2].ToString()+"\n";}}else{
ResultInfo.Text=showInfo;MessageBox.Show("選擇的不是樣條曲線!請重新選擇!");gotohandle01;}Microsoft.VisualBasic.Interaction.AppActivate(this.Text);}運行程序,其結果如下如所示:2、獲取樣條曲線的擬合點坐標獲取樣條曲線的擬合點坐標是通過AcadSpline的FitPoints屬性來獲取樣條曲線的擬合點坐標。添加一個按鈕,設置其Nae和xt屬性都為“然后k事件添加代碼如下:privatevoid獲取樣條曲線擬合點坐標_Click(objectsender,EventArgse){handle01:Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);objectreturnObj,pickPoint;stringpickPrompt="選取樣條曲線!";AcadDoc.Utility.GetEntity(outreturnObj,outpickPoint,pickPrompt);AcadObjectreturnCADObj=(AcadObject)returnObj;if(returnCADObj.ObjectName=="AcDbSpline"){AcadSplinereturnSpline=(AcadSpline)returnCADObj;double[]splineFitPoint;splineFitPoint=(Double[])returnSpline.FitPoints;stringshowInfo="";inti;for(i=0;i<splineFitPoint.Length-2;i=i+3){showInfo+=splineFitPoint[i].ToString()+","+splineFitPoint[i+1].ToString()+","+splineFitPoint[i+2].ToString()+"\n";}ResultInfo.Text=showInfo;}else{MessageBox.Show("選擇的不是樣條曲線!請重新選擇!");gotohandle01;}Microsoft.VisualBasic.Interaction.AppActivate(this.Text);}運行程序,其結果如下圖所示:實例10 選擇集AcadSelectionSet接口首先量,并在D;然后篩(最后,當達1、在屏幕上選擇對象添加一個ae和xt屬性都為“,為其k事件添加代碼privatevoid在屏幕上選擇對象_Click(objectsender,EventArgse){AcadSelectionSetmySelectionSet;mySelectionSet=AcadDoc.SelectionSets.Add("NewSelectionSet01");Int16[]FilterType=newInt16[1];object[]FilterData=newobject[1];FilterType[0]=0;FilterData[0]="*";mySelectionSet.SelectOnScreen(FilterType,FilterData);AcadDoc.SelectionSets.Item("NewSelectionSet01").Delete();}“ylioS=aD.lioS.d("Nltin01");”是在D文檔中添加名稱為NewSelectionSet01,并賦AcadSelectionSet接口。FilterData濾下此“ryp[0]=濾“”“r”“Da[0]=""”表示為“”此為通利用SeioS.ecOSre()方法在D屏幕后若不刪除,下次不能用需要重2、根據條件選擇對象根據條件選擇對象主要是通過設置FilterType和FilterData參數值來實現(xiàn)。常用的選擇集過濾類型值如下表所示:FilterType說明備注0圖形對象類型“LINE”、“TEXT”、“MTEXT”、“CIRCLE”、“SPLINE”等8圖層名稱60對象可見性62顏色編號范圍0到256內的數字索引值。零表示BYBLOCK,256表示BYLAYER,負值表示圖層被關閉。下面分別介紹常用的幾種選擇情況及實現(xiàn)過程:選擇全部對象主要通過AcadSelectionSet接口的Select()方法,并將選擇模式設置為acSelectionSetAll。首先按鈕Nae和xt屬性都為“,為其k事件添加代碼privatevoid選擇全部對象_Click(objectsender,EventArgse){Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);AcadSelectionSetmySelectionSet;mySelectionSet=AcadDoc.SelectionSets.Add("NewSelectionSet02");Int16[]FilterType=newInt16[1];object[]FilterData=newobject[1];FilterType[0]=0;FilterData[0]="*";double[]point01=newdouble[3];double[]point02=newdouble[3];point01[0]=0;point01[1]=0;point01[2]=0;point02[0]=1000;point02[1]=1000;point02[2]=0;mySelectionSet.Select(AcSelect.acSelectionSetAll,point01,point02,FilterType,FilterData);MessageBox.Show("共選擇對象個數為:"+mySelectionSet.Count.ToString());AcadDoc.SelectionSets.Item("NewSelectionSet02").Delete();}濾先Label其為“圖層。然后添加一個ComboBox控件用于顯示文件中的所有圖層,并設置其name為“arCobBx。定義一個刷“刷privatevoid刷新圖層顯示(){LayerComboBox.Items.Clear();inti;for(i=0;i<AcadDoc.Layers.Count;i++){LayerComboBox.Items.Add(AcadDoc.Layers.Item(i).Name.ToString());}LayerComboBox.Text=AcadDoc.ActiveLayer.Name.ToString();}其中LayerComboBox控件中顯示的即為CAD文件中當前的圖層。在程序啟動時即可調用該函數,即在Form1_Load()事件中添加如下代碼:刷新圖層顯示();然后按鈕ae和xt屬性都為“,然后k事件添加代碼如下:privatevoid選擇指定圖層中對象_Click(objectsender,EventArgse){Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);AcadSelectionSetmySelectionSet;mySelectionSet=AcadDoc.SelectionSets.Add("NewSelectionSet03");Int16[]FilterType=newInt16[1];object[]FilterData=newobject[1];FilterType[0]=8;FilterData[0]=LayerComboBox.Text;double[]point01=newdouble[3];double[]point02=newdouble[3];point01[0]=0;point01[1]=0;point01[2]=0;point02[0]=1000;point02[1]=1000;point02[2]=0;mySelectionSet.Select(AcSelect.acSelectionSetAll,point01,point02,FilterType,FilterData);MessageBox.Show("共選擇對象個數為:"+mySelectionSet.Count.ToString());AcadDoc.SelectionSets.Item("NewSelectionSet03").Delete();}其中,將FilterType值更改為圖層過濾類型即8,將FilterData過濾值設置為LayerComboBox控件中所顯示的文字對應的圖層。運行程序,如下圖所示:選擇指定圖形對象主要包括“WOYNE“3E“ONT“NE“EXT“EXT、“CE““OYNE“3DOD“EGON“NE”等。同樣,將rpe值更改為圖形對象類型即0,將FilterData選擇集過濾數據設置為要選定的圖形對象名稱即可。下面以選擇所有的WOYNE為例,首先e和xt屬性都為“,然后事如下:privatevoid選擇指定圖形對象_Click(objectsender,EventArgse){Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);AcadSelectionSetmySelectionSet;mySelectionSet=AcadDoc.SelectionSets.Add("NewSelectionSet04");Int16[]FilterType=newInt16[1];object[]FilterData=newobject[1];FilterType[0]=0;FilterData[0]="LWPOLYLINE";double[]point01=newdouble[3];double[]point02=newdouble[3];point01[0]=0;point01[1]=0;point01[2]=0;point02[0]=1000;point02[1]=1000;point02[2]=0;mySelectionSet.Select(AcSelect.acSelectionSetAll,point01,point02,FilterType,FilterData);MessageBox.Show("共選擇多段線個數為:"+mySelectionSet.Count.ToString());AcadDoc.SelectionSets.Item("NewSelectionSet04").Delete();}運行程序,其結果如下圖所示:出來前或還濾如圖形對象,則:“0”。添加一個,設置其Nae和xt屬性都為“,為其ck事件添加代碼privatevoid多條件選擇_Click(objectsender,EventArgse){Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);AcadSelectionSetmySelectionSet;mySelectionSet=AcadDoc.SelectionSets.Add("NewSelectionSet05");Int16[]FilterType=newInt16[2];object[]FilterData=newFilterType[0]=0;FilterData[0]=FilterType[1]=8;FilterData[1]="0";double[]point01=newdouble[3];double[]point02=newdouble[3];point01[0]=0;point01[1]=0;point01[2]=0;point02[0]=1000;point02[1]=1000;point02[2]=0;mySelectionSet.Select(AcSelect.acSelectionSetAll,point01,point02,FilterType,FilterData);MessageBox.Show("共選擇\"0\"圖層中直線個數為:"+mySelectionSet.Count.ToString());AcadDoc.SelectionSets.Item("NewSelectionSet05").Delete();}rye和lrDaa長度為2第值“ne,第圖層為0果如下:上述“的邏除此還雜的邏如中所有徑10010的圓就需邏編碼中使用值“-4”符和邏輯運算,即如果FilterData[i]符,對應的應為-4器中可用的邏符:運算符說明關系運算符*通配符=相等!=或/=或<>不等于<小于<=小于或等于>大于>=大于或等于邏輯運算符<ANDAND>和運算;包含的內容為一個或多個運算對象<OROR>或運算;包含的內容為一個或多個運算對象<XORXOR>或運算;包含的內容為兩個個運算對象<NOTNOT>非運算;包含的內容為一個運算對象下面以選擇圖層“0”中所有半徑小于100且大于10的圓為例來說明這個具體的實現(xiàn)過程。privatevoid多條件選擇_Click(objectsender,EventArgse){Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);AcadSelectionSetmySelectionSet;mySelectionSet=AcadDoc.SelectionSets.Add("NewSelectionSet05");Int16[]FilterType=newInt16[8];object[]FilterData=newFilterType[0]=0;FilterData[0]=FilterType[1]=8;FilterData[1]="0";FilterType[2]=-4;FilterData[2]=FilterType[3]=-4;FilterData[3]=">=";FilterType[4]=40;FilterData[4]=10;FilterType[5]=-4;FilterData[5]=FilterType[6]=40;FilterData[6]=100;FilterType[7]=-4;FilterData[7]="AND>";double[]point01=newdouble[3];double[]point02=newdouble[3];point01[0]=0;point01[1]=0;point01[2]=0;point02[0]=1000;point02[1]=1000;point02[2]=0;mySelectionSet.Select(AcSelect.acSelectionSetAll,point01,point02,FilterType,FilterData);MessageBox.Show("共選擇滿足條件的圓個數為:"+mySelectionSet.Count.ToString());AcadDoc.SelectionSets.Item("NewSelectionSet05").Delete();}其中FilterType[4]和FilterType[6]的值設置為40是根據DXF組碼查詢得知圓的半徑所對應的組碼值為40。運行程序,其結果如下圖所示:3、根據范圍選擇對象通過選取范圍來選擇對象,如果直接使用AcadSelectionSet接口的SelectOnScreen()方法在CAD窗體中選是如果AcadSelectionSet接口SelectByPolygon()方法則下Polyline:整個過程的思路可以分為:第一步就是需要獲取到Polyline線對象;第二步,獲取到Polyline線上的每個節(jié)點;第三步,根據獲得的節(jié)點坐標設置選擇集范圍。添加一個ae和xt屬性都為“k事件添加代碼如下:privatevoid根據范圍選擇對象_Click(objectsender,EventArgse){handle01:Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);objectreturnObj,pickPoint;stringpickPrompt="選取Polyline對象!";AcadDoc.Utility.GetEntity(outreturnObj,outpickPoint,pickPrompt);AcadObjectreturnCADObj=(AcadObject)returnObj;if(returnCADObj.ObjectName!="AcDbPolyline")gotohandle01;AcadLWPolylinereturnLWPolyline=(AcadLWPolyline)returnCADObj;if(!returnLWPolyline.Closed){MessageBox.Show("選取的多段線沒有閉合!");gotohandle01;}Double[]selectionEdgePoints,LWPolylineCoords;LWPolylineCoords=(Double[])returnLWPolyline.Coordinates;inti;selectionEdgePoints=newDouble[3*LWPolylineCoords.Length/2];for(i=0;i<LWPolylineCoords.Length/2;i++){selectionEdgePoints[3*i]=LWPolylineCoords[2*i];selectionEdgePoints[3*i+1]=LWPolylineCoords[2*i+1];selectionEdgePoints[3*i+2]=0;}AcadSelectionSetmySelectionSet;mySelectionSet=AcadDoc.SelectionSets.Add("NewSelectionSet06");Int16[]FilterType=newInt16[1];object[]FilterData=newobject[1];FilterType[0]=0;FilterData[0]="*";mySelectionSet.SelectByPolygon(AcSelect.acSelectionSetCrossingPolygon,selectionEdgePoints,FilterType,FilterData);MessageBox.Show("范圍內圖形對象個數為:"+mySelectionSet.Count.ToString());AcadDoc.SelectionSets.Item("NewSelectionSet06").Delete();}先否長度為2*n長度為3*n的數組,及XYselectionEdgePoints、Y和Z坐標,句數組中的值相應傳遞selectionEdgePoints數組中,如果此就不要轉換最后SelectByPolygon()selectionEdgePoints數組。運:實例11 繪制基本圖形還重中繪制圖形主要通過AcadModelSpace接口來實現(xiàn),通過下:1、繪制直線繪制直線主要通過ModelSpace的AddLine()方法來實現(xiàn)。添加一個按鈕,設置其Name和Text屬性都為“繪制直線,為其k事件添加代碼privatevoid繪制直線_Click(objectsender,EventArgse){Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);double[]startPoint=newdouble[3];double[]endPoint=newdouble[3];startPoint[0]=0;startPoint[1]=0;startPoint[2]=0;endPoint[0]=100;endPoint[1]=100;endPoint[2]=0;AcadDoc.ModelSpace.AddLine(startPoint,endPoint);}其中,startPoint和endPoint為一個長度為3的Double類型數組,分別表示直線的起點坐標和終點坐標。運行程序,其顯示結果如下圖所示:2、添加文字添加文字主要通過ModelSpace的AddLine()方法來實現(xiàn)。添加一個按鈕,設置其Name和Text屬性都為“添加文字,為其k事件添加代碼privatevoid添加文字_Click(objectsender,EventArgse){Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);stringtextString="Hello";double[]textInsertPoint=newdouble[3];doubletextHeight=2.0;textInsertPoint[0]=0;textInsertPoint[1]=0;textInsertPoint[2]=0;AcadDoc.ModelSpace.AddText(textString,textInsertPoint,textHeight);}其中,textString表示要添加的文字內容,textInsertPoint為文字的插入點,textHeight為文字的高度。運行程序,其顯示結果如下圖所示:3、繪制三維多段線三維多段線在三維建模中應用非常多,有時候作為主要的結構線條表示,有時候作為輔助線條來建立其他模ModelSpaceAdd3DPoly()方法來實現(xiàn)。下?lián)Q先按鈕,設置其Nae和xt屬性都為“然后Click事件添加代碼privatevoid繪制三維多段線_Click(objectsender,EventArgse){handle01:Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);objectreturnObj,pickPoint;stringpickPrompt="選取Polyline對象!";AcadDoc.Utility.GetEntity(outreturnObj,outpickPoint,pickPrompt);AcadObjectreturnCADObj=(AcadObject)returnObj;if(returnCADObj.ObjectName!="AcDbPolyline")gotohandle01;AcadLWPolylinereturnLWPolyline=(AcadLWPolyline)returnCADObj;if(!returnLWPolyline.Closed){MessageBox.Show("選取的多段線沒有閉合!");gotohandle01;}Double[]LWPolylineCoords,create3DPolyCoords;LWPolylineCoords=(Double[])returnLWPolyline.Coordinates;inti;create3DPolyCoords=newDouble[3*LWPolylineCoords.Length/2];for(i=0;i<LWPolylineCoords.Length/2;i++){create3DPolyCoords[3*i]=LWPolylineCoords[2*i];create3DPolyCoords[3*i+1]=LWPolylineCoords[2*i+1];create3DPolyCoords[3*i+2]=0;}AcadDoc.ModelSpace.Add3DPoly(create3DPolyCoords);}長3*ndouble果如下:添加其他圖形的方式和前面介紹的基本上一樣,只需要設置所對應函數的相應參數即可,在此就不一一介紹了。實例12 編輯對象在前面已經提到過CAD中圖形對象的一些編輯方法,本節(jié)將主要介紹常用的幾種圖形編輯方法。1、復制對象復制對象主要通過改對象的Copy方法來實現(xiàn),此方法可以創(chuàng)建一個與原始對象完全相同的新對象。下面以復制選中的Polyline對象為例來說明。添加一個ae和xt屬性都為“k事件添加代碼privatevoid復制選中對象_Click(objectsender,EventArgse){handle01:Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);objectreturnObj,pickPoint;stringpickPrompt="選取Polyline對象!";AcadDoc.Utility.GetEntity(outreturnObj,outpickPoint,pickPrompt);AcadObjectreturnCADObj=(AcadObject)returnObj;if(returnCADObj.ObjectName!="AcDbPolyline")gotohandle01;AcadLWPolylinereturnLWPolyline=(AcadLWPolyline)returnCADObj;returnLWPolyline.Copy();}若要獲取到復制的新對象,可以創(chuàng)建一個變量并賦予其值為復制的對象。如下:AcadLWPolylinenewPolylineObj;newPolylineObj=(AcadLWPolyline)returnLWPolyline.Copy();2、刪除對象刪除對象主要通過改對象的delete方法來實現(xiàn)。下面以刪除選中的對象為例來說明。添加一個ae和xt屬性都為“k事件添加代碼privatevoid刪除選中對象_Click(objectsender,EventArgse){Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);objectreturnObj,pickPoint;stringpickPrompt="選取對象!";AcadDoc.Utility.GetEntity(outreturnObj,outpickPoint,pickPrompt);AcadObjectreturnCADObj=(AcadObject)returnObj;returnCADObj.Delete();}3、旋轉對象旋轉對象主要通過對象的Rotate方法或Rotate3D方法來實現(xiàn)。其中Rotate方法是一種平面上的旋轉,只需要指定基點和旋轉角度即可;Rotate3D方法是空間選擇,需要指定兩個點,并以兩點連線為旋轉軸根據指定的角度旋轉。下面以在平面上旋轉多段線為例:添加一個ae和xt屬性都為“k事件添加代碼如下:privatevoid旋轉多段線_Click(objectsender,EventArgse){handle01:Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);objectreturnObj,pickPoint;stringpickPrompt="選取Polyline對象!";AcadDoc.Utility.GetEntity(outreturnObj,outpickPoint,pickPrompt);AcadObjectreturnCADObj=(AcadObject)returnObj;if(returnCADObj.ObjectName!="AcDbPolyline")gotohandle01;AcadLWPolylinereturnLWPolyline=(AcadLWPolyline)returnCADObj;double[]rotateBase=newdouble[3];double[]lwPolylineCoord;lwPolylineCoord=(double[])returnLWPolyline.Coordinates;rotateBase[0]=lwPolylineCoord[0];rotateBase[1]=lwPolylineCoord[1];rotateBase[2]=lwPolylineCoord[2];doublerotateAngle=90.0*Math.PI/180;returnLWPolyline.Rotate(rotateBase,rotateAngle);}其中:rotateBase數組是一個長度為3的double類型數組,用于指定旋轉的基點;rotateAngle是選擇的弧度(需弧度:4、縮放對象縮放對象主要通過對象的ScaleEntity方法來實現(xiàn),這種縮放在X、Y和Z方向是等比例縮放。下面以在縮放多段線為例:添加一個ae和xt屬性都為“k事件添加代碼如下:privatevoid縮放多段線_Click(objectsender,EventArgse){handle01:Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);objectreturnObj,pickPoint;stringpickPrompt="選取Polyline對象!";AcadDoc.Utility.GetEntity(outreturnObj,outpickPoint,pickPrompt);AcadObjectreturnCADObj=(AcadObject)returnObj;if(returnCADObj.ObjectName!="AcDbPolyline")gotohandle01;AcadLWPolylinereturnLWPolyline=(AcadLWPolyline)returnCADObj;double[]scaleBase=newdouble[3];double[]lwPolylineCoord;lwPolylineCoord=(double[])returnLWPolyline.Coordinates;scaleBase[0]=lwPolylineCoord[0];scaleBase[1]=lwPolylineCoord[1];scaleBase[2]=lwPolylineCoord[2];doublescaleFactor=5.0f;returnLWPolyline.ScaleEntity(scaleBase,scaleFactor);}其中:scaleBase數組是一個長度為3的double類型數組,用于指定縮放的基點;scaleFactor用于指定縮放比例。運行程序,其顯示結果如下圖所示:5、移動對象移動對象主要通過對象的Move方法來實現(xiàn),只需要指定移動的起點和終點。下面以在移動多段線為例:添加一個ae和xt屬性都為“k事件添加代碼如下:privatevoid移動多段線_Click(objectsender,EventArgse){handle01:Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);objectreturnObj,pickPoint;stringpickPrompt="選取Polyline對象!";AcadDoc.Utility.G
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國鏜銑頭行業(yè)深度研究分析報告
- 2024年全球及中國微滴式數字PCR系統(tǒng)行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 合同范本之酒店服務員用工合同5篇
- 2025年公司環(huán)境美化協(xié)作項目合同樣本
- 場館租賃業(yè)務合同8篇
- 2025年五金材料批發(fā)合同范文
- 2025年公共汽車線路運輸合同范文
- 2025年二手汽車交易策劃合同格式
- 庭院工程施工合同范文7篇
- 2025年保障性安居工程施工合同指南
- 車庫租賃合同
- 《工程項目審計》課件
- 法人不參與經營免責協(xié)議
- 小學生心理健康主題家長會
- QB/T 4031-2024 阻燃性汽車空氣濾紙(正式版)
- DZ∕T 0130-2006 地質礦產實驗室測試質量管理規(guī)范(正式版)
- 《“光盤”行動-從我做起!》課件
- 杠桿原理及其應用實驗報告總結
- 2024年高職考試-渤海船舶職業(yè)學院單招筆試參考題庫含答案
- 人教新課標高一數學必修一講義(上半冊)共7講(無答案)
- 低壓斷路器課件
評論
0/150
提交評論