Nguyen Hoang Thuy Linh 0 Báo cáo bài đăng Đã đăng Tháng 12 21, 2019 Số là công việc của em suốt ngày là đo đường kính hình tròn rồi tra bảng gán cho nó một thông số. Tra bảng riết rồi chán quá mấy bác ơi. Bác nào giúp em viết một Lisp mà thay vì đo đường kính ra kích thước thì ra luôn thông số trong bảng dùm em với được không ạ! em có đính kèm file. cám ơn các bác nhiều ạ. chúc các bác sức khoẻ và vui vẻ! MAT BICH.dwg 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
huunhantvxdts 195 Báo cáo bài đăng Đã đăng Tháng 12 21, 2019 34 phút trước, Nguyen Hoang Thuy Linh đã nói: Số là công việc của em suốt ngày là đo đường kính hình tròn rồi tra bảng gán cho nó một thông số. Tra bảng riết rồi chán quá mấy bác ơi. Bác nào giúp em viết một Lisp mà thay vì đo đường kính ra kích thước thì ra luôn thông số trong bảng dùm em với được không ạ! em có đính kèm file. cám ơn các bác nhiều ạ. chúc các bác sức khoẻ và vui vẻ! MAT BICH.dwg Đã là viết lisp thì quét 1 cái nó ra luôn chứ mắc gì phải đo từng cái nữ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
sgcq 726 Báo cáo bài đăng Đã đăng Tháng 12 21, 2019 ĐỀ BÀI NHÌN RẤT ĐƠN GIẢ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
Doan Van Ha 3.201 Báo cáo bài đăng Đã đăng Tháng 12 21, 2019 1 giờ trước, sgcq đã nói: ĐỀ BÀI NHÌN RẤT ĐƠN GIẢN Câu hỏi của chủ topic nghiêm túc, rõ ràng và thực tế, sao lại relax được? 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
huunhantvxdts 195 Báo cáo bài đăng Đã đăng Tháng 12 21, 2019 2 giờ trước, Doan Van Ha đã nói: Câu hỏi của chủ topic nghiêm túc, rõ ràng và thực tế, sao lại relax được? Ý e là đề xuất theo hướng đó nếu do với số lượng nhiều. chứ file mẫu chỉ có 1 đối tượng nên không biết ý của chủ thớt 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
Doan Van Ha 3.201 Báo cáo bài đăng Đã đăng Tháng 12 21, 2019 1 giờ trước, huunhantvxdts đã nói: Ý e là đề xuất theo hướng đó nếu do với số lượng nhiều. chứ file mẫu chỉ có 1 đối tượng nên không biết ý của chủ thớt Ủa, tôi bàn về ý của @sgcq chứ đâu bàn về ý của bạn. Ý của bạn rất tốt 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
Nguyen Hoang Thuy Linh 0 Báo cáo bài đăng Đã đăng Tháng 12 23, 2019 Sao chưa ai giúp em hết vậy nè!!! hóng quá, mấy bác rảnh giúp em với nha! 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
duy782006 1.551 Báo cáo bài đăng Đã đăng Tháng 12 23, 2019 (defun c:ddk ( / ndc dtdtt) (command "DIMDIAMETER") (while (< 0 (getvar "CMDACTIVE")) (command pause) ) (setq ndc (cdr (assoc 1 (entget (entlast))))) (cond ((= ndc "") (setq ndc (cdr (assoc 42 (entget (entlast)))))) ) (cond ((= ndc 75) (setq ndc "5K-10A")) ) (cond ((= ndc 80) (setq ndc "5K-15A")) ) (cond ((= ndc 85) (setq ndc "5K-20A")) ) (cond ((= ndc 95) (setq ndc "5K-25A")) ) (cond ((= ndc 115) (setq ndc "5K-32A")) ) (cond ((= ndc 120) (setq ndc "5K-40A")) ) (setq dtdtt (subst (cons 1 ndc) (assoc 1 (entget (entlast))) (entget (entlast)))) (entmod dtdtt) (princ) ) Viết thử mà hông biết sao nó lại chạy chập chờn lúc được lúc không. Mới nhập từ 75 đến 120 thôi. Ỗn định thì bạn tự nhập tiếp. 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
ngokiet 169 Báo cáo bài đăng Đã đăng Tháng 12 23, 2019 23 phút trước, duy782006 đã nói: ddk.lsp [✎] (defun c:ddk ( / ndc dtdtt) (command "DIMDIAMETER") (while (< 0 (getvar "CMDACTIVE")) (command pause) ) (setq ndc (cdr (assoc 1 (entget (entlast))))) (cond ((= ndc "") (setq ndc (cdr (assoc 42 (entget (entlast)))))) ) (cond ((= ndc 75) (setq ndc "5K-10A")) ) (cond ((= ndc 80) (setq ndc "5K-15A")) ) (cond ((= ndc 85) (setq ndc "5K-20A")) ) (cond ((= ndc 95) (setq ndc "5K-25A")) ) (cond ((= ndc 115) (setq ndc "5K-32A")) ) (cond ((= ndc 120) (setq ndc "5K-40A")) ) (setq dtdtt (subst (cons 1 ndc) (assoc 1 (entget (entlast))) (entget (entlast)))) (entmod dtdtt) (princ) ) Viết thử mà hông biết sao nó lại chạy chập chờn lúc được lúc không. Mới nhập từ 75 đến 120 thôi. Ỗn định thì bạn tự nhập tiếp. Lúc được lúc không là do dim có giá trị gần đúng. Thay = bằng equal là được. Lisp bạn viết hơi rối. 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
duy782006 1.551 Báo cáo bài đăng Đã đăng Tháng 12 23, 2019 Thay = thành equal vẫn cứ chập chờn. Các đường tròn được vẽ đúng đường kính. cùng 1 đường tròn lúc được lúc khô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
NTHAHT 84 Báo cáo bài đăng Đã đăng Tháng 12 23, 2019 33 phút trước, duy782006 đã nói: Thay = thành equal vẫn cứ chập chờn. Các đường tròn được vẽ đúng đường kính. cùng 1 đường tròn lúc được lúc không. Thử: (setq ndc (fix (cdr (assoc 42 (entget (entlast)))))) 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
duy782006 1.551 Báo cáo bài đăng Đã đăng Tháng 12 23, 2019 (fix 120.2) thì nó ra thành 120 sai rồi bạn. 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
NTHAHT 84 Báo cáo bài đăng Đã đăng Tháng 12 23, 2019 25 phút trước, duy782006 đã nói: (fix 120.2) thì nó ra thành 120 sai rồi bạn. - Dữ liệu bạn đầu toàn số nguyên mà! Thêm chút nữa: (or (eq (fix ndc) 120) (eq (itoa (rtos ndc 2 0)) 120)) - Còn muốn chấp nhận sai số trong 1 khoảng nào đó (vd: 0.999) thì theo như @ngokiet: (equal ndc 120 0.999). 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
ngokiet 169 Báo cáo bài đăng Đã đăng Tháng 12 23, 2019 2 giờ trước, NTHAHT đã nói: - Dữ liệu bạn đầu toàn số nguyên mà! Thêm chút nữa: (or (eq (fix ndc) 120) (eq (itoa (rtos ndc 2 0)) 120)) - Còn muốn chấp nhận sai số trong 1 khoảng nào đó (vd: 0.999) thì theo như @ngokiet: (equal ndc 120 0.999). Hic mình nhắc đổi thành equal thì phải thêm sài số vào. Mình viết sơ lại (defun c:ddk ( / ndc ent) (setq ent (entlast)) (command "DIMDIAMETER") (while (< 0 (getvar "CMDACTIVE")) (command pause)) (if (/= ent (setq ent (entlast))) (if (setq ndc (assoc (fix (+ 0.5 (cdr(assoc 42 (entget ent))))) '((75 . "5K-10A") (80 . "5K-15A") (85 . "5K-20A") (95 . "5K-25A") (115 . "5K-32A") (120 . "5K-40A") (130 . "5K-50A") (155 . "5K-65A") (180 . "5K-80A") (190 . "5K-900A") (200 . "5K-100A") (235 . "5K-125A") (265 . "5K-150A") (300 . "5K-175A") (320 . "5K-200A") (345 . "5K-225A") (385 . "5K-250A") (430 . "5K-300A") (480 . "5K-350A")))) (entmod (list (cons -1 ent) (cons 1 (cdr ndc)))))) (princ)) 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
Nguyen Hoang Thuy Linh 0 Báo cáo bài đăng Đã đăng Tháng 12 24, 2019 13 giờ trước, duy782006 đã nói: (defun c:ddk ( / ndc dtdtt) (command "DIMDIAMETER") (while (< 0 (getvar "CMDACTIVE")) (command pause) ) (setq ndc (cdr (assoc 1 (entget (entlast))))) (cond ((= ndc "") (setq ndc (cdr (assoc 42 (entget (entlast)))))) ) (cond ((= ndc 75) (setq ndc "5K-10A")) ) (cond ((= ndc 80) (setq ndc "5K-15A")) ) (cond ((= ndc 85) (setq ndc "5K-20A")) ) (cond ((= ndc 95) (setq ndc "5K-25A")) ) (cond ((= ndc 115) (setq ndc "5K-32A")) ) (cond ((= ndc 120) (setq ndc "5K-40A")) ) (setq dtdtt (subst (cons 1 ndc) (assoc 1 (entget (entlast))) (entget (entlast)))) (entmod dtdtt) (princ) ) Viết thử mà hông biết sao nó lại chạy chập chờn lúc được lúc không. Mới nhập từ 75 đến 120 thôi. Ỗn định thì bạn tự nhập tiếp. Cám ơn bác nhé! của bác em thử đúng là chập chờn thật, một hai lần đầu ra bình thường, mình đo qua lần thứ 3 thì không ra nữa, hii 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
Nguyen Hoang Thuy Linh 0 Báo cáo bài đăng Đã đăng Tháng 12 24, 2019 10 giờ trước, ngokiet đã nói: Hic mình nhắc đổi thành equal thì phải thêm sài số vào. Mình viết sơ lại (defun c:ddk ( / ndc ent) (setq ent (entlast)) (command "DIMDIAMETER") (while (< 0 (getvar "CMDACTIVE")) (command pause)) (if (/= ent (setq ent (entlast))) (if (setq ndc (assoc (fix (+ 0.5 (cdr(assoc 42 (entget ent))))) '((75 . "5K-10A") (80 . "5K-15A") (85 . "5K-20A") (95 . "5K-25A") (115 . "5K-32A") (120 . "5K-40A") (130 . "5K-50A") (155 . "5K-65A") (180 . "5K-80A") (190 . "5K-900A") (200 . "5K-100A") (235 . "5K-125A") (265 . "5K-150A") (300 . "5K-175A") (320 . "5K-200A") (345 . "5K-225A") (385 . "5K-250A") (430 . "5K-300A") (480 . "5K-350A")))) (entmod (list (cons -1 ent) (cons 1 (cdr ndc)))))) (princ)) Bác ngokiet đúng ý em quá rồi, em thử good lắm a, bác fix +0.5 đúng là cái em mắc phải mà em không nghỉ tới, vì file của em Import từ cái file đuôi .igs nên thỉnh thoảng nó củng ra số gần đúng. nếu fix + - 0.5 thì ok hơn, bác chỉ e sửa thêm -0.5 nửa 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
Nguyen Hoang Thuy Linh 0 Báo cáo bài đăng Đã đăng Tháng 12 24, 2019 cám ơn các bác trong diển đàn đã quan tâm tới câu hỏi của em nhé! chúc các bác nô en vui vẻ!!! 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
NTHAHT 84 Báo cáo bài đăng Đã đăng Tháng 12 24, 2019 Mình sửa lại của @ngokiet: + Số 0.999 bạn có thể thay đổi cho phù hợp, ý nghĩa: Ví dụ đối với đường kính D120 thì giá trị nằm trong khoảng: 191.001 đến 120.999 được chấp nhận. (defun c:ddk (/ ent lst ndc) (setq ent (entlast) lst '((75 . "5K-10A") (80 . "5K-15A") (85 . "5K-20A") (95 . "5K-25A") (115 . "5K-32A") (120 . "5K-40A") (130 . "5K-50A") (155 . "5K-65A") (180 . "5K-80A") (190 . "5K-900A") (200 . "5K-100A") (235 . "5K-125A") (265 . "5K-150A") (300 . "5K-175A") (320 . "5K-200A") (345 . "5K-225A") (385 . "5K-250A") (430 . "5K-300A") (480 . "5K-350A"))) (command "DIMDIAMETER") (while (< 0 (getvar "CMDACTIVE")) (command pause)) (if (/= ent (setq ent (entlast))) (if (setq ndc (car (vl-remove-if-not '(lambda (x) (equal (car x) (cdr (assoc 42 (entget ent))) 0.999)) lst))) (entmod (list (cons -1 ent) (cons 1 (cdr ndc)))))) (princ)) 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
Nguyen Hoang Thuy Linh 0 Báo cáo bài đăng Đã đăng Tháng 12 24, 2019 1 giờ trước, NTHAHT đã nói: Mình sửa lại của @ngokiet: + Số 0.999 bạn có thể thay đổi cho phù hợp, ý nghĩa: Ví dụ đối với đường kính D120 thì giá trị nằm trong khoảng: 191.001 đến 120.999 được chấp nhận. (defun c:ddk (/ ent lst ndc) (setq ent (entlast) lst '((75 . "5K-10A") (80 . "5K-15A") (85 . "5K-20A") (95 . "5K-25A") (115 . "5K-32A") (120 . "5K-40A") (130 . "5K-50A") (155 . "5K-65A") (180 . "5K-80A") (190 . "5K-900A") (200 . "5K-100A") (235 . "5K-125A") (265 . "5K-150A") (300 . "5K-175A") (320 . "5K-200A") (345 . "5K-225A") (385 . "5K-250A") (430 . "5K-300A") (480 . "5K-350A"))) (command "DIMDIAMETER") (while (< 0 (getvar "CMDACTIVE")) (command pause)) (if (/= ent (setq ent (entlast))) (if (setq ndc (car (vl-remove-if-not '(lambda (x) (equal (car x) (cdr (assoc 42 (entget ent))) 0.999)) lst))) (entmod (list (cons -1 ent) (cons 1 (cdr ndc)))))) (princ)) Cám ơn bác nhiều nhé! bác có thể gán cho em nó dùm em một layer tên KVN_text /cyan/continous/nét 0.25 giúp em với nhé! àh, sau khi kết thúc lệnh thì nó trở về layer 0 mặc đị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
ngokiet 169 Báo cáo bài đăng Đã đăng Tháng 12 24, 2019 6 giờ trước, Nguyen Hoang Thuy Linh đã nói: Bác ngokiet đúng ý em quá rồi, em thử good lắm a, bác fix +0.5 đúng là cái em mắc phải mà em không nghỉ tới, vì file của em Import từ cái file đuôi .igs nên thỉnh thoảng nó củng ra số gần đúng. nếu fix + - 0.5 thì ok hơn, bác chỉ e sửa thêm -0.5 nửa nhé!!! Mình viết fix +0.5 là làm tròn số. ví dụ như 74.5 -> 75.49 thì nó thành 75. Chứ fix ko thì 74.999 nó chỉ ra 74 thôi. Nếu sai số nhiều hơn thì dùng cái này (defun c:ddk ( / ndc ent) (setq ent (entlast)) (command "DIMDIAMETER") (while (< 0 (getvar "CMDACTIVE")) (command pause)) (if (/= ent (setq ent (entlast))) (Progn (setq ndc (cdr(assoc 42 (entget ent)))) (if (vl-some '(lambda(x) (if (equal ndc (car x) 0.999) (setq ndc (cdr x)))) '((75 . "5K-10A") (80 . "5K-15A") (85 . "5K-20A") (95 . "5K-25A") (115 . "5K-32A") (120 . "5K-40A") (130 . "5K-50A") (155 . "5K-65A") (180 . "5K-80A") (190 . "5K-900A") (200 . "5K-100A") (235 . "5K-125A") (265 . "5K-150A") (300 . "5K-175A") (320 . "5K-200A") (345 . "5K-225A") (385 . "5K-250A") (430 . "5K-300A") (480 . "5K-350A"))) (entmod (list (cons -1 ent) (cons 1 ndc)))))) (princ)) @NTHAHT Dùng vl-remove thì nó so sánh toàn bộ. Mình dùng vl-some thì khi có kết quả thì nó ngừng. Còn bác muốn tự động vào layer thì cứ tạo layer rồi sử dụng dimlayer là được. Không cần chèn vào lisp cho rối. 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