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

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

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

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')

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

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

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

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

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

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â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:

Sosanhkt.gif

(Hình 1)

 

Sosanhkt1.gif

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

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â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:

Sosanhkt.gif

(Hình 1)

 

Sosanhkt1.gif

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

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ả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á !!

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

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

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

×