Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
HTTP

Set ActiveLayer trong vb.net

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

Mình dùng cad2009 và vb2005 để vẽ nhưng nếu sử dụng library của cad thì vẫn set ActiveLayer được nhưng khi không sử dụng thì lệnh này báo lỗi.

 

Dim AcadApp As Object 'AcadApplication 'ứng dụng autocad
   Dim Strlayer As String
   Dim Tenlayer As Object

       AcadApp.ActiveDocument.Linetypes.Load("continuous", "acad.lin")
       AcadApp.ActiveDocument.Linetypes.Load("Acad_Iso03W100", "acad.lin")
       Strlayer = "Layermoi"
       Tenlayer = AcadApp.ActiveDocument.Layers.Add(Strlayer)
       With LayerChusolieu
           .Linetype = "continuous"
           .color = acColor.acGreen 'lệnh này gây lỗi????????????????
           .LayerOn = True
           .Lock = False
           .Lineweight = .ACAD_LWEIGHT.acLnWtByLwDefault ''lệnh này gây lỗi?????????
       End With

AcadApp.ActiveDocument.ActiveLayer = Tenlayer 'lệnh này gây lỗi khi chạy

Bác nào khắc phục được xin chỉ giáo với. mình xin cảm ơn!

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
Mình dùng cad2009 và vb2005 để vẽ nhưng nếu sử dụng library của cad thì vẫn set ActiveLayer được nhưng khi không sử dụng thì lệnh này báo lỗi.

 

Dim AcadApp As Object 'AcadApplication 'ứng dụng autocad
   Dim Strlayer As String
   Dim Tenlayer As Object

       AcadApp.ActiveDocument.Linetypes.Load("continuous", "acad.lin")
       AcadApp.ActiveDocument.Linetypes.Load("Acad_Iso03W100", "acad.lin")
       Strlayer = "Layermoi"
       Tenlayer = AcadApp.ActiveDocument.Layers.Add(Strlayer)
       With LayerChusolieu
           .Linetype = "continuous"
           .color = acColor.acGreen 'lệnh này gây lỗi????????????????
           .LayerOn = True
           .Lock = False
           .Lineweight = .ACAD_LWEIGHT.acLnWtByLwDefault ''lệnh này gây lỗi?????????
       End With

AcadApp.ActiveDocument.ActiveLayer = Tenlayer 'lệnh này gây lỗi khi chạy

Bác nào khắc phục được xin chỉ giáo với. mình xin cảm ơn!

 

Vì không dùng thư viện của acad nên không thể dùng các enum của acad được

phải đổi lại code như sau:

'Tenlayer = AcadApp.ActiveDocument.Layers.Add(Strlayer)

Set Tenlayer = AcadApp.ActiveDocument.Layers.Add(Strlayer)

....

'.color = acColor.acGreen 'lệnh này gây lỗi????????????????

.color = "3"

....

' .Lineweight = .ACAD_LWEIGHT.acLnWtByLwDefault ''lệnh này gây lỗi?????????

.Lineweight = -3

....

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

Cảm ơn bác!

AcadApp.ActiveDocument.ActiveLayer = Tenlayer 'lệnh này gây lỗi khi chạy

còn cái lỗi chính này bác có fix được ko. cái này mà không được thì cái trên cũng không có tác dụng.

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
Cảm ơn bác!

AcadApp.ActiveDocument.ActiveLayer = Tenlayer 'lệnh này gây lỗi khi chạy

còn cái lỗi chính này bác có fix được ko. cái này mà không được thì cái trên cũng không có tác dụng.

Vì bạn không post đầy đủ để hàm chạy được nên tôi có sửa lại chút ít và tôi đã test và chạy tốt.

Dòng lệnh

AcadApp.ActiveDocument.ActiveLayer = Tenlayer

không có lỗi mà vì Tenlayer là 1 object nên phải dùng thêm Set ở trước khi gán

Set Tenlayer = AcadApp.ActiveDocument.Layers.Add(Strlayer)thì dòng

AcadApp.ActiveDocument.ActiveLayer = Tenlayer

chạy sẽ không bị lỗi

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ôi dùng vb2005 không cần dùng lệnh set. nếu đánh lệnh này thì nó cũng tự xoá đi mà chỉ thành 1 dòng như trên thôi.

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
       With LayerChusolieu
           .Linetype = "continuous"
           [color="#FF0000"].color = acGreen[/color]
           .LayerOn = True
           .Lock = False
           [color="#FF0000"].Lineweight = .acLnWtByLwDefault[/color]
       End With

AcadApp.ActiveDocument.ActiveLayer = Tenlayer 'lệnh này gây lỗi khi chạy

Bác nào khắc phục được xin chỉ giáo với. mình xin cảm ơn!

 

Đối tượng lớp LayerChusolieu không thấy khai báo?

 

Bạn thử sửa lại code như trên xem sao?

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

đúng là layer LayerChusolieu phải đổi tên thành Tenlayer. hai lỗi trên mình đã fix thành số như bạn hướng dẫn và được rồi. nhưng dòng set Activelayer không chạy được, nó vẫn báo lỗi member not found. Mình đã chuyển sang sử dụng library rồi nhưng mình nghĩ đây cũng là cách hay để dùng với nhiều phiên bản Cad.

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
đúng là layer LayerChusolieu phải đổi tên thành Tenlayer. hai lỗi trên mình đã fix thành số như bạn hướng dẫn và được rồi. nhưng dòng set Activelayer không chạy được, nó vẫn báo lỗi member not found. Mình đã chuyển sang sử dụng library rồi nhưng mình nghĩ đây cũng là cách hay để dùng với nhiều phiên bản Cad.

 

Tenlayer phải là AcadLayer và phải tồn tại trong bản vẽ hiện tại, nếu không có thì nó báo lỗi. Ví dụ về khai báo và sử dụng Layer:

 

	Dim newLayer As AcadLayer

' Tạo Layer  mới và kích hoạt nó hiện hành
Set newLayer = ThisDrawing.Layers.Add("TestLayer")
ThisDrawing.ActiveLayer = newLayer
MsgBox "The new layer is " & newLayer.name, vbInformation, "ActiveLayer Example"

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  

×