- 积分
- 461
- 明经币
- 个
- 注册时间
- 2005-7-13
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.Geometry Imports Autodesk.AutoCAD.EditorInput Imports Autodesk.AutoCAD.Colors Imports DBTransMan = Autodesk.AutoCAD.DatabaseServices.TransactionManager REM Line, Circle, Arc, Ellipse, olyline, DBText, MText, Table, Hatch and the Dimensions Public Class ublicClassClass ublicClass Enum PColorEnum PColor Red = 1 Yellow = 2 Green = 3 cyan = 4 '青色 Blue = 5 Fuchsin = 6 '品红 White = 7 End Enum REM <summary> '''函数注释 '''</summary> '''<typeparam name="msg">变量参数的注释说明</typeparam> '''<remarks> '''自己的注释说明
'''</remarks>  ublic Sub ShowMessage()Sub ShowMessage(ByVal msg As String) Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(Chr(10) + msg) End Sub  ublic Sub SendCommand()Sub SendCommand(ByVal cmd As String) Dim dotnetDoc As Document = Application.DocumentManager.MdiActiveDocument dotnetDoc.SendStringToExecute(cmd + Chr(13), True, False, False) End Sub
 ublic Function GetPointAR()Function GetPointAR(ByVal pt1 As oint3d, ByVal angle As Double, ByVal length As Double) As oint3d REM angle(计算sin cos 时 是以弧度计量的角度) angle = angle * Math.PI / 180 Dim pt2 As New oint3d(pt1.X + length * Math.Cos(angle), pt1.Y + length * Math.Sin(angle), pt1.Z) Return pt2 End Function '  ublic Sub ShowMessage(ByVal msg As String, ByVal ex As Autodesk.AutoCAD.Runtime.Exception) ' ShowMessage(Chr(10) + msg + "错误信息如下:" + Chr(10) + ex.Message) ' End Sub  ublic Function AddEntity()Function AddEntity(ByVal ent As Entity) As ObjectId Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database Dim tm As DBTransMan = db.TransactionManager Dim ta As Transaction = tm.StartTransaction Try Dim bt As BlockTable = ta.GetObject(db.BlockTableId, OpenMode.ForWrite, False) Dim btr As BlockTableRecord = ta.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite, False) Dim objId As ObjectId = btr.AppendEntity(ent) ta.AddNewlyCreatedDBObject(ent, True) ta.Commit() ta.Dispose() Return objId Catch ex As Exception ShowMessage("AddEntity出错了:" + ex.Message) End Try End Function  ublic Function AddLayer()Function AddLayer(ByVal LayerName As String, ByVal newColor As PColor, ByVal LineWeithS As LineWeight, ByVal LineTypeName As String, Optional ByVal Description As String = "没有描述") Dim objId As ObjectId Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database Dim tm As DBTransMan = db.TransactionManager Dim ta As Transaction = tm.StartTransaction Dim lt As LayerTable = tm.GetObject(db.LayerTableId, OpenMode.ForWrite) If lt.Has(LayerName) Then objId = lt.Item(LayerName) Else Dim ltr As New LayerTableRecord ltr.Name = LayerName Dim ColorType As Type = GetType(PPColor) Dim color1 As Color color1 = Color.FromColorIndex(ColorMethod.ByAci, [Enum ]Enum].Parse(ColorType, newColor.ToString)) ltr.Color = color1 ltr.LineWeight = LineWeithS ltr.LinetypeObjectId = LineType(LineTypeName) ltr.Description = Description objId = lt.Add(ltr) tm.AddNewlyCreatedDBObject(ltr, True) ta.Commit() End If ta.Dispose() tm.Dispose() Return objId End Function  ublic Function AddArc()Function AddArc(ByVal centerPoint As oint3d, ByVal normal As Vector3d, ByVal radius As Double, ByVal startAngle As Double, ByVal endAngle As Double, ByVal LayerName As String) As ObjectId REM 此处不用设置线型,颜色等,因为这些已经在图层里设置好了 Dim a As New Arc(centerPoint, normal, radius, startAngle, endAngle) a.Layer = LayerName REM a.Clone() REM 复制实体 Return AddEntity(a) End Function  ublic Function AddLine()Function AddLine(ByVal startPt As oint3d, ByVal endpt As oint3d, ByVal LayerName As String) As ObjectId Dim line As New Line(startPt, endpt) line.Layer = LayerName Return AddEntity(line) End Function  ublic Function AddLine()Function AddLine(ByVal startPt As oint3d, ByVal angle As Double, ByVal length As Double, ByVal LayerName As String) As ObjectId Dim line As New Line(startPt, GetPointAR(startPt, angle, length)) line.Layer = LayerName Return AddEntity(line) End Function  ublic Function AddMLine()Function AddMLine(ByVal scale As Double, ByVal newVertex As oint3d, ByVal LayerName As String) As ObjectId REM 多样线 Dim ml As New Mline
