

Doan Nguyen Van
-
Số lượng nội dung
765 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
121
Bài đăng được đăng bởi Doan Nguyen Van
-
-
2 giờ trước, cadok đã nói:Do trong một số lisp của cad, khi ta Cộng, nếu là dâu , nó chỉ cộng phần nguyên, còn phần thập phân nó ko cộng. Ví dụ như lisp ATT+ này của diễn đàn CadViet. Mình có đính kèm lisp bên dưới b xem nhé
(defun c:ATT+ (/ ent tag lst tong ss) (setq ent (car (nentsel "Pick COLUM+:"))) (setq tag (cdr (assoc 2 (entget ent))) tong 0.0) (princ "\nQuet chon cac block") (setq ss (ssget (list (cons 0 "INSERT")))) (while (setq ent (ssname ss 0)) (setq ss (ssdel ent ss)) (if (setq lst (assoc tag (mapcar '(lambda (att) (cons (vla-get-tagstring att) (vla-get-textstring att))) (vlax-invoke (vlax-ename->vla-object ent) 'getattributes) ))) (setq tong (+ tong (distof (vl-string-subst "." "," (cdr lst) ))))) ) (alert (rtos tong 2 2)) )
Thay vì sửa file cad, mình sửa lệnh này cho bạn cộng đc cả phần dấu ","
-
2
-
-
-
-
1 giờ trước, cuongtk2 đã nói:Tên nút lưu ở XML/button.xml, danh mục lưu ở các Option 1-6.xml theo thứ tự nút trong file button. Anh đang định viết lại để mình có thể nhận dạng số lượng button từ file button.xml để cho người dùng có thể tăng hoặc giảm số lượng danh mục. Thư mục XML phải để cùng thư mục với file thi hành (exe)
Hay đấy a, lưu trữ lsp tìm lại dễ, không biết cái này có thêm được dòng Find (tìm tên trong danh sách danh mục không a nhỉ)
-
Vào lúc 24/11/2023 tại 18:21, cuongtk2 đã nói:Tôi viết tool nhỏ để các bạn có thể lưu trữ những đoạn code, cũng như những đoạn văn bản.
Các table bên trái sửa tên trong file button.xml.
Một chỉ mục có 3 thành phần: chỉ mục, nội dung, mô tả. Tên chỉ mục được sắp xếp ABC trên listbox danh mục.
Các sửa đổi chỉ mục cần Save. Nút Select để copy to Clipboard
Chúc mọi người vui vẻ.
Cái này dữ liệu lưu ở đâu anh nhỉ, nếu chuyển máy tính khác còn gắp đi được ^^
-
12 phút trước, tannguyen291 đã nói:vậy bác thử luận vài đoạn này nhé
2023-08-27 : "f892d7e223a14b07f2e8a54d1d4f70f71383622b"
2023-09-03 : "cf82738c28598d0d20c9bfa693c8e0754334c579"
2023-09-15 : "624285ec2c46ab0091a9304078cd003033b2e0d7"
Bạn gửi cả file lisp lên cho mọi người cùng trải nghiệm chứ
-
26 phút trước, tannguyen291 đã nói:Trừ khi bác dịch ngược vlx chứ em nghĩ rằng gần như k có khả năng ạ
Bạn chưa gặp thôi, trên cadviet này nhiều cao thủ lắm, mình đã từng dính rồi, có người còn chỉ ra cách đọc mã sinh ra (không cần dịch) :))
-
9 giờ trước, tannguyen291 đã nói:Bạn không hiểu ý bên trên của mình rồi password là một đoạn văn bản đã bị mã hoá trong đoạn văn bản này dịch ngược sẽ được ngày tháng năm. dùng để so sánh.
Nếu nhập đúng sẽ lưu đoạn văn bản đó ra registry. Mỗi lần load lisp đọc registry.
Nếu có registry dịch ngược registry nếu đúng là định dạng ngày tháng năm mình đặt ra, thì bắt đầu so sánh.
Nếu sai quay lại công cụ nhập password
Mình ví dụ về 1 hàm mã hoá ngày tháng năm mình đang dùng.
string_1 = 2023-08-26-b5435b1kjh46b51kh5431kl5b
đằng trước là ngày tháng năm đằng sau là md5.
b1: 2023-08-26 -> Abcdef gì gì đó
b2: xáo trộn trật tự của đoạn văn bản
Được string_2 = password
Nhập password thì sắp xếp lại trật tự ban đầu.
So sánh md5 của 2023-08-26 có bằng dãy số đằng sau không
Nếu không đúng thì bắt đầu so sánh thời gian.
Tỷ lệ người dùng sửa được cái text này đúng dạng thời gian mà mình đặt ra = 1/(8E48) không có khả năng đâu :))
Vs lsp, không gì là không thể :))
-
Đảo ngược LISP C2P
trong AutoLisp
7 phút trước, tannguyen291 đã nói:Em chỉnh lại thêm khoảng cách rồi ạ. :))
Bạn thêm tự động so sánh khoảng cách sẽ tiện hơn
Trong 3 điểm liên tiếp p1 p2 p3, so sánh khoảng cách p1 p2, p2 p3 same nhau và cùng bán kính là duyệt
-
Đảo ngược LISP C2P
trong AutoLisp
14 phút trước, tannguyen291 đã nói:Ui bác test cái hình gì nguy hiểm thế :))
10 phút trước, Duong Nhat Duy đã nói:Lisp ngon quá, nhưng mà theo bác Đoàn test thì đang hơi sai sai đó.
Kaka, test lỗi nó cùng nằm trên cung tròn ấy mà, thêm điều kiện so sánh chiều dài nữa là ngon
-
Đảo ngược LISP C2P
trong AutoLisp
1 giờ} trướ}c, tannguyen291 đã nói:Anh em còn nhớ cái lisp C2P chứ.
Nhiều lúc vẽ gặp rất nhiều đường line ngắn như vậy rất bực mình.
Lại ngồi kỳ cục nghiên cứu lisp.
Đợi bác nào đi qua viết thêm cái lisp đảo ngược E2P nữa thì ngon.
Em gửi lisp ạ:
mình mới test
-
2
-
-
Hỏi về hàm sắp xếp
trong AutoLisp
14 phút trước, ngokiet đã nói:Mình có viết thử cho vui
Test (vl-sort '("1" "10" "10C" "10A" "10B" "2" "20" "25" "3" "4") 'ssnt)
hay (vl-sort lst '(lambda(a b) (ssnt (cdr(assoc 1 a)) (cdr(assoc 1 b))))
(defun ssnt(s1 s2 / t1 t2) (if (/= s1 "") (if (/= s2 "") (if (< 47 (ascii s1) 58) (if (< 47 (ascii s2) 58) (if (eq (setq t1 (atoi s1)) (setq t2 (atoi s2))) (ssnt (vl-string-left-trim "0123456789" s1) (vl-string-left-trim "0123456789" s2)) (< t1 t2))) (if (eq (ascii s1) (ascii s2)) (ssnt (substr s1 2) (substr s2 2)) (or (< 47 (ascii s2) 58) (< (ascii s1) (ascii s2))))))))
Cái này gặp lỗi với các list dạng số
-
Hỏi về hàm sắp xếp
trong AutoLisp
15 giờ trước, Duong Nhat Duy đã nói:Mình có sưu tầm được 1 hàm sắp xếp list string của cụ Lee Mac khá hay, đại ý nó sort
(LM:alphanumsort (list "1" "10" "10A" "10B" "2" "20" "25" "3" "4"))
;thành (list "1" "2" " "3" "4" "10" "10A" "10B" "20" "25");; Alphanumerical Sort - Lee Mac ;; Sorts a list of strings containing a combination of alphabetical & numerical characters. (defun LM:alphanumsort ( lst ) (mapcar (function (lambda ( n ) (nth n lst))) (vl-sort-i (mapcar 'LM:splitstring lst) (function (lambda ( a b / x y ) (while (and (setq x (car a)) (setq y (car b)) (= x y) ) (setq a (cdr a) b (cdr b) ) ) (cond ( (null x) b) ( (null y) nil) ( (and (numberp x) (numberp y)) (< x y)) ( (numberp x)) ( (numberp y) nil) ( (< x y)) ) ) ) ) ) ) ;; Split String - Lee Mac ;; Splits a string into a list of text and numbers (defun LM:splitstring ( str ) ( (lambda ( l ) (read (strcat "(" (vl-list->string (apply 'append (mapcar (function (lambda ( a b c ) (cond ( (= 92 b) (list 32 34 92 b 34 32) ) ( (or (< 47 b 58) (and (= 45 b) (< 47 c 58) (not (< 47 a 58))) (and (= 46 b) (< 47 a 58) (< 47 c 58)) ) (list b) ) ( (list 32 34 b 34 32)) ) ) ) (cons nil l) l (append (cdr l) '(( ))) ) ) ) ")" ) ) ) (vl-string->list str) ) )
Nhưng mình muốn dùng nó ở dạng "này" (vì mình chả biết phải gọi nó là gì nữa :(( )
(setq lst (list (cons "1" ent1) (cons "10A" ent2) (cons "25" ent3) )) (vl-sort lst '(lambda (a b) (< (car a) (car b)))) ;Mình muốn từ cái hàm sắp xếp LeeMac, biến nó thành 1 quy luật (thay cho cái chỗ (< (car a) (car b)) để sort các list cho nó tổng quát hơn, ví dụ như cái list mình đang có ở trên, sort theo nguyên tố đứng đầu
Các bạn giúp mình với, mình cảm ơn !
Thay (mapcar 'LM:splitstring lst) thành (mapcar 'LM:splitstring (mapcar '(lambda (x) (car x)) lst)) nhé bác
-
1
-
-
23 phút trước, NamPhamts đã nói:Chào các anh, em mới tìm hiểu Cad 3D không biết trong các có lệnh nào hay lisp nào tạo ra các Surface giữa các mặt tiếp giáp hoặc giao nhau của các khối không ạ.
Giống như lệnh "interfere" tạo ra khối giao nhau giữa 2 khối.
Em cảm ơn ạ!
Dùng lệnh SECTION nhé bạn, pick 3 điểm
-
1 giờ} trướ}c, Nguyễn Hà Huy đã nói:bác hiểu sai vấn đề rồi, trong seting đó chỉ tắt cái cung đấy thôi có đổi độ thành số của DIMANGULAR đâu, lisp của bác @tannguyen291 đang giúp em chuyển dim DIMARC sang DIMANGULAR, nhưng do dim DIMARC em phải cắt nhỏ cung ra để dim mất thời gian lên đang muốn các bác giúp loại dim DIMANGULAR nó có hỗ trợ DIMCONTINUE khi dim nó thuận tiện hơn
Đọc mấy bài trên hiểu thấy vấn đề bạn Huy đặt ra là dim Angular nó có hỗ trợ DIMCONTINUE thôi
Đã viết lsp rồi sao không viết thành dim ARC Continue lun nhỉ ^^
(defun c:da2 (/ lacu ptt1 cen ptt2 ptt3 r ang lst ent) (setq ptt1 (getpoint "\nPick \U+0111i\U+1EC3m th\U+1EE9 nh\U+1EA5t: ") cen (osnap ptt1 "_CEN") ) (if (not cen) (alert "\nKh\U+00F4ng ph\U+1EA3i l\U+00E0 ARC!!!") (progn (setq ptt2 (getpoint cen "\nPick \U+0111i\U+1EC3m th\U+1EE9 hai: ") r (distance cen ptt1) ang (angle cen ptt1) ) (setq dis (distance (setq ptt3 (getpoint (setq ptm (ACET-GEOM-MIDPOINT ptt1 ptt2)) "Pick Diem Dat")) ptm ) ) (entmake (list (cons 0 "ARC") (cons 10 cen) (cons 40 r) (cons 50 ang) (cons 51 (+ ang (- (* 2 pi) 0.001))) ) ) (setq ent (entlast)) (setq lst (list ent ptt1)) (command "dimarc" lst "p" ptt1 ptt2 ptt3) (entdel ent) (Setq ptt1 ptt2) (while (setq ptt2 (getpoint cen "\nPick \U+0111i\U+1EC3m TIEP THEO: ")) (setq r (distance cen ptt1) ang (angle cen ptt1) ) (entmake (list (cons 0 "ARC") (cons 10 cen) (cons 40 r) (cons 50 ang) (cons 51 (+ ang (- (* 2 pi) 0.001))) ) ) (setq ent (entlast)) (setq lst (list ent ptt1)) (setq ptt3 (polar (setq ptm (ACET-GEOM-MIDPOINT ptt1 ptt2)) (angle cen ptm) dis)) (command "dimarc" lst "p" ptt1 ptt2 ptt3) (entdel ent) (Setq ptt1 ptt2) ) ) ) (princ) )
-
1
-
-
Nhờ Viết LISP
trong AutoLisp
-
56 phút trước, limfx đã nói:Mình đang tạo Lisp entmake Arc length Dimension, làm thế nào để xác định điểm p3, p4 từ điểm p1, p2 đã biết để cho kết quả Arc length Dimension như mong muốn? Thanks!
Lisp:
(entmakex (list '(0 . "ARC_DIMENSION") '(100 . "AcDbEntity")
(cons 100 "AcDbDimension")
(cons 10 p3);location of dimension line
(cons 11 p4);location of dimension text
(cons 70 37)
(cons 100 "AcDbArcDimension")
(cons 13 p1);start point
(cons 14 p2);end mpoint
(cons 15 c);center point
);list
);entmakeCái Point P1 P2 đi theo chiều cố định theo chiều ngược chiều kim đồng hồ bạn nhé
-
1
-
-
43 phút trước, HVQ01 đã nói:em gửi file lên nhờ các a xem giúp.
-
1
-
-
5 giờ trước, HVQ01 đã nói:@Lâm Vũ em thấy cái lisp này nó không ổn lắm bác ạ, đường tim không đúng, lisp đang nối từng điểm trên 2pline với nhau theo thứ tự điểm nhưng các điểm trên 2 đường pline nó không song song nhau nên nhiều đoạn nó nối chéo 1 phát, thành ra tim nó không đúng, bác có cách gì không ạ?
Gửi bản vẽ lên xem bạn
-
-
2 phút trước, ngokiet đã nói:Dễ mà. Kiểu như bác Doan Nguyan Van cũng được mà dùng entget entnext cũng được. Đây là các lệnh chuẩn lisp mà.
Còn gán lại bằng vla/vlax thì thoải mái.
Chuẩn đấy anh, đã lấy tiếng việt rồi thì gán lại bằng VLa vô tư
-
-
Vào lúc 6/8/2022 tại 11:35, trungkien8338 đã nói:đúng rồi bạn, mình đọc giá trị của attribute bằng autolisp. vậy là không có lisp nào khắc phục được lỗi này sao bạn.
Gợi ý cho bạn cách lấy thông tin ATT không bị lỗi Unicode
(Entget(vlax-vla-object->ename(car (vlax-invoke (vlax-ename->vla-object (Car(entsel))) 'getattributes))))
-
1
-
-
6 phút trước, tannguyen291 đã nói:Em nghĩ sẽ có hàm dạng như vậy sử dụng thuật toán khác để phá thì cũng ko ổn.
Bác dùng (setq function nil) rồi đến cuối thì (if (and function1 function2 function3 ....) (Do not load lisp) (load Lisp)) xem sao.
Bạn thử gửi phương án của bạn lên xem :D
Nhờ sửa lisp tạo block nhanh
trong AutoLisp
Đã đăng · Trả lời báo cáo
Chủ topic đang tính đến khi copy block qua lại giữa các bản vẽ, sẽ bị trùng tên và không copy được
Cách giải quyết đơn giản là cho thêm 1 chuỗi ngày tháng năm giờ phút giây phía sau đảm bảo sẽ không bị trùng nữa