Đến nội dung


Hình ảnh
- - - - -

CT đếm text và block


  • Please log in to reply
17 replies to this topic

#1 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 05 March 2011 - 02:01 PM

Chương trình đếm số lượng Text hoặc Block trong vùng chọn.
http://www.cadviet.c.../loc_text_1.rar
  • 4
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#2 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 05 March 2011 - 02:55 PM

Chương trình đếm số lượng Text hoặc Block trong vùng chọn.
http://www.cadviet.c...les/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á.....
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 05 March 2011 - 03:13 PM

@ 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 đó ạ ^^
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#4 duyhung

duyhung

    biết vẽ rectang

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

Đã gửi 05 March 2011 - 04:03 PM

Giao diện đẹp nhưng tốc độ xử lý chưa nhanh bác ah.
Cám ơn bác.
  • 0
Song va chien dau!

#5 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 05 March 2011 - 04:35 PM

@ 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.
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#6 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 05 March 2011 - 07:26 PM

Đã xây dựng xong phần tạo bảng Up lên cho các bạn test.
http://www.cadviet.c.../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.
  • 2
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#7 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 05 March 2011 - 07:57 PM

Đã xây dựng xong phần tạo bảng Up lên cho các bạn test.
http://www.cadviet.c.../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
  • 0

#8 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 05 March 2011 - 08:08 PM

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.
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#9 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 05 March 2011 - 08:13 PM

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

#10 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 05 March 2011 - 08:18 PM

Ồ!! 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

  • 4
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#11 anhcos

anhcos

    biết lệnh hatchedit

  • Advance Member
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 170 (tàm tạm)

Đã gửi 05 March 2011 - 10:10 PM

Để 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.
  • 1
Clear sky!

MF Rock collection.

#12 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 06 March 2011 - 10:14 AM

Mình đã fix về tốc độ và sắp xếp lại theo thứ tự AnfaB.
http://www.cadviet.c.../loc_text_2.rar
  • 1
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#13 funnyzui

funnyzui

    biết vẽ arc

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

Đã gửi 18 March 2011 - 09:37 PM

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

#14 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 19 March 2011 - 01:19 AM

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 ý.
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#15 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 19 March 2011 - 04:47 PM

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

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

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

#16 duyhung

duyhung

    biết vẽ rectang

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

Đã gửi 19 March 2011 - 04:48 PM

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.
  • 0
Song va chien dau!

#17 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 19 March 2011 - 05:14 PM

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

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.
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#18 funnyzui

funnyzui

    biết vẽ arc

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

Đã gửi 24 March 2011 - 10:28 PM

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