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.
anhcos

Hướng dẫn lập trình với AutoCAD bằng VB.NET

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

Detailing    278

Cảm ơn anh! đúng là do lỗi ở khai báo reference rồi. Nhưng ko bít xử lý thế nào nhỉ! Em đang dùng win7 64bit, cad2007, VS2008.

Em đã thử xóa hết lệnh chỉ còn chừa lại dòng:

Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

Thì bị báo lỗi

Could not load file or assembly 'acmgd, Version=17.0.54.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.

Có phải là do dùng cad2007 cũ quá ko phù hợp với VS2008 nên file acmgd load vào bị lỗi ko nhỉ.

còn cái tools DotNetARXToolsForVS2008 em down về cài đặt xong rồi chẳng bít mở hay sử dụng thế nào cả.Mong a hướng dẫn dùm 1 xí. Em cũng mới bít VB được hơn nữa năm còn VB.net thì được vài tuần nên nhìu cái cơ bản vẫn ko nắm

 

bạn thử chuyển properties copy Local của acmgd và acdbmgd thènh true thử coi còn lỗi ko. cái này có thể là do chạy CAD32 bit trên nền win 64 bit nên ko load dc dll 32 bit

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
anhcos    177

Hề hề! Em lại làm phiền các Bác chút.

Em gạp sự cố với hatch với code sau

Dim OuterLoop(0 To 0) As Object

OuterLoop(0) = plineObj

Add_plHatch = AcadApp.ActiveDocument.ModelSpace.AddHatch(0, hName, True)

Add_plHatch.AppendOuterLoop(OuterLoop)

bị lỗi "Invalid object array" thật bó tay với cái .net này.

 

Lỗi này rất khó hiểu, mà không có cách giải quyết.

 

Bạn dùng cách sau xem sao:

Chèn thư viện đối tượng của CAD mà mình đã trích xuất qua dạng dll ở đây, bao gồm AutoCAD.DLL và AXDBLib.dll.

2 thư viện này copy vào cùng chỗ với chương trình đã biên dịch.

 

Lúc đó trong chương trình mình sẽ dùng code giống như chèn thư viện chuẩn của CAD vậy.

 

Như VD trên sẽ viết lại, theo kiểu thực thi giao diện:

 

Imports AutoCAD

Imports AXDBLib

...

...

Dim AcadApp as IAcadApplication

...

Dim plineObj as IAcadPolyline

...

Dim OuterLoop(0 To 0) As IAcadEntity

OuterLoop(0) = plineObj

 

Dim Add_plHatch as IAcadHatch = AcadApp.ActiveDocument.ModelSpace.AddHatch(0, hName, True)

Add_plHatch.AppendOuterLoop(OuterLoop)

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
phamngoctukts    708

Lỗi này rất khó hiểu, mà không có cách giải quyết.

 

Bạn dùng cách sau xem sao:

Chèn thư viện đối tượng của CAD mà mình đã trích xuất qua dạng dll ở đây, bao gồm AutoCAD.DLL và AXDBLib.dll.

2 thư viện này copy vào cùng chỗ với chương trình đã biên dịch.

 

Lúc đó trong chương trình mình sẽ dùng code giống như chèn thư viện chuẩn của CAD vậy.

 

Như VD trên sẽ viết lại, theo kiểu thực thi giao diện:

 

Imports AutoCAD

Imports AXDBLib

...

...

Dim AcadApp as IAcadApplication

...

Dim plineObj as IAcadPolyline

...

Dim OuterLoop(0 To 0) As IAcadEntity

OuterLoop(0) = plineObj

 

Dim Add_plHatch as IAcadHatch = AcadApp.ActiveDocument.ModelSpace.AddHatch(0, hName, True)

Add_plHatch.AppendOuterLoop(OuterLoop)

Chào Bác! Em imports 2 file của bác vào thì được nhưng khi chạy thì lại báo lỗi không nhận file. Mà cái này Bác viết trên nền net1.0 à. Lúc Add vào nó báo phải thay đổi version của net framework.

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
anhcos    177

