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

CT đếm text và block

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

Chương trình đếm số lượng Text hoặc Block trong vùng chọn.

http://www.cadviet.com/upfiles/3/dembt.rar

Hề hề hề,

Chào bác phamngoctukts,

Chương trình này là bác sưu tầm hay tự viết ra vậy. Ứng dụng nó cho việc thống kê text hay block trên bản vẽ khá tốt. Có điều xài thì được chứ còn mót ở đây khó quá !!!!

Giá như nó là file .lsp thì hay quá.....

  • 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

@ bác Tú : xử lý tốt ở bảng mã TCVN3, cái này e thích lắm ^^

Tuy nhiên tốc độ chậm, có lẽ do tương tác từ VB sang, và chưa array sort ^^ Điều quan trọng nhất cần thiết đó là thể hiện nó trên bản vẽ của bác ạ, hok thì cũng cho người ta copy lại chứ hè ^^ ^^

@bác Bình : lisp thì có thống kê text của bác gia_bach đó ạ ^^

  • 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

@ bác Tú : xử lý tốt ở bảng mã TCVN3, cái này e thích lắm ^^

Tuy nhiên tốc độ chậm, có lẽ do tương tác từ VB sang, và chưa array sort ^^ Điều quan trọng nhất cần thiết đó là thể hiện nó trên bản vẽ của bác ạ, hok thì cũng cho người ta copy lại chứ hè ^^ ^^

@bác Bình : lisp thì có thống kê text của bác gia_bach đó ạ ^^

Anh đang xây dựng tiếp phần xuất bảng. Có thể chọn trực tiếp những dòng nào mà mình muốn xuất sang bảng 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

Đã xây dựng xong phần tạo bảng Up lên cho các bạn test.

http://www.cadviet.com/upfiles/3/loc_text.rar

Sau khi chọn block hoặc text các bạn giữ Ctrl chọn các dòng muốn xuất trong cột giá trị để tạo bảng.

  • 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

Đã xây dựng xong phần tạo bảng Up lên cho các bạn test.

http://www.cadviet.com/upfiles/3/loc_text.rar

Sau khi chọn block hoặc text các bạn giữ Ctrl chọn các dòng muốn xuất trong cột giá trị để tạo bảng.

Chạy rất tốt. Tuy nhiên, tốc độ hơi chậm và chưa xử lý việc sắp xếp theo thứ tự a, b, c

Bạn có thể giới thiệu và nếu có thể cho Tue_NV xin tài liệu lập trình món này không? Rất tuyệt, bạn ạ.

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ạy rất tốt. Tuy nhiên, tốc độ hơi chậm và chưa xử lý việc sắp xếp theo thứ tự a, b, c

Bạn có thể giới thiệu và nếu có thể cho Tue_NV xin tài liệu lập trình món này không? Rất tuyệt, bạn ạ.

Thanks

Thú thực với Bác là em cũng chẳng có tài liệu gì. Trong tay em chỉ có mỗi cái help VBA của cad thôi bác ạ. Toàn phải tự mò thôi.

Nếu Bác Cần tham khảo thì em share code lên cho mọi người cùng xem.

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

Thú thực với Bác là em cũng chẳng có tài liệu gì. Trong tay em chỉ có mỗi cái help VBA của cad thôi bác ạ. Toàn phải tự mò thôi.

Nếu Bác Cần tham khảo thì em share code lên cho mọi người cùng xem.

Ồ!! Nếu được như vậy, xin tạ ơn bạn lắm lắm :wub:

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

Ồ!! Nếu được như vậy, xin tạ ơn bạn lắm lắm :wub:

Code đây Bác. Nhân tiện các bạn cho ý kiến luôn nhé.

