Đến nội dung


Hình ảnh

so sánh chỉ ra sai lệch về Dimension của 1 đối tượng trong bản vẽ


  • Please log in to reply
13 replies to this topic

#1 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 06 June 2007 - 10:14 PM

Xin diễn đàn chỉ dẫn giúp : có thủ thuật hoặc tiện ích nào so sánh và chỉ ra các sai lệch hoặc thiếu sót về dimension của 1 đối tượng trong bản vẽ, ví dụ: trong bản vẽ mặt bằng có chi tiết một móng máy với các kích thước a, b, c . . . bên bản vẽ kết cấu thì do sơ xuất nên không thể hiện đủ các đoạn kích thước này hoặc có đủ nhưng có sự sai lệch do chủ quan (a <> a')
  • 0

#2 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 08 June 2007 - 07:57 PM

Xin diễn đàn chỉ dẫn giúp : có thủ thuật hoặc tiện ích nào so sánh và chỉ ra các sai lệch hoặc thiếu sót về dimension của 1 đối tượng trong bản vẽ, ví dụ: trong bản vẽ mặt bằng có chi tiết một móng máy với các kích thước a, b, c . . . bên bản vẽ kết cấu thì do sơ xuất nên không thể hiện đủ các đoạn kích thước này hoặc có đủ nhưng có sự sai lệch do chủ quan (a <> a')


Các cao thủ trong diễn đàn ơi, Admin ơi cứu với ! :s_dead:
  • 0

#3 bemove

bemove

    biết lệnh divide

  • Vip
  • PipPipPipPipPipPip
  • 446 Bài viết
Điểm đánh giá: 1308 (rất tốt)

Đã gửi 08 June 2007 - 10:46 PM

Không hiểu ý bạn là như thế nào cả, bạn nói cụ tỉ hơn đi
  • 0

#4 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 09 June 2007 - 07:04 AM

Không hiểu ý bạn là như thế nào cả, bạn nói cụ tỉ hơn đi


bản vẽ (1) có đối tượng A là đa giác khép kín gồm các kích thước a,b,c,d . . .
bản vẽ (2) cũng đối tượng A này nhưng kích thước có sai lệch (có thể do truy bắt điểm chưa đúng, sử dụng scale factor không phải là 1, hoặc thiếu thể hiện dimension của một đoạn. . .)
có cách nào tìm ra các dimension sai lệch hoặc thiếu sót đó? cảm ơn các anh
  • 0

#5 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 11 June 2007 - 07:36 PM

bản vẽ (1) có đối tượng A là đa giác khép kín gồm các kích thước a,b,c,d . . .
bản vẽ (2) cũng đối tượng A này nhưng kích thước có sai lệch (có thể do truy bắt điểm chưa đúng, sử dụng scale factor không phải là 1, hoặc thiếu thể hiện dimension của một đoạn. . .)
có cách nào tìm ra các dimension sai lệch hoặc thiếu sót đó? cảm ơn các anh


Anh Hoành có thể giúp tôi đoạn code này không? rất mong hồi âm của các anh. Thanks
  • 0

#6 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 11 June 2007 - 09:35 PM

Thực sự là tôi chưa nghĩ ra cách làm bằng tay để kiểm tra các con số này. Vì vậy, không thể viết lisp được.

Tôi chỉ có thể làm được 1 chương trình như sau: Select một tập hợp các đường dim, rồi so sánh với một tập hợp đường dim khác, xem có sai lệnh trong các giá trị (của phần text) đường dim không? Chương trình chỉ so sánh được khi 2 tập hợp có số lượng đường dim bằng nhau. Ví dụ: tập đầu là đường dim có giá trị là [A, B, C, D] tập thứ 2 có giá trị là [A', B', C', D'] thì kiểm tra xem lần lượt. Ví dụ:
(A, B, C, D) = (A', B', C', D')
(A, B, C, D) = (B', A', C', D')
(A, B, C, D) = (B', C', A', D')
(A, B, C, D) = (C', B', A', D')
......

Có nghĩa là chỉ có thể kiểm tra được 2 tập hợp đường đim có tương đương về giá trị hay không (không quan trọng thứ tự). Điều này mới chỉ là điều kiện cần chứ không phải điều kiện đủ để so sánh. Không biết ý anh Bảo thế nào.
  • 0

#7 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 12 June 2007 - 02:26 PM

Thực sự là tôi chưa nghĩ ra cách làm bằng tay để kiểm tra các con số này. Vì vậy, không thể viết lisp được.

Tôi chỉ có thể làm được 1 chương trình như sau: Select một tập hợp các đường dim, rồi so sánh với một tập hợp đường dim khác, xem có sai lệnh trong các giá trị (của phần text) đường dim không? Chương trình chỉ so sánh được khi 2 tập hợp có số lượng đường dim bằng nhau. Ví dụ: tập đầu là đường dim có giá trị là [A, B, C, D] tập thứ 2 có giá trị là [A', B', C', D'] thì kiểm tra xem lần lượt. Ví dụ:
(A, B, C, D) = (A', B', C', D')
(A, B, C, D) = (B', A', C', D')
(A, B, C, D) = (B', C', A', D')
(A, B, C, D) = (C', B', A', D')
......

Có nghĩa là chỉ có thể kiểm tra được 2 tập hợp đường đim có tương đương về giá trị hay không (không quan trọng thứ tự). Điều này mới chỉ là điều kiện cần chứ không phải điều kiện đủ để so sánh. Không biết ý anh Bảo thế nào.



cảm ơn anh Hoành đã nhiệt tình giúp đỡ, theo thiển ý của tôi, hy vọng anh hướng dẫn thêm: có giải thuật nào để có thể đếm các segment trong 1 đối tượng đa giác => trích lấy tọa độ các đỉnh => thể hiện diện tích & chu vi đối tượng vừa chọn => tính khoảng cách từng segment theo tọa độ vừa trích => so sánh với giá trị của từng dim => lưu vào danh sách, cuối cùng so sánh giá trị 2 tập hợp đường dim => xuất kết quả, tôi không rành về lập trình, nếu có diễn đạt không rõ ràng, mong anh Hoành thông cảm.
  • 0

#8 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 12 June 2007 - 03:19 PM

Vbao có thể cho file mẫu không?

file chứa đa giác và đường đim, để tôi có hình dung cụ thể.
  • 0

#9 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 12 June 2007 - 08:36 PM

Vbao có thể cho file mẫu không?

file chứa đa giác và đường đim, để tôi có hình dung cụ thể.


file upload, Thanks
http://www.cadviet.com/upfiles/BT_MONGMAY_2up.zip
http://www.cadviet.com/upfiles/mongmayup.zip
  • 0

#10 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 12 June 2007 - 09:38 PM

Bây giờ thì tôi đã hiểu bài toán của anh Bảo đưa ra, nhưng bài toán này quá khó!

Xin nêu lại bài toán của anh Bảo:
Hình đã gửi
(Hình 1)

Hình đã gửi
(Hình 2)

Có hai hình vẽ như trên (2 file DWG). Hình 1 là hình cần kiểm tra, hình 2 là hình gốc. Câu hỏi đặt ra là: kiểm tra giá trị dim trên hình 1 xem có khớp với kích thước của hình 2 không?

Theo cách nghĩ của tôi, để kiểm tra được ta phải:
1. Đánh kích thước của hình gốc (hình 2), nhưng phải tương ứng với các đường kích thước đã đánh tại hình cần kiểm tra (hình 1).
2. So sánh đường kích thước vừa đánh từ hình gốc với đường kích thước của hình cần kiểm tra.

Phần 2 dễ, nhưng phần 1 là không thể tự động làm được.

Nếu quy bài toán về việc so sánh 2 pline (là hình bao của móng) thì gặp trường hợp dim bị edit (hoặc thay dimlfac) sẽ thất bại, đường bao mặc dù giống nhau, nhưng giá trị dim khác nhau và ngược lại.

Tóm lại, với bài toán tổng quát như vậy thì tôi không có giải pháp gì để giải quyết được.
Rất xin lỗi anh Bảo.
  • 0

#11 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 13 June 2007 - 09:07 PM

Bây giờ thì tôi đã hiểu bài toán của anh Bảo đưa ra, nhưng bài toán này quá khó!

Xin nêu lại bài toán của anh Bảo:
Hình đã gửi
(Hình 1)

Hình đã gửi
(Hình 2)

Có hai hình vẽ như trên (2 file DWG). Hình 1 là hình cần kiểm tra, hình 2 là hình gốc. Câu hỏi đặt ra là: kiểm tra giá trị dim trên hình 1 xem có khớp với kích thước của hình 2 không?

Theo cách nghĩ của tôi, để kiểm tra được ta phải:
1. Đánh kích thước của hình gốc (hình 2), nhưng phải tương ứng với các đường kích thước đã đánh tại hình cần kiểm tra (hình 1).
2. So sánh đường kích thước vừa đánh từ hình gốc với đường kích thước của hình cần kiểm tra.

Phần 2 dễ, nhưng phần 1 là không thể tự động làm được.

Nếu quy bài toán về việc so sánh 2 pline (là hình bao của móng) thì gặp trường hợp dim bị edit (hoặc thay dimlfac) sẽ thất bại, đường bao mặc dù giống nhau, nhưng giá trị dim khác nhau và ngược lại.

Tóm lại, với bài toán tổng quát như vậy thì tôi không có giải pháp gì để giải quyết được.
Rất xin lỗi anh Bảo.


Cảm ơn anh Hoành đã hướng dẫn và giải thích.
  • 0

#12 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 17 June 2007 - 09:25 AM

Cảm ơn anh Hoành đã hướng dẫn và giải thích.


Anh Hoành cho tôi xin tiện ích so sánh 2 tập hợp dim, làm bằng tay . . .mệt quá !!
  • 0

#13 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 17 June 2007 - 11:03 AM

Anh Hoành cho tôi xin tiện ích so sánh 2 tập hợp dim, làm bằng tay . . .mệt quá !!


Lisp dưới đây so sánh giá trị của 2 tập dim, lọc ra những đường dim bị sai lệch. Chương trình không quan tâm đến kích thước thực, đến dimlfac, đến dim có bị edit hay không... Nó chỉ quan tâm đến giá trị của text mà thôi.
Tên lệnh là DIMCMP


(defun c:dimcmp ()
(defun ss2ent (ss / sodt index lstent)
(setq
sodt (cond
(ss (sslength ss))
(t 0)
)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)
(defun Rig (st /)
(setq l (strlen st)
i l
)
(while (and
(> i 1)
(/= (substr st (1- i) 1) ";")
)
(setq i (1- i))
)
(substr st i)
)
(defun Giatri (ent / tt ss gt)
(setq tt (entget ent))
(entmake tt)
(command ".explode" (entlast))
(setq ss (ssget "P")
gt (Rig (cdr (assoc 1 (entget (entlast)))))
)
(command ".erase" ss "")
(cons gt ent)
)

(defun sosanhlist (lst1 lst2 / pp giong lst1sai)
(foreach pp lst1
(setq
gt (car pp)
giong (assoc gt lst2)
)
(if giong
(setq lst2 (vl-remove giong lst2))
(setq lst1sai (append lst1sai (list pp)))
)
)
(append lst1sai lst2)
)
(if (/= (cdr (assoc 70 (tblsearch "layer" (getvar "clayer"))))
0
)
(princ
"\nLayer hien hanh dang bi bi khoa, hoac bi bi an!\nHay mo khoa hoac bat layer len!"
)
(progn
(princ "\nTap dim 1: ")
(setq ssd1 (ssget '((0 . "DIMENSION"))))
(princ "\nTap dim 2: ")
(setq ssd2 (ssget '((0 . "DIMENSION"))))
(setq lstd1 (ss2ent ssd1)
lstd2 (ss2ent ssd2)
gtd1 (mapcar 'Giatri lstd1)
gtd2 (mapcar 'Giatri lstd2)
sailech (sosanhlist gtd1 gtd2)
sssai (ssadd)
)
(if (> (length sailech) 0)
(progn
(foreach pp sailech
(setq sssai (ssadd (cdr pp) sssai))
)
(princ (strcat "\nCo "
(itoa (length sailech))
" duong dim bi sai lech!"
)
)
(sssetfirst sssai sssai)
)
(princ "\nHai tap dim vua roi khong bi sai lech!")
)
)
)
(princ)
)
(vl-load-com)

  • 0

#14 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 17 June 2007 - 02:20 PM

Lisp dưới đây so sánh giá trị của 2 tập dim, lọc ra những đường dim bị sai lệch. Chương trình không quan tâm đến kích thước thực, đến dimlfac, đến dim có bị edit hay không... Nó chỉ quan tâm đến giá trị của text mà thôi.
Tên lệnh là DIMCMP


(defun c:dimcmp ()
(defun ss2ent (ss / sodt index lstent)
(setq
sodt (cond
(ss (sslength ss))
(t 0)
)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)
(defun Rig (st /)
(setq l (strlen st)
i l
)
(while (and
(> i 1)
(/= (substr st (1- i) 1) ";")
)
(setq i (1- i))
)
(substr st i)
)
(defun Giatri (ent / tt ss gt)
(setq tt (entget ent))
(entmake tt)
(command ".explode" (entlast))
(setq ss (ssget "P")
gt (Rig (cdr (assoc 1 (entget (entlast)))))
)
(command ".erase" ss "")
(cons gt ent)
)

(defun sosanhlist (lst1 lst2 / pp giong lst1sai)
(foreach pp lst1
(setq
gt (car pp)
giong (assoc gt lst2)
)
(if giong
(setq lst2 (vl-remove giong lst2))
(setq lst1sai (append lst1sai (list pp)))
)
)
(append lst1sai lst2)
)
(if (/= (cdr (assoc 70 (tblsearch "layer" (getvar "clayer"))))
0
)
(princ
"\nLayer hien hanh dang bi bi khoa, hoac bi bi an!\nHay mo khoa hoac bat layer len!"
)
(progn
(princ "\nTap dim 1: ")
(setq ssd1 (ssget '((0 . "DIMENSION"))))
(princ "\nTap dim 2: ")
(setq ssd2 (ssget '((0 . "DIMENSION"))))
(setq lstd1 (ss2ent ssd1)
lstd2 (ss2ent ssd2)
gtd1 (mapcar 'Giatri lstd1)
gtd2 (mapcar 'Giatri lstd2)
sailech (sosanhlist gtd1 gtd2)
sssai (ssadd)
)
(if (> (length sailech) 0)
(progn
(foreach pp sailech
(setq sssai (ssadd (cdr pp) sssai))
)
(princ (strcat "\nCo "
(itoa (length sailech))
" duong dim bi sai lech!"
)
)
(sssetfirst sssai sssai)
)
(princ "\nHai tap dim vua roi khong bi sai lech!")
)
)
)
(princ)
)
(vl-load-com)


Cảm ơn anh Hoành đã giúp, sự nhiệt tình hỗ trợ của anh cho các thành viên trong diễn đàn thật đáng quí, chúc anh và gia quyến có 1 ngày nghỉ cuối tuần vui vẻ hạnh phúc, một lần nữa chân thành cảm ơn anh.
  • 0