Chào Bác! Em imports 2 file của bác vào thì được nhưng khi chạy thì lại báo lỗi không nhận file. Mà cái này Bác viết trên nền net1.0 à. Lúc Add vào nó báo phải thay đổi version của net framework.

 

2 thư viện này là trích xuất từ 2 thư viện chuẩn của AutoCAD:

- AutoCAD.dll trích xuất ra từ AutoCAD 17 Type Library

- AXDBLib.dll trích xuất ra từ AutoCAD/ObjectDBX 17 Common Type Library

 

Để trích xuất, bạn dùng command line của windows, tìm đến file tlbimp.exe để xuất thư viện TLB --> DLL.

Bạn có thể dùng .NET reflector để lấy mã nguồn dạng VB/C# từ thư viện dll kia luôn. Từ đó về sau có thể dùng các thư viện mã nguồn chèn trực tiếp vào chương trình mà không cần add bất kỳ thư viện nào nữa.

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
Detailing    278

2 thư viện này là trích xuất từ 2 thư viện chuẩn của AutoCAD:

- AutoCAD.dll trích xuất ra từ AutoCAD 17 Type Library

- AXDBLib.dll trích xuất ra từ AutoCAD/ObjectDBX 17 Common Type Library

 

Để trích xuất, bạn dùng command line của windows, tìm đến file tlbimp.exe để xuất thư viện TLB --> DLL.

Bạn có thể dùng .NET reflector để lấy mã nguồn dạng VB/C# từ thư viện dll kia luôn. Từ đó về sau có thể dùng các thư viện mã nguồn chèn trực tiếp vào chương trình mà không cần add bất kỳ thư viện nào nữa.

 

Bạn có thể hướng dẫn cách lấy mã nguồn của file dll trên không hoặc đã có sẵn cũng dc để chèn vào chương trình?

Thanks bạn nhiều.

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

Hi Anhcos!

Mình thấy bạn cũng rất khá về Auocad.net. Mình muốn làm quen để học hỏi thêm nếu tiện cho mình email với. Email của mình phuonghuynhduy80@gmail.com. Thân chào.

Mình cũng đang nghiên cứu Autocad.net và đang muốn reference *Arx vào *.Dll không biết có được không?

Mình đang định Add các Class do các phần mềm khác chứa trong *.Arx vào project của mình, nhưng chưa có cách nào. Bạn biết hướng dẫn mình vớ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
phamngoctukts    708

2 thư viện này là trích xuất từ 2 thư viện chuẩn của AutoCAD:

- AutoCAD.dll trích xuất ra từ AutoCAD 17 Type Library

- AXDBLib.dll trích xuất ra từ AutoCAD/ObjectDBX 17 Common Type Library

 

Để trích xuất, bạn dùng command line của windows, tìm đến file tlbimp.exe để xuất thư viện TLB --> DLL.

Bạn có thể dùng .NET reflector để lấy mã nguồn dạng VB/C# từ thư viện dll kia luôn. Từ đó về sau có thể dùng các thư viện mã nguồn chèn trực tiếp vào chương trình mà không cần add bất kỳ thư viện nào nữa.

Trời ơi! Bác nói em mới search trên google ra cả đống. không ngờ cái .net vày dịch ngược dễ vậy. Có khi phải quay về VB6 thôi. Híc

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
anhcos    177

Cách sử dụng tlbimp.ex:

Đây là tiện tích của VS, nằm đâu đó trong thư mục cài đặt của microsoft visual studio, search là ra ngay thôi.

Cách sử dụng từ ms: http://msdn.microsoft.com/en-us/library/tt0cf3sx%28VS.80%29.aspx

Sử dụng trực tiếp từ Command Line của windows.

 

.NET reflector là công cụ dịch ngược file .NET, hỗ trợ dịch ngược .exe, .dll. Bản này tìm và tra cứu trên google có rất nhiều.

Khi cài đặt cần thêm addon FileDisassembler mới dịch ngược được.

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
anhcos    177

Trời ơi! Bác nói em mới search trên google ra cả đống. không ngờ cái .net vày dịch ngược dễ vậy. Có khi phải quay về VB6 thôi. Híc

 

Vì thế trong visual studio đã có sẵn công cụ mã hóa code rồi là Dotfuscate, Vô google mà tìm.

  • Vote tăng 2

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
phamngoctukts    708