Dim ms As New MlineStyle ms.Name = "standard"
ml.Style = ms.ObjectId ml.Layer = LayerName ml.Scale = scale ml.AppendSegment(newVertex) ml.AppendSegment(New oint3d(20, 20, 0))
End Function  ublic Function AddTrace()Function AddTrace(ByVal pointer1 As oint3d, ByVal pointer2 As oint3d, ByVal pinter3 As oint3d, ByVal pointer4 As oint3d, ByVal LayerName As String) As ObjectId REM 有问题吧 Dim myTrace As New Trace(pointer1, pointer2, pinter3, pointer4) myTrace.LineWeight = LineWeight.LineWeight200 myTrace.Layer = LayerName Return AddEntity(myTrace)
End Function  ublic Function AddShape()Function AddShape(ByVal position As oint3d, ByVal size As Double, ByVal shapeName As String, ByVal rotation As Double, ByVal widthFactor As Double) As ObjectId REM shapeName ??? 有问题吧 Dim sh As New Shape(position, size, shapeName, rotation, widthFactor) Return AddEntity(sh) End Function
 ublic Function AddPolygon()Function AddPolygon(ByVal upperLeft As oint3d, ByVal upperRight As oint3d, ByVal lowerLeft As oint3d, ByVal lowerRight As oint3d) As ObjectId Dim rect As New Rectangle3d(upperLeft, upperRight, lowerLeft, lowerRight) Dim rect3d As Entity3d
