Chuyển đến nội dung
Diễn đàn CADViet
anhcos

[Chia sẻ] Giao diện hỗ trợ lập trình trong thiết kế

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

Giao diện hỗ trợ lập trình trong thiết kế

 

Đây là một trong những dự án tâm đắc nhất của tôi, nay đưa lên đây chia sẻ với mọi người.

 

Hy vọng nó sẽ hỗ trợ cho các kỹ sư tạo thêm được các ứng dụng cho riêng mình với trình bày đẹp mắt hơn.

 

Các tính năng chính của điều kiểm mới (Control), là một phần thể hiện trước ý tưởng thiết kế trước khi xuất dữ liệu qua Acad hay Excel.

Giao diện có 3 phần, thanh công cụ trên cùng, phần dưới cùng là thanh trạng thái và phần chính giữa là nơi thể hiện.

 

designcontrol.png

 

Trong đó có các chức năng chính:

- Thể hiện các đối tượng như Line, Polyline, Cirle, Arc và Text.

- Có thể phóng to, thu nhỏ và dời bằng chuột

- Đo khoảng cách với truy bắt điểm (kết hợp với zoom và pan như acad)

- Không phụ thuộc vào Acad

 

Sau đây là một số mẫu VD:

 

- VD về dữ liệu có chuyển động

samplef.png

 

 

- Khung dầm:

 

framea.png

 

- Vẽ cây chơi:

 

treen.png

 

- Chương trình vẽ mặt cắt:

 

makesection.png

 

Tải chương trình mẫu ở đây (yêu cầu .NET 2.0)

  • Vote tăng 14

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

Hướng dẵn sử dụng
Chú ý: Nên sử dụng bằng VB.NET trong bộ Visual Studio (VS)

1. Đưa điều kiểm (control) vào Form Designer
- Ấn chuột phải và Toolbox, chọn Choose Item.. như hình vẽ:
29151211.png