2 thư viện này là trích xuất từ 2 thư viện chuẩn của AutoCAD:

- AutoCAD.dll trích xuất ra từ AutoCAD 17 Type Library

- AXDBLib.dll trích xuất ra từ AutoCAD/ObjectDBX 17 Common Type Library

 

Để trích xuất, bạn dùng command line của windows, tìm đến file tlbimp.exe để xuất thư viện TLB --> DLL.

Bạn có thể dùng .NET reflector để lấy mã nguồn dạng VB/C# từ thư viện dll kia luôn. Từ đó về sau có thể dùng các thư viện mã nguồn chèn trực tiếp vào chương trình mà không cần add bất kỳ thư viện nào nữa.

Bác có thể hướng dẫn em cách lấy code của thư viện cho vào code cua mình được không. Cái này em chưa biết làm thế 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
phamngoctukts    708

Bác có thể hướng dẫn em cách lấy code của thư viện cho vào code cua mình được không. Cái này em chưa biết làm thế nào?

Đã fix được rồi các Bác ạ.

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
zoro107    10

cảm ơn bác anhcos nhie72u nhé! bác còn bài nào nữa thì post lên cho mọi người tham khảo với. Mình tin là mọi người đang theo bac hằng ngày đấy :D.

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
Gà mờ    0

Các bác ơi cho em hỏi sao hàm RemoveItems & AddItems của SelectionSet chạy toàn báo lỗi vậy

=================================================

Invalid argument Items in RemoveItems

=================================================

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
anhcos    177

Các bác ơi cho em hỏi sao hàm RemoveItems & AddItems của SelectionSet chạy toàn báo lỗi vậy

=================================================

Invalid argument Items in RemoveItems

=================================================

 

Một số Property và Method không dùng theo kiểu later binding được, mình chẳng biết tại sao, mặc dù cú pháp không sai tí nào.

 

Trường hợp này giải quyết bằng cách lọc ngay từ đầu cho phần chọn đối tượ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

Hiện tại có nhiều người muốn tìm hiểu về lập trình trên nền tảng .NET với AutoCAD.

Với một số kinh nghiệm tích lũy được về lập trình với AutoCAD, tôi mạn phép viết phần hướng dẫn này.

Hy vọng là sẽ có nhiều điều bổ ích cho mọi người.

 

Một số ghi chú: Trong các phần hướng dẫn, chỉ chú trọng đến cách thức giao tiếp với CAD mà không bàn về việc sử dụng và thao tác các chương trình lập trình.

Có thể sử dụng VB.NET hoặc C#, nhưng các hướng dẫn sau này sẽ viết bằng code VB.NET.

 

Chương trình tạo ra sẽ chạy độc lập với AutoCAD, không sử dụng tham chiếu đến thư viện đối tượng của AutoCAD mà sử dụng kỹ thuật liên kết - muộn.

So với phương pháp chèn thư viện tham chiếu thì nó có ưu điểm riêng và thuận lợi riêng.

- Ưu điểm: giao tiếp với phần lớn các phiên bản của CAD

- Nhược điểm:

Không có sẵn các lớp, hàm và các hằng số AutoCAD, người dùng phải tự định nghĩa, tự ghi nhớ lấy tên.

Một số chức năng không sử dụng tường minh được.

 

I. Tạo liên kết với AutoCAD

Vì AutoCAD là đối tượng chính nhắm tới và thường xuyên thao tác đến nó, cho nên cần khai báo một biến đại diện cho chương trình AutoCAD (tương tự như AcadApplication trong VBA) để dễ dàng thao tác như sau:

 

'Biến toàn cục chỉ đến chương trình AutoCAD chạy sau cùng nhất,

Public Acad As Object

 

Để làm việc với biến này, cần tạo ra sự liên kết chương trình AutoCAD đến nó.

Tại thời điểm chạy, các dữ liệu của chương trình AutoCAd sẽ được ép sang biến Acad, với biến này ta có thể truy xuất đến các thuộc tính và hàm của nó, phương pháp này gọi là pp liên kết muộn.

 