Public Class Form1
   Public AcadApp As Object
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       On Error Resume Next
       AcadApp = GetObject(, "AutoCAD.Application")
       If Err.Number <> 0 Then
           Err.Clear()
           AcadApp = CreateObject("AutoCAD.Application")
       End If
       AppActivate(AcadApp.caption)
       AcadApp.visible = True
       AcadApp.windowstate = 3
   End Sub

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Label1.Text = "Bảng thống kê Text"
       On Error Resume Next
       Me.Hide()
       DataGridView1.Rows.Clear()
       Dim ss As Object
       AcadApp.ActiveDocument.SelectionSets("SS").delete()
       ss = AcadApp.ActiveDocument.SelectionSets.Add("SS")
       Dim dtcode(0 To 0) As Short
       Dim gpcode(0 To 0) As Object
       dtcode(0) = 0
       gpcode(0) = "Text"
       ss.selectOnScreen(dtcode, gpcode)
       Me.Show()
       Dim i As Integer, j As Integer, n As Integer, k As Integer
       k = 0
       For i = 0 To ss.count - 1
           n = 1
           For j = 0 To ss.count - 1 Step 1
               If ss(i).textstring = ss(j).textstring And i < j Then
                   n = n + 1
               End If
               If ss(i).textstring = ss(j).textstring And i > j Then
                   GoTo t
               End If
           Next
           DataGridView1.Rows.Insert(k, k + 1, ABC2Uni(ss(i).textstring), n)
           k = k + 1
t:
       Next i
   End Sub

   Public Function ABC2Uni(ByVal str) As String
       Dim i As Integer, arrUNI() As String, sUni As String = "", ABC, UNI
       ABC = "¸µ¶·¹¨¾»¼½Æ©ÊÇÈÉËÐÌÎÏѪÕÒÓÔÖÝ×ØÜÞãßáâä«èåæçé¬íêëìîóïñòô­øõö÷ùýúûüþ®¸µ¶·¹¡¾»¼½Æ¢ÊÇÈÉËÐÌÎÏÑ£ÕÒÓÔÖÝ×ØÜÞãßáâä¤èåæçé¥íêëìîóïñòô¦øõö÷ùýúûüþ§"
       UNI = "225,224,7843,227,7841,259,7855,7857,7859,7861,7863,226,7845,7847,7849,7851,7853,233,232,7867,7869,7865,234,7871,7873,7875,7877,7879,237,236,7881,297,7883,243,242,7887,245,7885,244,7889,7891,7893,7895,7897,417,7899,7901,7903,7905,7907,250,249,7911,361,7909,432,7913,7915,7917,7919,7921,253,7923,7927,7929,7925,273,225,224,7843,227,7841,258,7855,7857,7859,7861,7863,194,7845,7847,7849,7851,7853,233,232,7867,7869,7865,202,7871,7873,7875,7877,7879,237,236,7881,297,7883,243,242,7887,245,7885,212,7889,7891,7893,7895,7897,416,7899,7901,7903,7905,7907,250,249,7911,361,7909,431,7913,7915,7917,7919,7921,253,7923,7927,7929,7925,272"
       arrUNI = Split(UNI, ",")
       For i = 1 To Len(str)
           If InStr(ABC, Mid(str, i, 1)) > 0 Then
               sUni = sUni & ChrW(arrUNI(InStr(ABC, Mid(str, i, 1)) - 1))
           Else
               sUni = sUni & Mid(str, i, 1)
           End If
       Next
       ABC2Uni = sUni
   End Function

   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       Label1.Text = "Bảng thống kê Block"
       On Error Resume Next
       DataGridView1.Rows.Clear()
       Me.Hide()
       Dim ss As Object
       AcadApp.ActiveDocument.SelectionSets("SS").delete()
       ss = AcadApp.ActiveDocument.SelectionSets.add("SS")
       Dim dtcode(0 To 0) As Short
       Dim gpcode(0 To 0) As Object
       dtcode(0) = 0
       gpcode(0) = "INSERT"
       ss.selectOnScreen(dtcode, gpcode)
       Me.Show()
       Dim i As Integer, j As Integer, n As Integer, k As Integer
       k = 0
       For i = 0 To ss.count - 1
           n = 1
           For j = 0 To ss.count - 1 Step 1
               If ss(i).name = ss(j).name And i < j Then
                   n = n + 1
               End If
               If ss(i).name = ss(j).name And i > j Then
                   GoTo t
               End If
           Next
           DataGridView1.Rows.Insert(k, k + 1, ABC2Uni(ss(i).name), n)
           k = k + 1