- Trong Tab .NET Framework Components chọn nút Browse... và chọn file thư viện EquipmentPreview.dll (tải về trước ở post#3):
93993275.png

- Nhấn OK, trên Toolbox sẽ hiện thêm ra một điều kiểm mới như hình dưới, bên trái:
Đưa điều kiểm vào trong Form, như hình giữa.
Các thuộc tính ban đầu nằm bên phải, trong đó:
ShowCommand, ShowOrigin, ShowPreview, ShowStatusbar, ShowToolbar: thể hiện or không các thành phần xuất hiện trong điều kiểm.
70172471.png


- Chèn vào dòng đầu tiên vào phần viết code của form (sẽ thuận tiện hơn cho việc coding):
Imports EquipmentPreview

2. Điều kiểm EquipmentPreview sẽ thể hiện một đối tượng kế thừa từ lớp cơ sở TEquipment, cách khai báo như sau:
VD: điều kiểm nằm trên Form1 có tên là eqPreview, thì cầu lệnh sau:
eqPreview.SelectObject = equip

trong đó equip được khai báo (màu đỏ bắt nuộc phải có):
Tạo một Class kết thừa từ lớp TEquipment

Class MyEquip
Inherits TEquipment 'dòng này bắt buộc phải có

'hàm khởi tạo, có thể tùy biến, nhưng phải gọi hàm khởi tạo cơ sở
Sub New(Name as String)
MyBase.New(Name)

'Code do người dùng viết thêm nằm ở đây
End Sub
End Class
Dim equip as new MyEquip("Của tôi")

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

- Tạo dữ liệu thể hiện cho đối tượng
+ Tạo hàm ghi đè Create2D như sau:
Public Overrides Sub Create2D()
ClearEntities() 'dùng dòng này để xóa các dữ liệu cũ

'Phần thêm các đối tượng vào đây

End Sub

+ Các thực thể cơ bản xây dựng nên đối tượng bao gồm Line, Polylile (chưa có cung), Rectangle, Arc, Circle, Text.
Sử dụng các hàm tương ứng để thêm vào các thực thể:
AddLine(x1,y1,x2,y2) thêm vào một Line qua 2 điểm
AddPolyline(đỉnhs,Closed) tạo một polyline với các đỉnh nằm trong mảng 2 phần tử X,Y liên tiếp nhau. Closed dùng để đóng hay mở polyline
AddPolyline(x,y,Width,Height) ' tạo một hình chữ nhật
AddCircle(CenX, CenY,Radius) dùng để thêm vào một vòng tròn
AddArc(CenX,CenY,Radius,StartAngle,EngAngle) thêm vào một cung tròn, các góc đều ở radians
AddText(x,y,Text,Height,Rotation) tạo một dòng văn bản, góc nghiêng tính bằng radians

+ Tất cả các hàm trên đều có 2 tham số mặc định nằm cuối cùng là Layer và Type
và một hàm nạp chồng với màu chỉ định có kiểu Color của VB.NET

Layer chọn theo sau:
Public Enum TLayer As Integer
Continuous = 0
Center = 1
Hidden = 2
Text = 3
Dimension = 4
End Enum

và Type
Public Enum TEntityType As Integer
'Trông thấy và xuất qua acad được, được thêm vào đối tượng khác (cha)
Normal = 1
'Trông thấy được nhưng không xuất qua acad được và không thêm vào đối tượng khác (cha)
Preview = 2
'Trông thấy được và xuất qua acad được nhưng không thêm vào đối tượng khác (cha)
Privated = 3
End Enum

VD:
AddLine(1,2,6,-1,TLayer.Center)' tạo đường thẳng qua 2 điểm (1,2) và (6,-1) nằm trong lớp Center
AddLine(1,2,6,-1,Color.Red,TLayer.Center)' tạo đường thẳng qua 2 điểm (1,2) và (6,-1) nằm trong lớp Center, màu đỏ
AddLine(1,2,6,-1,Color.Yellow)tạo đường thẳng qua 2 điểm (1,2) và (6,-1) màu vàng

AddArc(0,1,1,7*PI/4,PI/4,TLayer.Hidden,TEntityType.Preview) cung tròn có góc bắt đầu lớn hơn góc cuối, chỉ thấy trên điều kiểm nhưng không xuất qua Acad được.

- Để xuất qua AutoCAD, ta dùng câu lệnh
equip.Draw(acad_app), trong đó acad_app là biến đại diện cho chương trình AutoCAD đang chạy.

Hàm Draw chỉ xuất các dữ liệu được phép của đối tượng qua AutoCAD (hiện tại bản 1.1 tất cả các đối tượng đều tạo vào layer và textstyle hiện hành)

Còn tiếp ...

  • Vote tăng 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

Tải về

 

* 05-Jul-2012

- Thêm User Control - NumericAcad giúp lấy số liệu từ Acad. Kế thừa từ Control NumericUpDown, ngoài ra còn đo khoảng cách hoặc lấy chiều dài cung, đường thẳng, polyline, số trong text và mtext, kích thước / nội dung của Dimesion.

 

* 02-May-2012:

- Bổ sung thêm lệnh ArrayPolar và ArrayRectangle

 

* 26-Dec-2011:

- Cải tiến chút ít cho dễ sử dụng

 

Bài mẫu:

 

1. http://www.fshare.vn/file/TW7GWAWQ5T

 

2. http://www.fshare.vn/file/TY8FG2D0JT

  • 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

Ui sao mình không thây link đâu nhỉ,kích vào không thây tệp tin xuất hiện?help me?

Ai down được rùi cho mình xin link đựoc không nhỉ?

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

Giao diện hỗ trợ lập trình trong thiết kế

 

Đây là một trong những dự án tâm đắc nhất của tôi, nay đưa lên đây chia sẻ với mọi người.

 

Hy vọng nó sẽ hỗ trợ cho các kỹ sư tạo thêm được các ứng dụng cho riêng mình với trình bày đẹp mắt hơn.

 

Các tính năng chính của điều kiểm mới (Control), là một phần thể hiện trước ý tưởng thiết kế trước khi xuất dữ liệu qua Acad hay Excel.

Giao diện có 3 phần, thanh công cụ trên cùng, phần dưới cùng là thanh trạng thái và phần chính giữa là nơi thể hiện.

 

Tải chương trình mẫu ở đây (yêu cầu .NET 2.0)

Bác anhcos! có phải cái này Bác dùng VDraw khô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

Bác anhcos! có phải cái này Bác dùng VDraw không?

Cái này mình viết từ đầu đến cuối, bản này chỉ hỗ trợ 2D và 1 viewport thôi.

 

Đầu tuần mình sẽ viết phần hướng dẫn sử dụng, cũng rất dễ dùng.

  • Vote tăng 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

Properties Box sử dụng đối tượng gì đấy anhcos ơi???

Câu hỏi của bạn Jin đã 2 ngày nhưng ko thấy bạn trả lời nên xin phép bạn anhcos trả lời thay, nếu chưa đúng thì anhcos chỉnh lại giúp.

Properties box bạn có thể sử dụng control: PropertyGrid có trong .NET Framework 2.0 trở lên. Tuy nhiên bạn nên sử dụng thêm DisplayNameAttribute để thể hiện tên của các thuộc tính cho nó đẹp (vd: Chiều dày thay vì Chiều_dày) và DescriptionAttribute để giải thích ý nghĩa của thuộc tính.

một vd về PropertyGrid:

83237_prgrd.png

 

Thân!

  • 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
Phiên bản 1.1 (26-12-2011): Hình như không sử dụng được bác ah, - Chưa thấy add biến cho textbox để người dùng có thể thay đổi tùy biến

 

Mình vẫn thấy dùng được, cũng không có ai phản hồi thêm.

Add biến cho textbox là sao, VD cụ thể hơn đi bạn.

 

Properties Box sử dụng đối tượng gì đấy anhcos ơi???

 

Câu hỏi này không rõ ràng lắm, dù sao Detailing cũng đã trả lời dùm bạn rồi.

 

Bổ sung 1 chút thôi, cú pháp để cho 1 thuộc tính thể hiện trong PropertyGrid là:

 

- Chèn vào đầu tiên

Imports ComponentModel

 

...

 

- Khai báo thuộc tính

<Category("Tên nhóm các thuộc tính"),DisplayName("Tên thuộc tính"),Description("Diễn giải ý nghĩa thuộc tính")>

public Property ThuocTinh as ...

 

Tất cả các cấp độ dưới cấp public thì thuộc tính sẽ không xuất hiện trong PropertyGrid

  • 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

Ví dụ khi chạy chương trình em muốn thay đổi chiều dài của Line, Polyline, ... bằng cách nhập số vào ô textbox có được không ạ

AddLine(x1,y1,x2,y2) thêm vào một Line qua 2 điểm

gán x1 cho textbox1

x2 cho textbox2

y1 cho textbox3

y2 cho textbox4

Mới học nên ngôn ngữ lập trình chưa diễn tả đúng mong bác thông cảm !

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

Ví dụ khi chạy chương trình em muốn thay đổi chiều dài của Line, Polyline, ... bằng cách nhập số vào ô textbox có được không ạ

AddLine(x1,y1,x2,y2) thêm vào một Line qua 2 điểm

gán x1 cho textbox1

x2 cho textbox2

y1 cho textbox3

y2 cho textbox4

Mới học nên ngôn ngữ lập trình chưa diễn tả đúng mong bác thông cảm !

 

Gởi bạn một ví dụ về thêm mới Line bằng cách nhập tọa độ từ chương trình.

  • 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

Hướng dẫn sử dụng tập chọn đối tượng có trong thư viện:

 

Tập chọn đối tượng của acad rất mạnh và dễ tùy biến, tuy nhiên việc triển khai hơi mất công sức một chút.

Vì thế rút gọn được phần này sẽ đỡ mất thời gian hơn.

 

Trong thư viện sử dụng lớp TFilterSet để chọn đối tượng trong acad.

 

* Cách khai báo:

- TFilterSet(mảng_tên_các_đối_tượng() as string) 'không quan tâm đến tên của tập chọn

- hoặc TFilterSet(Tên_tập chọn as string, mô_tả as string, mảng_tên_các_đối_tượng() as string)

 

VD:

- Tạo tập chọn Line và Text

Dim fs as New TFilterSet(new string(){"Line","Text"})

- Tạo tập chọn MText và Block có tên là "tập chọn a"

Dim fs as New TFilterSet("tap chon a", "tap chon vd", new string(){"Insert", "Mtext"})

 

* Để kết hợp dùng thêm Layer khi chọn, sử dụng hàm SetFilter(layers() as tring) như sau:

Dim fs as New TFilterSet(new string(){"Line","Text"})

fs.SetFilter(new string(){"0","Center"})

Sẽ chọn Line và Text nằm trong layer "0" và "Center"

 

*Để kết hợp với TextStyle, sử dụng hàm SetFilter(layers() as tring, textstyles() as string) như sau:

Dim fs as New TFilterSet(new string(){"Line","Text"})

fs.SetFilter(new string(){"0","Center"}, new string(){"UNI"})[/code]

Sẽ chọn Line và Text nằm trong layer "0" và "Center", Text phải thuộc textstyle có tên là UNI

 

* Để chọn theo tên Block, dùng hàm SetBlock(blocks() as string)

Dim fs as New TFilterSet(new string(){"Line","INSERT","Text"})
fs.SetFilter(new string(){"0","Center"}, new string(){"UNI"})
fs.SetBlock(new string(){"Abc","Def","GGH"})

Sẽ chọn Line, Text, BlockRef trong layer 0 và Center, texstyle UNI, block có tên "Abc" or "Def" or"GGH".

 

* Chọn đối tượng

Gọi hàm SelectOnScreen(Dwg as Object, SelectionSet as Object, Optional Clear as Boolean = True) hoặc

SelectAll(Dwg as Object, SelectionSet as Object, Optional Clear as Boolean = True)

 

Trong đó:

Hàm sẽ trả về True nếu có đối tượng được chọn

- Dwg là biến đại diện cho bản vẽ

- SelectionSet là biến đại diện cho tập chọn sẽ được tạo ra trong bản vẽ

- Clear: xóa tập chọn trước khi bắt đầu chọn mới

 

VD:

if Acad_link() then
...Dim selset as Object
...Dim fs as New TFilterSet(new string(){"Line","Text"})

...if fs.SelectOnScreen(acad.ActiveDocument, selset) then
......'neu co doi tuong duoc chon
......'xu ly no....
......Dim i%
......for i=0 to selset.Count -1
......next i
...end if
end if

 

hoặc đơn giản hơn có thể dùng bằng như sau:

if Acad_link() then
...Dim selset as Object

...If New TFilterSet(New String() {"Line","Text"}).SelectOnScreen(Acad.ActiveDocument, SelSet) Then
......Dim i%
......for i=0 to selset.Count -1
......next i
...End If
End if

 

Lưu ý:

Tập chọn chỉ dùng theo các tên thực thể, layer, textstyle, block name, các kiểu lọc theo các tính chất khác chưa có trong phiên bản này, VD như lọc theo màu, dimstyle ... hoặc áp dụng lọc tùy chọn của người dùng

  • Vote tăng 4

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

Bác anhcos ơi, cho em hỏi, ở tất cả các form của bác: bác dùng tool j cho các ô trên cùng bên trái của các form ấy ạ

em nhìn như là TreeView phải không ạ, khi ấn và là form thay đổi phải không ạ

cơ mà em tìm mãi trên mạng không nói rõ nhiều về TreeView, chỉ là các hướng dẫn thêm bớt TreeView

nếu không phải là treeview bác có thể cho em biết các form này dùng tool gì được không ạ :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

Hi AnhCos!

Mình đang dùng tool của bạn cho ứng dụng của mình. Nói chung là ổn và tuyệt.

Mình xin góp ý bạn có thể add thêm array đối tượng nữa là tuyệt.

Cảm ơn share của bạ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
Hi AnhCos! Mình đang dùng tool của bạn cho ứng dụng của mình. Nói chung là ổn và tuyệt. Mình xin góp ý bạn có thể add thêm array đối tượng nữa là tuyệt. Cảm ơn share của bạn.

 

Đã thêm lệnh tạo đối tượng mảng cho đối tượng: ArrayPolar và ArrayRectangle.

 

Cách sử dụng:

 

'Tạo đối tượng mà không thêm vào khung thể hiện

dim ent as TEntityData = CreateCircle(0,0,1)

 

+ Entity.ArayPolar(NumberOfObjects, AngleToFill, CenterPoint)

'array thành 16 đối tượng, góc quay tổng 3*pi/2, tâm quay (12,8)

dim ents() as TEntityData = ent.ArrayPolar(16 , 3*pi/2, 12, 8)

'thêm vào khung thể hiện

Add(ents)

 

hoặc viết tắt:

Add(ent.ArrayPolar(16 , 3*pi/2, 12, 8))

 

+ Entity.ArrayRectangular (NumberOfRows, NumberOfColumns, DistBetweenRows, DistBetweenColumns)

'array 2 chiều, 4 hàng, 5 cột ...

Add(ent.ArrayRecTangle(4,5,1.3,2.85))

  • 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

Đã cập nhật mới link tải về, nhớ đừng hỏi link ở đâu nhé. :)

 

