Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
hoathuongphuoc

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

Các bài được khuyến nghị

 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
 

 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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)

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×