Trước hết định nghĩa cách thức liên kết như sau:

Enum acAcadLink As Integer

'Chỉ liên kết đến chương trình AutoCAD đang chạy

Link = 1

 

'Tạo một phiên chạy mới của chương trình AutoCAD

NewSession = 2

 

'Liên kết đến chương trình AutoCAD, nếu không được thì chạy một bản mới

LinkNewSession = 3

End Enum

 

và đây là hàm dùng để liên kết với một biến bất kỳ chứa đựng thông tin của chương trình AutoCAD

 

   ''' <summary>
''' Hàm liên kết với AutoCAD, đồng thời hiển thị thông báo lỗi (nếu có)
''' </summary>
''' <param name="acad_app">Trả về biến liên kết đại diện cho chương trình AutoCAD</param>
''' <param name="op">Tùy chọn liên kết</param>
''' <param name="Visible">Có hiển thị chương trình AutoCAD hay không</param>
''' <returns>True nếu thành công, ngược lại là false</returns>
''' <remarks>Hàm này có thêm hàm ghi đè</remarks>
Public Function ACADLink(ByRef acad_app As Object, Optional ByVal op As acAcadLink = acAcadLink.Link, Optional ByVal Visible As Boolean = True) As Boolean
      Select Case op
		Case acAcadLink.Link
			Try
				acad_app = GetObject(, "AutoCAD.Application")
			Catch
				If MsgBox("AutoCAD chưa chạy, khởi động nó ?", MsgBoxStyle.YesNo, "Chú ý") = MsgBoxResult.Yes Then
					Try
						acad_app = CreateObject("AutoCAD.Application")
					Catch
						MsgBox("Có lỗi khi khởi động AutoCAD!", MsgBoxStyle.Information, "Chú ý")
						Return False
					End Try
				Else
					Return False
				End If
			End Try

		Case acAcadLink.LinkNewSession
			Try
				acad_app = GetObject(, "AutoCAD.Application")
			Catch
				Try
					acad_app = CreateObject("AutoCAD.Application")
				Catch
					MsgBox("Có lỗi khi khởi động AutoCAD!", MsgBoxStyle.Information, "Chú ý")
					Return False
				End Try
			End Try

		Case acAcadLink.NewSession
			Try
				acad_app = CreateObject("AutoCAD.Application")
			Catch
				MsgBox("Có lỗi khi khởi động AutoCAD!", MsgBoxStyle.Information, "Chú ý")
				Return False
			End Try
	End Select

	Try
		Dim acAcadState = acad_app.GetAcadState
		If Not acAcadState.IsQuiescent Then
			MsgBox("AutoCAD chưa sẵn sàng. Hãy đóng hộp thoại đang mở hoặc thoát khỏi lệnh đang thực hiện", MsgBoxStyle.Critical, "Chú ý")
		Else
			acad_app.Visible = Visible
			Return True
		End If
	Catch
		Return False
	End Try
End Function

 