- Sẵn bonus thêm một User Control - NumericAcad giúp lấy số thực từ Acad.

Em này kế thừa từ Control NumericUpDown, nên thừa hưởng tất cả các thuộc tính và thành phần của cha nó.

Ngoài ra còn đo khoảng cách hoặc lấy chiều dài Arc, Circle, Line, Polyline, số trong Text và Mtext, kích thước/nội dung của Dimesion đưa vào điều kiểm này.

 

7507005702_f753620ffe.jpg

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ập nhật mới link tải về, nhớ đừng hỏi link ở đâu nhé. :)

 

- Sẵn bonus thêm một User Control - NumericAcad giúp lấy số thực từ Acad.

Em này kế thừa từ Control NumericUpDown, nên thừ hưởng tất cả các thuộc tính và thành phần của cha nó.

Ngoài ra còn đo khoảng cách hoặc lấy chiều dài Arc, Circle, Line, Polyline, số trong Text và Mtext, kích thước/nội dung của Dimesion đưa vào điều kiểm này.

 

7507005702_f753620ffe.jpg

Ồ lâu quá mới thấy Anhcos post lại. Cảm ơn nhiều. Bữa giờ không để ý giờ mới thấy link. Control rất hay. Chúc sức khỏe.

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

Bạn Anhcos cho mình muốn chọn đơn vị mặc định khi vẽ thì như thế nào vậy? Ví dụ như mm hoặc inch gì đó. Cái này đơn vị mặc định ban đầu là gì vậy?

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ón này để thể hiện là chủ yếu nên đơn vị không quan trọng nữa, nó là gì là do người dùng tự định nghĩa thôi bạ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

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

×