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

[Hỏi] Lấy LayerStyle, TextStyle... từ bản vẽ mẫu

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

Chào các bạn.

Mình đang làm một ứng dụng nhỏ lập trình bằng Autocad.net và có sử dụng DimensionStyle, LayerStyle, TextStyle... trên bản vẽ hiện hành

Mình add text = layer LTEXT

..................        
Try
           	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)
           	acTrans.AddNewlyCreatedDBObject(acText, True)
               acTrans.Commit()
       	End Using
   	Catch ex As Exception
       	MsgBox(ex.ToString)
   	End Try

 

Giờ mình muốn mở bản vẽ bất kỳ và gọi lệnh thì tự động lấy DimensionStyle, LayerStyle, TextStyle... (Toàn bộ mẫu mình đã tạo)từ bản vẽ Tep.dwg của mình cùng thu mục file dll.

Nhờ các bạn hướng dẫn giúp.

Thanks !

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

Chào các bạn.

Mình đang làm một ứng dụng nhỏ lập trình bằng Autocad.net và có sử dụng DimensionStyle, LayerStyle, TextStyle... trên bản vẽ hiện hành

Mình add text = layer LTEXT

..................        
Try
           	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)
           	acTrans.AddNewlyCreatedDBObject(acText, True)
               acTrans.Commit()
       	End Using
   	Catch ex As Exception
       	MsgBox(ex.ToString)
   	End Try

 

Giờ mình muốn mở bản vẽ bất kỳ và gọi lệnh thì tự động lấy DimensionStyle, LayerStyle, TextStyle... (Toàn bộ mẫu mình đã tạo)từ bản vẽ Tep.dwg của mình cùng thu mục file dll.

Nhờ các bạn hướng dẫn giúp.

Thanks !

Hàm insert tất cả các TextStyle trong file :

(PS : kiểm tra lại vì tôi ít sài VB )

Public Sub ImportAllTextStyle(ByRef targetDb As Database, ByRef fname As String)
   	Using sourceDb As New Database()
       	sourceDb.ReadDwgFile(fname, System.IO.FileShare.Read, False, "")
       	Using tr As Transaction = sourceDb.TransactionManager.StartTransaction()
           	Dim sourceTable As TextStyleTable = tr.GetObject(sourceDb.TextStyleTableId, OpenMode.ForRead)
           	Dim idCol As New ObjectIdCollection()
           	For Each txtStyId As ObjectId In sourceTable
               	idCol.Add(txtStyId)
           	Next
           	Dim idMap As New IdMapping()
           	sourceDb.WblockCloneObjects(idCol, targetDb.TextStyleTableId, idMap, DuplicateRecordCloning.Ignore, False)
           	tr.Commit()
       	End Using
   	End Using
End Sub

  • 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

Thanks anh gia_bạch, Em làm nhưng chưa được, không biết còn sai chỗ nào. mong anh sửa lại giúp

 

<CommandMethod("Gia_Bach")> _

Public Sub ImportAllTextStyle(ByRef targetDb As Database, ByRef fname As String)

fname = "\Template"

'Dim targetDb As Database = New Database

'Dim fname As String = "Template"

Using sourceDb As New Database()

sourceDb.ReadDwgFile(fname, System.IO.FileShare.Read, False, "")

Using tr As Transaction = sourceDb.TransactionManager.StartTransaction()

Dim sourceTable As TextStyleTable = tr.GetObject(sourceDb.TextStyleTableId, OpenMode.ForRead)

Dim idCol As New ObjectIdCollection()

For Each txtStyId As ObjectId In sourceTable

idCol.Add(txtStyId)

Next

Dim idMap As New IdMapping()

sourceDb.WblockCloneObjects(idCol, targetDb.TextStyleTableId, idMap, DuplicateRecordCloning.Ignore, False)

tr.Commit()

End Using

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

Thanks anh gia_bạch, Em làm nhưng chưa được, không biết còn sai chỗ nào. mong anh sửa lại giúp

<CommandMethod("Gia_Bach")> _

Public Sub ImportAllTextStyle(ByRef targetDb As Database, ByRef fname As String)

................

End Sub

Biết nói với bạn thế nào nhỉ ?!

Cố lên!

Public Sub ImportAllTextStyle(ByRef targetDb As Database, ByRef fname As String)
Using tr As Transaction = targetDb.TransactionManager.StartTransaction()
 Using sourceDb As New Database()
  sourceDb.ReadDwgFile(fname, System.IO.FileShare.Read, False, "")
  Using trs As Transaction = sourceDb.TransactionManager.StartTransaction()
Dim sourceTable As TextStyleTable = trs.GetObject(sourceDb.TextStyleTableId, OpenMode.ForRead)
Dim idCol As New ObjectIdCollection()
For Each txtStyId As ObjectId In sourceTable
idCol.Add(txtStyId)
Next
Dim idMap As New IdMapping()
sourceDb.WblockCloneObjects(idCol, targetDb.TextStyleTableId, idMap, DuplicateRecordCloning.Ignore, False)
tr.Commit()
  End Using
 End Using
End Using
End Sub
<CommandMethod("ImportTextStyle")> _
Public Sub ImportTextStyle()
Dim db As Database = HostApplicationServices.WorkingDatabase
Dim fileName As String = "d:\2012\104866_vi_du01.dwg"
If System.IO.File.Exists(fileName) Then
 ImportAllTextStyle(db, fileName)
Else
 Application.ShowAlertDialog("Không tìm được file : " + fileName)
End If
End Sub

  • 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

Thanks Anh đã nhiệt tình, em đang mót code nên rất gà !

Anh cho hỏi thêm sau khi lấy được All Text Style vào bản vẽ, muốn đặt mặc định một Text Style nào đó là hiện hành ví dụ "Text-BT" thì code như nào ạ !

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

Thanks Anh đã nhiệt tình, em đang mót code nên rất gà !

Anh cho hỏi thêm sau khi lấy được All Text Style vào bản vẽ, muốn đặt mặc định một Text Style nào đó là hiện hành ví dụ "Text-BT" thì code như nào ạ !

Có thể đặt Text Style nào đó là hiện hành qua biến hệ thống "TextStyle".

 

Sử dụng hàm SetSystemVariable hay GetSystemVariable để gán hay lấy giá trị của biến hệ thống.

vd :

- lấy tên TextStyle hiện hành : Dim txtStyle as String = Application.GetSystemVariable("TextStyle")

- đặt TextStyle "Text-BT" thành hiện hành : Application.SetSystemVariable("TextStyle","Text-BT")

(chú ý cần k/tra sự tồn tại của textstyle "Text-BT" trong bản vẽ nếu không sẽ báo lỗi)

  • 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  

×