t:
       Next i
   End Sub

   Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
       Me.Close()
   End Sub

   Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
       Me.Hide()
       Dim sl, i As Integer
       Dim p1(0 To 2) As Double
       Dim table As Object
       p1 = AcadApp.ActiveDocument.Utility.Getpoint(, "Chọn điểm chèn bảng")
       sl = DataGridView1.SelectedCells.Count
       table = AcadApp.ActiveDocument.modelspace.addtable(p1, sl + 2, 3, 100, 1000)
       table.regeneratetablesuppressed = False
       table.vertcellmargin = (0.25 * 100)
       table.horzcellmargin = (0.75 * 100)
       table.setcolumnwidth(0, 300)
       table.setcolumnwidth(1, 2000)
       table.setcolumnwidth(2, 600)
       table.setText(0, 0, (Label1.Text))
       table.setText(1, 0, ("STT"))
       table.setText(1, 1, ("Giá trị"))
       table.setText(1, 2, ("Số lượng"))
       table.SetTextHeight(0, 50)
       table.SetTextHeight(1, 50)
       Dim sl1(0 To sl - 1) As String
       For i = 0 To sl - 1 Step 1
           table.SetCellAlignment(i + 2, 1, 1)
           table.SetTextHeight(i + 2, 50)
           table.settext(i + 2, 0, i + 1)
           table.settext(i + 2, 1, (DataGridView1.SelectedCells(i).FormattedValue))
           'table.settext(i + 2, 1, (DataGridView1.Rows(DataGridView1.SelectedCells(i).RowIndex).FormattedValue))
           Dim b = DataGridView1(2, DataGridView1.SelectedCells(i).RowIndex).FormattedValue
           table.settext(i + 2, 2, B)
       Next
       table.update()
       Me.Show()
   End Sub

   End Class

  • 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

Để chạy nhanh hơn, khi bắt đầu xử lý, bạn ẩn AutoCad đi, và hiện lại nó sau khi làm xong.

Tốc độ hoàn toàn khác biệt gấp vài lần.

 

Còn thuật toán có thể cải tiến 1 chút:

Khi so sánh chuỗi trực tiếp từ tập chọn --> thao tác sẽ lâu hơn vì chương trình phải trích xuất dữ liệu từ ứng dụng khác.

Vì thế tạo một mảng chỉ chứa riêng Text và tiến hành sắp xếp trên nó, tức là trong bộ nhớ sẽ nhanh hơn.

  • 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

chương trình của bạn rất hay. Nhưng mình thấy phần sắp xếp anphaB chưa ổn lắm. Sao mình làm 3,4 lần mà nó toàn sắp ngược lại kô??

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ương trình của bạn rất hay. Nhưng mình thấy phần sắp xếp anphaB chưa ổn lắm. Sao mình làm 3,4 lần mà nó toàn sắp ngược lại kô??

Bạn dùng file mình up cuối cù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

Em thấy tốc độ đã cải thiện nhieu` nhưng hình như chưa có thêm phần up hình của block hả bác?

Nếu có thì có vẻ trực quan hơn.

Ah nó có thể đặt lệnh tắt hay khi dùng luôn phải chạy file .exe hả 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

Chắc bạn ý nói đến tình huống này :

textcount.jpg

 

Kinh nghiệm rút ra từ Lisp thống kê bản vẽ ! <_<

Hề hề.

Thực ra chương trình này em viết lại từ cái lisp thống kê text cua Bác thêm mắm thêm muối tí 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

Bạn dùng file mình up cuối cùng ý.

mình đã dùng file cuối của bạn rồi đó chứ. Tình huống là bị giống như cái hình bác gia_bach đã up. Cái tiếp theo là khi xuất table ra autocad, nó bị ngược lại hết (tứclà xếp theo B-anpha)

PS: theo hình của bác gia_bach thì sao dòng đầu tiên ko theo thứ tự gì hết vậy 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

Chương trình đếm số lượng Text hoặc Block trong vùng chọn.

http://www.cadviet.com/upfiles/3/loc_text_1.rar

Anh ơi, anh có thể chỉnh lại phần mềm một chút được không ạ!

em thấy chương trình của a rất hay, tiện lợi cho việc thống kê, nhưng em lại đang cần liệt kê, VD:

có 5 text: A B C A D, thì em muốn phần mềm liệt kê cho em thành dòng 1 là A, dòng 2 là B, dòng 3 là C, dòng 4 lại là A và dòng 5 là D. Chứ không thống kê có bao nhiêu cái giống nhau được không ạ.

 Cám ơn a trước

 P/S: có cao thủ nào biết chỉnh phần mềm này chỉnh giúp em với ạ :(

  • Vote giảm 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  

×