Đến nội dung


Hình ảnh
- - - - -

Tạo layer cho Text


  • Please log in to reply
3 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 20 December 2013 - 04:36 PM

Chào các bạn,

Các bạn cho mình hỏi sao mình làm như thế này:

 <CommandMethod("dd")> Public Sub DrawText()
        Dim doc As Document = Application.DocumentManager.MdiActiveDocument
        Dim db As Database = doc.Database
        Dim ed As Editor = doc.Editor
        ucs = ed.CurrentUserCoordinateSystem
        doc.LockDocument()
        ''Messenger select stone
        Dim pOption As New PromptPointOptions("")
        pOption.Message = vbLf & "Select Point:"
        Dim pResult As PromptPointResult = ed.GetPoint(pOption)
        doc.LockDocument()
        '' Start a transaction
        Using acTrants As Transaction = db.TransactionManager.StartTransaction()
            Dim acBlkTbl As BlockTable
            acBlkTbl = acTrants.GetObject(db.BlockTableId, _
            OpenMode.ForRead)
            '' Open the Block table record Model space for write
            Dim acBlkTblRec As BlockTableRecord
            acBlkTblRec = acTrants.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
                                            OpenMode.ForWrite)

            ''Create a single-line text object
           Dim acText As DBText = New DBText()
            acText.SetDatabaseDefaults()
            acText.Position = New Point3d(0, 0, 0)
            acText.Height = 100
            acText.TextString = "Cadviet"
            acText.Layer = "LTEXT"
            acText.WidthFactor = 0.8
            acBlkTblRec.AppendEntity(acText)
            '' condition add floor
            acBlkTblRec.AppendEntity(acText)
            acTrants.AddNewlyCreatedDBObject(acText, True)
            acTrants.Commit()
        End Using

Thứ nhất: Không biết tại sao nó lại báo lỗi chỗ acText.Layer = "LTEXT".

Thứ hai: Làm sao khi mình click tạo nhiều chữ "CadViet" thì chữ sau sẽ dóng hàng theo các chữ trước(Ortho). Mình xin cảm ơn.


  • 0

#2 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 22 December 2013 - 09:36 PM

có ai có cách set layer không không. Giúp mình với.


  • 0

#3 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 23 December 2013 - 01:20 PM

Chào các bạn,

Các bạn cho mình hỏi sao mình làm như thế này:

 <CommandMethod("dd")> Public Sub DrawText()
        Dim doc As Document = Application.DocumentManager.MdiActiveDocument
        Dim db As Database = doc.Database
        Dim ed As Editor = doc.Editor
        ucs = ed.CurrentUserCoordinateSystem
        doc.LockDocument()
        ''Messenger select stone
        Dim pOption As New PromptPointOptions("")
        pOption.Message = vbLf & "Select Point:"
        Dim pResult As PromptPointResult = ed.GetPoint(pOption)
        doc.LockDocument()
        '' Start a transaction
        Using acTrants As Transaction = db.TransactionManager.StartTransaction()
            Dim acBlkTbl As BlockTable
            acBlkTbl = acTrants.GetObject(db.BlockTableId, _
            OpenMode.ForRead)
            '' Open the Block table record Model space for write
            Dim acBlkTblRec As BlockTableRecord
            acBlkTblRec = acTrants.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
                                            OpenMode.ForWrite)

            ''Create a single-line text object
           Dim acText As DBText = New DBText()
            acText.SetDatabaseDefaults()
            acText.Position = New Point3d(0, 0, 0)
            acText.Height = 100
            acText.TextString = "Cadviet"
            acText.Layer = "LTEXT"
            acText.WidthFactor = 0.8
            acBlkTblRec.AppendEntity(acText)
            '' condition add floor
            acBlkTblRec.AppendEntity(acText)
            acTrants.AddNewlyCreatedDBObject(acText, True)
            acTrants.Commit()
        End Using

Thứ nhất: Không biết tại sao nó lại báo lỗi chỗ acText.Layer = "LTEXT".

Thứ hai: Làm sao khi mình click tạo nhiều chữ "CadViet" thì chữ sau sẽ dóng hàng theo các chữ trước(Ortho). Mình xin cảm ơn.

Trả lời cho bạn :

Câu hỏi thứ nhất : nó lại báo lỗi chỗ acText.Layer = "LTEXT".

- khi gán thuộc tính Layer cho 1 Entity, CAD y/cầu Layer đó phải tồn tại (nghĩa là trong bản vẽ đã có layer đó hoặc trong code có dòng thêm layer này trước đó). Nhưng khi chạy lệnh vì 1 lý do nào đó (???) nếu bản vẽ đã có layer tên là "LTEXT" thì sẽ không có lỗi.

Câu hỏi thứ hai :  chữ sau sẽ dóng hàng theo các chữ trước.

- trong code trên, dòng acText.Position = New Point3d(0, 0, 0) gán vị trí của Text tại tọa độ : (0, 0, 0) nên k/quả đương nhiên là các Text phải trùng nhau tại gốc tọa độ (chứ không chỉ là dóng hàng theo chữ trước).

- nếu muốn thay đổi theo v/trí pick chuột, thay dòng trên bằng dòng : acText.Position = pResult.Value (thêmTransformBy nếu đang ở UCS)


  • 0

#4 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 23 December 2013 - 01:48 PM

Hi, cảm ơn bạn. Mình sẽ rút kinh nghiệm.


  • 0