' Dim m As New lane(New oint3d(100, 100, 0), New oint3d(100, 200, 0), New oint3d(100, 200, 100))
End Function '''<summary> '''获取或设置外部处理过程的委托 '''</summary>  ublic Function AddCircle()Function AddCircle(ByVal center As oint3d, ByVal radius As Double) As ObjectId Dim myCircle = New Circle(center, Vector3d.ZAxis, radius) Dim circleId As ObjectId = AddEntity(myCircle) Return circleId End Function '''<remarks> '''自己的注释说明 '''</remarks>  ublic Function AddEllipse()Function AddEllipse(ByVal centerPoint As oint3d, ByVal majorAxis As Vector3d, ByVal radiusRatio As Double, ByVal startAngle As Double, ByVal endAngle As Double) REM 画完整椭圆时,开始角度= 终止角度,调整角度,就可以调整方向 REM 可能存在问题 ' Ellipse(Ellipse = New Ellipse(center, Vector3d.ZAxis, New Vector3d(3, 0, 0), 0.5, 0, 0)) Dim unitNormal = Vector3d.ZAxis Dim e As New Ellipse(centerPoint, unitNormal, majorAxis, radiusRatio, startAngle, endAngle) Return AddEntity(e) End Function '''<typeparam name="text">变量参数的注释说明</typeparam>  ublic Function AddDBText()Function AddDBText(ByVal text As String, ByVal osition As oint3d, ByVal LayerName As String) '''<typeparam name="msg">变量参数的注释说明</typeparam> Dim mytext As New DBText mytext.TextString = text REM TextString Contents mytext.Position = osition REM location position mytext.VerticalMode = TextVerticalMode.TextVerticalMid '垂直对齐方式 mytext.HorizontalMode = TextHorizontalMode.TextCenter '水平对齐方式 ' mytext.AlignmentPoint = osition '文本的坐标 mytext.Position = osition 重复 ???矛盾 mytext.Layer = LayerName Return AddEntity(mytext) End Function  ublic Function AddMText()Function AddMText(ByVal text As String, ByVal osition As oint3d, ByVal LayerName As String) Dim mytext As New MText mytext.Contents = text mytext.Location = osition mytext.Layer = LayerName Return AddEntity(mytext) End Function  ublic Function AddHatch()Function AddHatch(ByVal ointArray() As oint3d, ByVal HatchStyleType As HatchStyle, ByVal atternScale As Double, ByVal atternAngle As Double, ByVal LayerName As String, Optional ByVal atternName As String = "ANSI31") As ObjectId REM 多点填充 REM 圆,圆弧的填充呢?? Dim hl As New HatchLoop REM 少了new 时:未将对象设置引用到实例 Dim 3d As oint3d Dim p As oint2d Dim bv As BulgeVertex For Each 3d In ointArray Try p = New oint2d(P3d.X, 3d.Y) bv = New BulgeVertex(p, 0) REM ShowMessage("bv.Bulge= " + bv.Bulge.ToString) REM ShowMessage(" bv.Vertex.ToString" + bv.Vertex.ToString) hl.Add(bv) ' hl.LoopType = HatchLoopTypes.Default REM 改怎么选
Catch ex As Exception ShowMessage("错" + ex.Message) End Try
Next
Dim ha As New Hatch REM 还有很多属性可以设置 ha.HatchStyle = HatchStyleType ' ha.HatchStyle = HatchStyle.Normal REM 三种 ha.Layer = LayerName ha.PatternAngle = atternAngle REM 填充图案角度 0 90,270 ha.PatternScale = atternScale ' ha.HatchObjectType = HatchObjectType.HatchObject REM 2种 ha.SetHatchPattern(HatchPatternType.PreDefined, atternName) REM 预定义 ,自定义 ,用户定义 三种 ' ha.SetGripStatus(GripStatus.GripsToBeDeleted) 'ha.SetGradient(GradientPatternType.PreDefinedGradient,"") ' ha.IntersectWith(ent, Intersect.ExtendThis, d, 0, 0) ' ha.EvaluateGradientColorAt(1) ' ha.BoundingBoxIntersectWith( ' ha.AppendLoop ha.AppendLoop(hl) ha.EvaluateHatch(True) Return AddEntity(ha) End Function  ublic Function AddHatch()Function AddHatch(ByVal idC As ObjectIdCollection, ByVal HatchStyleType As HatchStyle, ByVal atternScale As Double, ByVal atternAngle As Double, ByVal LayerName As String, Optional ByVal atternName As String = "ANSI31") As ObjectId REM 圆的填充() REM 多边形与圆组合的填充 ???? Dim ha As New Hatch ha.HatchStyle = HatchStyleType ' ha.HatchStyle = HatchStyle.Normal REM 三种 ha.Layer = LayerName ha.PatternAngle = atternAngle REM 填充图案角度 0 90,270 ha.PatternScale = atternScale ' ha.HatchObjectType = HatchObjectType.HatchObject REM 2种 ha.SetHatchPattern(HatchPatternType.PreDefined, atternName) REM 预定义 ,自定义 ,用户定义 三种
ha.AppendLoop(0, idC) ha.EvaluateHatch(True) Return AddEntity(ha)
End Function
 ublic Function AddPolyline()Function AddPolyline(ByVal ptArr As oint3dCollection, ByVal LayerName As String, Optional ByVal width As Double = 0) As ObjectId REM 有 olyline olyline2d  olyline3d Dim pl As New olyline pl.Layer = LayerName Dim i As Integer Dim bulge, startWidth, endWidth As Double bulge = 0 startWidth = width endWidth = width For i = 0 To ptArr.Count - 1 pl.AddVertexAt(i, New oint2d(ptArr(i).X, ptArr(i).Y), bulge, startWidth, endWidth) Next Return AddEntity(pl)
End Function
 ublic Function AddPolyline()Function AddPolyline(ByVal ptArr As oint3dCollection, ByVal closed As Boolean, ByVal LayerName As String) As ObjectId REM 有 olyline olyline2d  olyline3d 'closed表示闭合 只有添加多边形时才闭合 Dim pline3d As New olyline3d(Poly3dType.SimplePoly, ptArr, closed) pline3d.Layer = LayerName Return AddEntity(pline3d) End Function  ublic Function AddRectangle()Function AddRectangle(ByVal pt1 As oint3d, ByVal pt3 As oint3d, ByVal LayerName As String) As ObjectId Dim ptArr As New oint3dCollection ptArr.Add(pt1) ptArr.Add(New oint3d(pt1.X, pt3.Y, 0)) ptArr.Add(pt3) ptArr.Add(New oint3d(pt3.X, pt1.Y, 0)) Return AddPolyline(ptArr, True, LayerName) End Function  ublic Function AddPolygon()Function AddPolygon(ByVal centerPoint As oint3d, ByVal number As Integer, ByVal radius As Double, ByVal LayerName As String, Optional ByVal width As Double = 0) As ObjectId REM 半径指的是外接圆的半径 Dim angle As Double angle = Math.PI * 2 / number Dim ptArr As New oint3dCollection Dim pt As oint3d Dim i As Integer For i = 0 To number - 1 ' pt.X = centerPoint.X + radius * Math.Cos(i * angle) ' pt.Y = centerPoint.Y + radius * Math.Sin(i * angle) pt = New oint3d(centerPoint.X + radius * Math.Cos(i * angle), centerPoint.Y + radius * Math.Sin(i * angle), 0) ptArr.Add(pt) Next Return AddPolyline(ptArr, True, LayerName)
End Function
REM 没有成功  ublic Function AddTable()Function AddTable(ByVal osition As oint3d, ByVal row As Integer, ByVal col As Integer) As ObjectId Dim mytable As New Table mytable.NumRows = row mytable.NumColumns = col mytable.SetRowHeight(1, 3) mytable.SetTextHeight(3, 2, 2.5) mytable.Position = osition mytable.SetBackgroundColor(2, 2, Color.FromColorIndex(ColorMethod.ByAci, 1)) mytable.SetTextString(0, 0, "你是SB") REM 还有其他的 AddEntity(mytable) End Function 创建组#Region "创建组"  ublic Sub AddGroup()Sub AddGroup(ByVal objIds As ObjectIdCollection, ByVal pGroupName As System.String) Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database Dim tm As DBTransMan = db.TransactionManager 'start a transaction Dim ta As Transaction = tm.StartTransaction() Try Dim gp As New Group(pGroupName, True) Dim dict As DBDictionary = tm.GetObject(db.GroupDictionaryId, OpenMode.ForWrite, True) dict.SetAt("ASDK_NEWNAME", gp)
Dim thisId As ObjectId For Each thisId In objIds gp.Append(thisId) Next tm.AddNewlyCreatedDBObject(gp, True) ta.Commit() Finally ta.Dispose() End Try End Sub #End Region 添加UCS#Region "添加UCS"  ublic Function AddUcs()Function AddUcs(ByVal UcsName As String) As ObjectId Dim objId As ObjectId Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database Dim tm As DBTransMan = db.TransactionManager Dim ta As Transaction = tm.StartTransaction Dim ut As UcsTable = tm.GetObject(db.UcsTableId, OpenMode.ForWrite) If ut.Has(UcsName) Then objId = ut.Item(UcsName) Else Dim utr As New UcsTableRecord utr.Name = UcsName 'utr.Origin= ' utr.XAxis objId = ut.Add(utr) tm.AddNewlyCreatedDBObject(utr, True) ta.Commit()
End If ta.Dispose() tm.Dispose() Return objId End Function #End Region 添加视口#Region "添加视口"  ublic Function AddViewport()Function AddViewport(ByVal ViewPortName As String) As ObjectId Dim objId As ObjectId Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database Dim tm As DBTransMan = db.TransactionManager Dim ta As Transaction = tm.StartTransaction Dim vpt As ViewportTable = tm.GetObject(db.ViewportTableId, OpenMode.ForWrite) If vpt.Has(ViewPortName) Then objId = vpt.Item(ViewPortName) Else Dim vptr As New ViewportTableRecord vptr.Name = ViewPortName ' Autodesk.AutoCAD.Geometry.CoordinateSystem3d() 'vptr.Ucs()
objId = vpt.Add(vptr) tm.AddNewlyCreatedDBObject(vptr, True) ta.Commit() End If ta.Dispose() tm.Dispose() Return objId End Function #End Region 添加视图#Region "添加视图"  ublic Function AddView()Function AddView(ByVal ViewName As String, ByVal render As RenderMode, ByVal ucsId As ObjectId) As ObjectId REM 添加视图() 这个和添加图层是相同的 Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database Dim tm As DBTransMan = db.TransactionManager Dim ta As Transaction = tm.StartTransaction Dim vt As ViewTable = ta.GetObject(db.ViewTableId, OpenMode.ForWrite) Dim objId As ObjectId If vt.Has(ViewName) Then objId = vt.Item(ViewName) Else Dim vtr As New ViewTableRecord vtr.Name = ViewName vtr.RenderMode = render vtr.SetUcs(ucsId) REM vtr.SetUcs( objId = vt.Add(vtr) tm.AddNewlyCreatedDBObject(vtr, True) ta.Commit() End If Return objId End Function #End Region
End Class
|
|