Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.ApplicationServices
Public Class class1
Friend Shared Sub CreateMyBlock()
Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database
Using tr As Transaction = db.TransactionManager.StartTransaction()
Dim bt As BlockTable = TryCast(tr.GetObject(db.BlockTableId, OpenMode.ForRead), BlockTable)
If bt.Has("MyBlock") = False Then
bt.UpgradeOpen()
Dim btr As New BlockTableRecord()
btr.Name = "MyBlock"
btr.Origin = Point3d.Origin
bt.Add(btr)
tr.AddNewlyCreatedDBObject(btr, True)
' Attribute Definition
Dim attdef As New AttributeDefinition(Point3d.Origin, "MilliSeconds\PSeconds\PMinutes", "Time", "Time ?", db.Textstyle)
attdef.IsMTextAttributeDefinition = True
btr.AppendEntity(attdef)
tr.AddNewlyCreatedDBObject(attdef, True)
End If
tr.Commit()
End Using
End Sub
Friend Shared Sub CreateMyBlockRef()
Dim doc As Document = Application.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Dim ed As Editor = doc.Editor
Dim ppo As New PromptPointOptions(vbLf & "Specify insertion point :")
Dim ppr As PromptPointResult = ed.GetPoint(ppo)
If ppr.Status <> PromptStatus.OK Then
Return
End If
Dim insertionPoint As Point3d = ppr.Value
Using tr As Transaction = db.TransactionManager.StartTransaction()
Dim bt As BlockTable = TryCast(db.BlockTableId.GetObject(OpenMode.ForRead), BlockTable)
Dim blockDef As BlockTableRecord = TryCast(bt("MyBlock").GetObject(OpenMode.ForRead), BlockTableRecord)
Dim ms As BlockTableRecord = TryCast(bt(BlockTableRecord.ModelSpace).GetObject(OpenMode.ForWrite), BlockTableRecord)
Dim blockRef As New BlockReference(insertionPoint, blockDef.ObjectId)
ms.AppendEntity(blockRef)
tr.AddNewlyCreatedDBObject(blockRef, True)
For Each id As ObjectId In blockDef
Dim obj As DBObject = id.GetObject(OpenMode.ForRead)
Dim attDef As AttributeDefinition = TryCast(obj, AttributeDefinition)
If (attDef IsNot Nothing) AndAlso (Not attDef.Constant) Then
Dim attRef As New AttributeReference()
attRef.SetAttributeFromBlock(attDef, blockRef.BlockTransform)
attRef.TextString = [String].Format("MilliSeconds : {0}\PSeconds : {1}\PMinutes : {2}",DateTime.Now.Millisecond.ToString(), DateTime.Now.Second.ToString(), DateTime.Now.Minute.ToString())
blockRef.AttributeCollection.AppendAttribute(attRef)
tr.AddNewlyCreatedDBObject(attRef, True)
End If
Next
tr.Commit()
End Using
End Sub
<CommandMethod("Test")> _
Public Shared Sub TestMethod()
CreateMyBlock()
CreateMyBlockRef()
End Sub
End Class
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.ApplicationServices
Public Class class1
Friend Shared Sub CreateMyBlock()
Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database
Using tr As Transaction = db.TransactionManager.StartTransaction()
Dim bt As BlockTable = TryCast(tr.GetObject(db.BlockTableId, OpenMode.ForRead), BlockTable)
If bt.Has("MyBlock") = False Then
bt.UpgradeOpen()
Dim btr As New BlockTableRecord()
btr.Name = "MyBlock"
btr.Origin = Point3d.Origin
bt.Add(btr)
tr.AddNewlyCreatedDBObject(btr, True)
' Attribute Definition
Dim attdef As New AttributeDefinition(Point3d.Origin, "MilliSeconds\PSeconds\PMinutes", "Time", "Time ?", db.Textstyle)
attdef.IsMTextAttributeDefinition = True
btr.AppendEntity(attdef)
tr.AddNewlyCreatedDBObject(attdef, True)
End If
tr.Commit()
End Using
End Sub
Friend Shared Sub CreateMyBlockRef()
Dim doc As Document = Application.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Dim ed As Editor = doc.Editor
Dim ppo As New PromptPointOptions(vbLf & "Specify insertion point :")
Dim ppr As PromptPointResult = ed.GetPoint(ppo)
If ppr.Status <> PromptStatus.OK Then
Return
End If
Dim insertionPoint As Point3d = ppr.Value
Using tr As Transaction = db.TransactionManager.StartTransaction()
Dim bt As BlockTable = TryCast(db.BlockTableId.GetObject(OpenMode.ForRead), BlockTable)
Dim blockDef As BlockTableRecord = TryCast(bt("MyBlock").GetObject(OpenMode.ForRead), BlockTableRecord)
Dim ms As BlockTableRecord = TryCast(bt(BlockTableRecord.ModelSpace).GetObject(OpenMode.ForWrite), BlockTableRecord)
Dim blockRef As New BlockReference(insertionPoint, blockDef.ObjectId)
ms.AppendEntity(blockRef)
tr.AddNewlyCreatedDBObject(blockRef, True)
For Each id As ObjectId In blockDef
Dim obj As DBObject = id.GetObject(OpenMode.ForRead)
Dim attDef As AttributeDefinition = TryCast(obj, AttributeDefinition)
If (attDef IsNot Nothing) AndAlso (Not attDef.Constant) Then
Dim attRef As New AttributeReference()
attRef.SetAttributeFromBlock(attDef, blockRef.BlockTransform)
attRef.TextString = [String].Format("MilliSeconds : {0}\PSeconds : {1}\PMinutes : {2}",DateTime.Now.Millisecond.ToString(), DateTime.Now.Second.ToString(), DateTime.Now.Minute.ToString())
blockRef.AttributeCollection.AppendAttribute(attRef)
tr.AddNewlyCreatedDBObject(attRef, True)
End If
Next
tr.Commit()
End Using
End Sub
<CommandMethod("Test")> _
Public Shared Sub TestMethod()
CreateMyBlock()
CreateMyBlockRef()
End Sub
End Class
【多行属性块.rar】点击下载此文件
[本日志由 tiancao1001 于 2014-01-19 01:02 AM 编辑]
|
暂时没有评论
发表评论 - 不要忘了输入验证码哦! |