Đến nội dung


Hình ảnh
- - - - -

Không thể vẽ text khi thay đổi UCS


  • Please log in to reply
2 replies to this topic

#1 hoathuongphuoc

hoathuongphuoc

    biết lệnh erase

  • Members
  • PipPipPip
  • 102 Bài viết
Điểm đánh giá: 9 (bình thường)

Đã gửi 16 December 2013 - 02:03 PM

 Chào các bạn,

Mình thử thay đổi toạ độ UCS trong Autocad nhưng sau khi thay đổi xong mình không thể vẽ text trong UCS mới này được, các bạn có cách nào giúp mình với, thanks. Dưới đây là đoạn code của mình, không biết có vấn đề gì không.

   

 

<CommandMethod("ROTZ")> _
    Public Sub ShowHatchDialog()
        Dim ar As New ArrayList()
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim db As Database = acDoc.Database
        Dim ucs As Matrix3d = acDoc.Editor.CurrentUserCoordinateSystem
        Dim cs As CoordinateSystem3d = ucs.CoordinateSystem3d

        Dim pro As New PromptPointOptions("")
        For i As Integer = 0 To 1
            Dim ptResult As PromptPointResult = acDoc.Editor.GetPoint(pro)
            If ptResult.Status <> PromptStatus.OK Then
                Return
            End If
            ar.Add(ptResult.Value)
        Next
        Dim pt1 As Point3d = ar.Item(0)
        Dim pt2 As Point3d = ar.Item(1)
        Dim zAxis As Vector3d = acDoc.Editor.CurrentUserCoordinateSystem.CoordinateSystem3d.Zaxis
        Dim xAxis As Vector3d = pt1.GetVectorTo(pt2)
        Dim yAxis As Vector3d = xAxis.GetPerpendicularVector
        Dim Rot As Matrix3d = Matrix3d.AlignCoordinateSystem(Point3d.Origin, Vector3d.XAxis, Vector3d.YAxis, Vector3d.ZAxis, pt1, xAxis, yAxis, zAxis)
        acDoc.Editor.CurrentUserCoordinateSystem = Rot
        acDoc.Editor.Regen()
        '' Start a transaction
        Using acTrans As Transaction = db.TransactionManager.StartTransaction()

            '' Open the Block table for read
            Dim acBlkTbl As BlockTable
            acBlkTbl = acTrans.GetObject(db.BlockTableId, OpenMode.ForRead)

            '' Open the Block table record Model space for write
            Dim acBlkTblRec As BlockTableRecord
            acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
                                            OpenMode.ForWrite)
            ''Create a single-line text object
            Dim dText As DBText = New DBText()
            dText.SetDatabaseDefaults()
            dText.Position = New Point3d(pt2.X, pt2.Y, 0).TransformBy(Rot)
            dText.Height = 1
            '' condition add floor
            dText.TextString = "6"
            '' Add the new object to the block table record and the transaction
            acBlkTblRec.AppendEntity(dText)
            acTrans.AddNewlyCreatedDBObject(dText, True)
            '' Save the new object to the database
            acTrans.Commit()
        End Using
    End Sub
 

 


  • 0

#2 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1431 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 16 December 2013 - 03:49 PM

Code chạy tốt nghĩa là tạo được Text. (có thể Zoom all để tìm)

nhưng do dòng dText.Position = New Point3d(pt2.X, pt2.Y, 0).TransformBy(Rot)

nên vị trí Text sẽ bị chuyển vị theo hệ toạ độ mới. 

 

Trong t/hợp muốn Text đặt tại vị trí pt2, thay dòng trên bằng dòng : dText.Position = pt2.TransformBy(ucs)


  • 1

#3 hoathuongphuoc

hoathuongphuoc

    biết lệnh erase

  • Members
  • PipPipPip
  • 102 Bài viết
Điểm đánh giá: 9 (bình thường)

Đã gửi 16 December 2013 - 04:17 PM

Mình cảm ơn bạn nhiều.


  • 0