Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
6 replies to this topic

#1 NvThanh

NvThanh

    biết zoom

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

Đã gửi 31 August 2012 - 02:23 PM

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 !
  • 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 31 August 2012 - 04:31 PM

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

  • 1

#3 NvThanh

NvThanh

    biết zoom

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

Đã gửi 31 August 2012 - 05:40 PM

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
  • 0

#4 chaudinhphuc

chaudinhphuc

    Edu level: no10, to10

  • Advance Member
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 31 August 2012 - 08:44 PM

Đây là cách mình làm (file đính kèm)
http://www.cadviet.c..._v7869_khác.doc
  • 0

Học nữa, học mãi.       Không thầy đố mày làm nên


#5 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 31 August 2012 - 10:02 PM

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&#244;ng t&#236;m &#273;&#432;&#7907;c file : " + fileName)
End If
End Sub

  • 1

#6 NvThanh

NvThanh

    biết zoom

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

Đã gửi 01 September 2012 - 08:32 AM

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 ạ !
  • 0

#7 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 04 September 2012 - 09:53 AM

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)
  • 1