Trong trường hợp muốn liên kết với biến Acad đã khai báo ở trên, ta dùng hàm sau

 

 ''' <summary>
''' Hàm liên kết với AutoCAD và gán vào biến Acad, đồng thời hiển thị thông báo lỗi (nếu có)
''' </summary>
''' <param name="op">Tùy chọn liên kết</param>
''' <param name="Visible">Có hiển thị chương trình AutoCAD hay không</param>
''' <returns>True nếu thành công, ngược lại là false</returns>
''' <remarks>Hàm này có thêm hàm ghi đè</remarks>
Public Function ACADLink(Optional ByVal op As acAcadLink = acAcadLink.Link, Optional ByVal Visible As Boolean = True) As Boolean
	Return ACADLink(Acad, op, Visible)
End Function

 

VD:

Để liên kết biến Acad với chương trình AutoCAD đang chạy, ta dùng như sau:

if ACADLink() then

'Nếu AutoCAD chưa chạy thì câu lệnh if sẽ kết thúc

'Làm cái gì đó ở đây

end if

 

Để liên kết biến Acad với chương trình AutoCAD đang chạy, or chưa chạy thì chạy nó, ta dùng như sau:

if ACADLink(acAcadLink.LinkNewSession) then

'Làm cái gì đó ở đây

end if

 

Để liên kết biến MyAcad với một phiên mới AutoCAD đồng thời ẩn nó để xử lý chạy nền

Dim MyAcad as Object

if ACADLink(MyAcad, acAcadLink.NewSession, False) then

'Làm cái gì đó ở đây

end if

 

Tải về ch trình mẫu VD về thao tác với AutoCAD

99284884.jpg

 

Phần 2: Thao tác với các đối tượng AutoCAD

 

 

Phần 3: Lập trình với bản vẽ

Source chương trình mẫu: http://www.mediafire.com/file/99auvrs75mgi...WorkWithDwg.rar

 

Phần 4: Lập trình với các đối tượng trong bản vẽ

Source chương trình mẫu:

1. Thao tác với các đối tượng

2. Tạo bảng trong CAD từ dữ liệu trong Excel

3. Break các Polyline thành các Polyline con tại các giao điểm giữa chúng với nhau.

:mellow: Chào AnhCos!

Chúc anh có nhiều sức khỏe, sao anh lập trình hay thế, anh hướng dẫn hay cho em xin source bài trên đi nhé tiện nghiên cứu cho việc học.

Cám ơn anh nhiều

Xanhnhnn280683@gmail.com Kính chào. :blink:

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
garupro    7

Bạn nào tạo được Hatch trong Net không mình làm hoài đến phần thêm đối tượng vào toàn báo Invalid object array , Nếu dùng Sencommand thì được nhưng khi cho vào vòng lặp thì Cad đơ luông (Chắc Net gửi nhiều dữ liệu quá)

Dim diem(14) As Double
       	Dim pline As Object
       	diem(0) = x
       	diem(1) = y + dao / tile
       	diem(2) = 0
       	diem(3) = x + khoangcachcoc
       	diem(4) = y + dao / tile
       	diem(5) = 0
       	diem(6) = x + khoangcachcoc
       	diem(7) = y - dap / tile
       	diem(8) = 0
       	diem(9) = x
       	diem(10) = y - dap / tile
       	diem(11) = 0
       	diem(12) = x
       	diem(13) = y + dao / tile
       	diem(14) = 0
       	pline = Dwg.ModelSpace.AddPolyline(diem)
Dim hatchobj As Object
       	Dim ptname As String
        	Dim pttype As Long
        	Dim bass As Boolean
       	Dim lopp(0)
         	ptname = "ANSI31"
        	pttype = 0
        	bass = True
       	lopp(0) = pline
       	hatchobj = Dwg.ModelSpace.AddHatch(pttype, ptname, bass)
       	hatchobj.AppendOuterLoop(lopp) ' Báo lỗi ở đây nè

Chỉnh sửa theo garupro

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
Jin Yong    334

Bạn nào tạo được Hatch trong Net không mình làm hoài đến phần thêm đối tượng vào toàn báo Invalid object array , Nếu dùng Sencommand thì được nhưng khi cho vào vòng lặp thì Cad đơ luông (Chắc Net gửi nhiều dữ liệu quá)

Dim diem(14) As Double
       	Dim pline As Object
       	diem(0) = x
       	diem(1) = y + dao / tile
       	diem(2) = 0
       	diem(3) = x + khoangcachcoc
       	diem(4) = y + dao / tile
       	diem(5) = 0
       	diem(6) = x + khoangcachcoc
       	diem(7) = y - dap / tile
       	diem(8) = 0
       	diem(9) = x
       	diem(10) = y - dap / tile
       	diem(11) = 0
       	diem(12) = x
       	diem(13) = y + dao / tile
       	diem(14) = 0
       	pline = Dwg.ModelSpace.AddPolyline(diem)
Dim hatchobj As Object
       	Dim ptname As String
    		Dim pttype As Long
    		Dim bass As Boolean
       	Dim lopp(0)
         	ptname = "ANSI31"
    		pttype = 0
    		bass = True
       	lopp(0) = pline
       	hatchobj = Dwg.ModelSpace.AddHatch(pttype, ptname, bass)
       	hatchobj.AppendOuterLoop(lopp) ' Báo lỗi ở đây nè

 

Mình tạo hatch như thế này:

 

Sub Add_CONKE(ByVal X1, ByVal Y1, ByVal X2, ByVal Y2)
   	Dim acDoc As Document = AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
   	Dim acCurDb As Database = acDoc.Database
   	Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
       	Dim acBlkTbl As BlockTable
       	acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, DatabaseServices.OpenMode.ForRead)
       	Dim acBlkTblRec As BlockTableRecord
       	acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), DatabaseServices.OpenMode.ForWrite)
       	Dim acLine1 As Line = New Line(New Point3d(X1, Y1, 0), New Point3d(X2, Y1, 0))
       	acLine1.SetDatabaseDefaults()
       	acLine1.ColorIndex = 5
       	acBlkTblRec.AppendEntity(acLine1)
       	acTrans.AddNewlyCreatedDBObject(acLine1, True)
       	Dim acLine2 As Line = New Line(New Point3d(X2, Y1, 0), New Point3d(X2, Y2, 0))
       	acLine2.SetDatabaseDefaults()
       	acLine2.ColorIndex = 5
       	acBlkTblRec.AppendEntity(acLine2)
       	acTrans.AddNewlyCreatedDBObject(acLine2, True)
       	Dim acLine3 As Line = New Line(New Point3d(X1, Y2, 0), New Point3d(X2, Y2, 0))
       	acLine3.SetDatabaseDefaults()
       	acLine3.ColorIndex = 5
       	acBlkTblRec.AppendEntity(acLine3)
       	acTrans.AddNewlyCreatedDBObject(acLine3, True)
       	Dim acLine4 As Line = New Line(New Point3d(X1, Y1, 0), New Point3d(X1, Y2, 0))
       	acLine4.SetDatabaseDefaults()
       	acLine4.ColorIndex = 5
       	acBlkTblRec.AppendEntity(acLine4)
       	acTrans.AddNewlyCreatedDBObject(acLine4, True)
       	Dim acObjIdColl As ObjectIdCollection = New ObjectIdCollection()
       	acObjIdColl.Add(acLine1.ObjectId)
       	acObjIdColl.Add(acLine2.ObjectId)
       	acObjIdColl.Add(acLine3.ObjectId)
       	acObjIdColl.Add(acLine4.ObjectId)
       	Dim acHatch As Hatch = New Hatch()
       	acBlkTblRec.AppendEntity(acHatch)
       	acTrans.AddNewlyCreatedDBObject(acHatch, True)
       	acHatch.SetDatabaseDefaults()
       	acHatch.SetHatchPattern(HatchPatternType.PreDefined, "ANSI31")
       	acHatch.PatternScale = 100
       	acHatch.SetHatchPattern(acHatch.PatternType, acHatch.PatternName)
       	acHatch.Associative = True
       	acHatch.AppendLoop(HatchLoopTypes.Outermost, acObjIdColl)
       	acHatch.EvaluateHatch(True)
       	acHatch.ColorIndex = 251
       	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
garupro    7

Cách của bạn có chạy được với Cad 2007 không ? Mình đang làm trên 2007 dùng dạng trên toàn báo lỗi ở mấy file dll thui

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
cuongvule    1

Vì thế trong visual studio đã có sẵn công cụ mã hóa code rồi là Dotfuscate, Vô google mà tìm.

Hôm nay đọc đc bài viết của bác Anhcos hay quá. Đúng cái mình đang cần, nhưng lại không down đc code của các vd. Bác anhcos nếu còn lưu mấy cái code đấy thì có thể bớt chút thời gian up lại hoặc gửi cho em xin với. Cảm ơn bác nhiều.

Email: cuongvule@gmail.com

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
sanit    3

thế bác ơi bọn e chả biết gì về lập trinh hay ăn sẵn thì sao đây bác post thành quả lên đi để e xào nấu luôn

 

Bắt đầu không có ai là biết hết, bạn vào đây để tham khảo, có nhiều cái cho bạn xào nấu đấy ^^ http://docs.autodesk.com/ACD/2010/ENU/AutoCAD%20.NET%20Developer....

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

 

Mình tạo hatch như thế này:

 

Sub Add_CONKE(ByVal X1, ByVal Y1, ByVal X2, ByVal Y2)
   	Dim acDoc As Document = AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
   	Dim acCurDb As Database = acDoc.Database
   	Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
       	Dim acBlkTbl As BlockTable
       	acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, DatabaseServices.OpenMode.ForRead)
       	Dim acBlkTblRec As BlockTableRecord
       	acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), DatabaseServices.OpenMode.ForWrite)
       	Dim acLine1 As Line = New Line(New Point3d(X1, Y1, 0), New Point3d(X2, Y1, 0))
       	acLine1.SetDatabaseDefaults()
       	acLine1.ColorIndex = 5
       	acBlkTblRec.AppendEntity(acLine1)
       	acTrans.AddNewlyCreatedDBObject(acLine1, True)
       	Dim acLine2 As Line = New Line(New Point3d(X2, Y1, 0), New Point3d(X2, Y2, 0))
       	acLine2.SetDatabaseDefaults()
       	acLine2.ColorIndex = 5
       	acBlkTblRec.AppendEntity(acLine2)
       	acTrans.AddNewlyCreatedDBObject(acLine2, True)
       	Dim acLine3 As Line = New Line(New Point3d(X1, Y2, 0), New Point3d(X2, Y2, 0))
       	acLine3.SetDatabaseDefaults()
       	acLine3.ColorIndex = 5
       	acBlkTblRec.AppendEntity(acLine3)
       	acTrans.AddNewlyCreatedDBObject(acLine3, True)
       	Dim acLine4 As Line = New Line(New Point3d(X1, Y1, 0), New Point3d(X1, Y2, 0))
       	acLine4.SetDatabaseDefaults()
       	acLine4.ColorIndex = 5
       	acBlkTblRec.AppendEntity(acLine4)
       	acTrans.AddNewlyCreatedDBObject(acLine4, True)
       	Dim acObjIdColl As ObjectIdCollection = New ObjectIdCollection()
       	acObjIdColl.Add(acLine1.ObjectId)
       	acObjIdColl.Add(acLine2.ObjectId)
       	acObjIdColl.Add(acLine3.ObjectId)
       	acObjIdColl.Add(acLine4.ObjectId)
       	Dim acHatch As Hatch = New Hatch()
       	acBlkTblRec.AppendEntity(acHatch)
       	acTrans.AddNewlyCreatedDBObject(acHatch, True)
       	acHatch.SetDatabaseDefaults()
       	acHatch.SetHatchPattern(HatchPatternType.PreDefined, "ANSI31")
       	acHatch.PatternScale = 100
       	acHatch.SetHatchPattern(acHatch.PatternType, acHatch.PatternName)
       	acHatch.Associative = True
       	acHatch.AppendLoop(HatchLoopTypes.Outermost, acObjIdColl)
       	acHatch.EvaluateHatch(True)
       	acHatch.ColorIndex = 251
       	acTrans.Commit()
   	End Using
End Sub

 

Mình tạo hatch như thế này:

 

Sub Add_CONKE(ByVal X1, ByVal Y1, ByVal X2, ByVal Y2)
   	Dim acDoc As Document = AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
   	Dim acCurDb As Database = acDoc.Database
   	Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
       	Dim acBlkTbl As BlockTable
       	acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, DatabaseServices.OpenMode.ForRead)
       	Dim acBlkTblRec As BlockTableRecord
       	acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), DatabaseServices.OpenMode.ForWrite)
       	Dim acLine1 As Line = New Line(New Point3d(X1, Y1, 0), New Point3d(X2, Y1, 0))
       	acLine1.SetDatabaseDefaults()
       	acLine1.ColorIndex = 5
       	acBlkTblRec.AppendEntity(acLine1)
       	acTrans.AddNewlyCreatedDBObject(acLine1, True)
       	Dim acLine2 As Line = New Line(New Point3d(X2, Y1, 0), New Point3d(X2, Y2, 0))
       	acLine2.SetDatabaseDefaults()
       	acLine2.ColorIndex = 5
       	acBlkTblRec.AppendEntity(acLine2)
       	acTrans.AddNewlyCreatedDBObject(acLine2, True)
       	Dim acLine3 As Line = New Line(New Point3d(X1, Y2, 0), New Point3d(X2, Y2, 0))
       	acLine3.SetDatabaseDefaults()
       	acLine3.ColorIndex = 5
       	acBlkTblRec.AppendEntity(acLine3)
       	acTrans.AddNewlyCreatedDBObject(acLine3, True)
       	Dim acLine4 As Line = New Line(New Point3d(X1, Y1, 0), New Point3d(X1, Y2, 0))
       	acLine4.SetDatabaseDefaults()
       	acLine4.ColorIndex = 5
       	acBlkTblRec.AppendEntity(acLine4)
       	acTrans.AddNewlyCreatedDBObject(acLine4, True)
       	Dim acObjIdColl As ObjectIdCollection = New ObjectIdCollection()
       	acObjIdColl.Add(acLine1.ObjectId)
       	acObjIdColl.Add(acLine2.ObjectId)
       	acObjIdColl.Add(acLine3.ObjectId)
       	acObjIdColl.Add(acLine4.ObjectId)
       	Dim acHatch As Hatch = New Hatch()
       	acBlkTblRec.AppendEntity(acHatch)
       	acTrans.AddNewlyCreatedDBObject(acHatch, True)
       	acHatch.SetDatabaseDefaults()
       	acHatch.SetHatchPattern(HatchPatternType.PreDefined, "ANSI31")
       	acHatch.PatternScale = 100
       	acHatch.SetHatchPattern(acHatch.PatternType, acHatch.PatternName)
       	acHatch.Associative = True
       	acHatch.AppendLoop(HatchLoopTypes.Outermost, acObjIdColl)
       	acHatch.EvaluateHatch(True)
       	acHatch.ColorIndex = 251
       	acTrans.Commit()
   	End Using
End Sub

 

Chào bạn, Mình đã theo dõi rất nhiều bài viết của bạn và thấy nó rất bổ ích. Về vấn đề tạo Hatch với vb.net mình cũng đã tìm hiểu khá nhiều và vẫn chưa ổn.

Bạn có cách nào tạo Hatch mà không cần dùng đến netload (file dll) để tạo hatch không. Trước mình tạo hatch với vb6 thì được, nhưng chuyển lên vb2010 thì bị lỗi.

Bạn có thể hướng dẫn mình chi tiết hơn được không. Mình dùng thử theo cách của bạn (acd210) nó báo lỗi "Could not load file or assembly 'acdbmgd, Version=18.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format."

Sử dụng cad 2007 thì nó lại báo lỗi "Could not load file or assembly 'acdbmgd.dll' or one of its dependencies. The specified module could not be found". Cám ơn bạn nhiều

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
Jin Yong    334

 

Chào bạn, Mình đã theo dõi rất nhiều bài viết của bạn và thấy nó rất bổ ích. Về vấn đề tạo Hatch với vb.net mình cũng đã tìm hiểu khá nhiều và vẫn chưa ổn.

Bạn có cách nào tạo Hatch mà không cần dùng đến netload (file dll) để tạo hatch không. Trước mình tạo hatch với vb6 thì được, nhưng chuyển lên vb2010 thì bị lỗi.

Bạn có thể hướng dẫn mình chi tiết hơn được không. Mình dùng thử theo cách của bạn (acd210) nó báo lỗi "Could not load file or assembly 'acdbmgd, Version=18.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format."

Sử dụng cad 2007 thì nó lại báo lỗi "Could not load file or assembly 'acdbmgd.dll' or one of its dependencies. The specified module could not be found". Cám ơn bạn nhiều

 

Mình chỉ có thể giúp bạn về vấn đề tạo Hatch thông qua file dll bằng lệnh Netload, phương thức khác chắc phải nhờ bạn chủ topic Anhcos

Về lỗi của bạn, mình đoán nguyên nhân là do khi Reference các file DLL (acdbmgd.dll hay acmgd.dll) bạn đã chưa chuyển chế độ Copy Local sang False. Nếu vẫn để là True thi có thể phần mềm sẽ báo lỗi

 

20120916-AddReference.png

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


×