tannguyen291
-
Số lượng nội dung
446 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
42
Bài đăng được đăng bởi tannguyen291
-
-
Nếu bạn cần 1 lisp chuyên về quy hoạch, rải tem sử dụng đất, tem chia lô thì xem đoạn clip ngắn của mình nhé
Liên hệ Tân: 0395.218.999
nguyennhattanpt@gmail.com
tks.
- 1
-
-
nếu đường thẳng của bạn chỉ nằm ngang thì dùng lisp này của mình nhé.
quét chọn nhiều đối tượng trước rồi chọn mẫu sau.
(defun c:test (/ ss ent block scl drpt) (setq ss (mapcar '(lambda (x) (cadr (assoc 10 (entget x)))) (acet-ss-to-list (ssget '((0 . "INSERT")))) ) ent (entget (car (entsel "\nSelect model:"))) block (cdr (assoc 2 ent)) drpt (cddr (assoc 10 ent)) scl (abs (cdr (assoc 41 ent))) ) (foreach item ss (entmake (list (cons 0 "INSERT") (cons 100 "AcDbEntity") (cons 100 "AcDbBlockReference") (cons 2 block) (append (list 10 item) drpt) (cons 41 scl) (cons 42 scl) (cons 43 scl) )) ) (princ) )
- 2
-
-
Bạn viết nội dung quá chung chung nên chắc là k ai giúp được bạn rồi. :)
-
Mình thích dùng entmake hơn bạn tạo sẵn 1 lần layer rồi entget để lấy thông số. lưu thành lisp để entmake đối tượng đó:
ví dụ như thế này:
(entmake '( (0 . "DIMSTYLE") (100 . "AcDbSymbolTableRecord") (100 . "AcDbDimStyleTableRecord") (2 . "DIM CHIALO LISP") (70 . 0) (3 . "") (4 . "") (5 . "Dot") (6 . "") (7 . "") (40 . 1.0) (41 . 0.1) (42 . 0.2) (43 . 0.3) (44 . 0.2) (45 . 0.0) (46 . 0.0) (47 . 0.0) (48 . 0.0) (140 . 1.15) (141 . 0.3) (142 . 0.0) (143 . 25.4) (144 . 1.0) (145 . 0.0) (146 . 1.0) (147 . 0.3) (71 . 0) (72 . 0) (73 . 0) (74 . 0) (75 . 1) (76 . 1) (77 . 1) (78 . 0) (170 . 0) (171 . 2) (172 . 0) (173 . 0) (174 . 0) (175 . 0) (176 . 160) (177 . 160) (178 . 252) (270 . 2) (271 . 2) (272 . 2) (273 . 2) (274 . 2) (275 . 0) (280 . 0) (281 . 1) (282 . 1) (283 . 1) (284 . 0) (285 . 0) (286 . 0) (287 . 4) (288 . 0) ) )
-
3 giờ trước, Doan Van Ha đã nói:Bỏ cái bộ ok_cancel của bạn đi thì enter tốt ngay. VD:
em làm theo bác nhưng dcl bị lỗi bác ạ.
Nhưng em tìm đc cái này trên afralisp.net. H thì ngon rồi. Tks bác nhé.
allow_accept = true;
- 1
-
Không bác. í em là khi đang sửa số thì gõ enter không có tác dụng đó bác.
-
8 phút trước, Doan Van Ha đã nói:Bản chất Cad đã có bộ OK_Cancel và đương nhiên nhấn enter thì chạy và cancel thì hủy nên bạn không cần tạo bộ OK_Cancel nữa
Em biết vụ này nhưng để lấy danh sách (list input) sẽ khó khăn hơn khi dùng bộ OK_Cancel;
;người dùng có thể nhập nhiều lần 1 box. action_tile "Item" chạy nhiều lần.
Em vẫn đang thắc mắc vấn đề khi sửa dữ liệu ---- nhấn ENTER từ bàn phím thì không tiếp tục chạy lisp cần phải kích chuột mới chạy chương trình.
-
Hi. Gần đây em đang viết 1 lisp cần hộp thoại nhập nhiều nội dung, nên tiện thể share cho anh em cùng dùng.
Nhân đây em cũng muốn hỏi các cao nhân làm sao để nhập ENTER từ bàn phím thì trực tiếp chạy. ;;;;;;;;;;;;;;;Em đã tìm đc phương pháp cho vấn đề này
Các bác giúp đỡ em vụ này với. ;;;;;TKS bác Doan Van Ha đã hỗ trợ rất nhiệt tình.
;; DiagBox list edit box ;; Được viết bởi Nguyễn Nhật Tân ;; nguyennhattanpt@gmail.com (defun c:test (/ lstbox) (setq lstbox '(("Box1" . "item1") ("Box2" . "item2")("Box3" . "item3")("Box4" . "item4"))) (tan:actioninputlstbox lstbox '(1)) ) (defun tan:actioninputlstbox ( lst lstlock / *error* str dcl_id UserClick x1 x2 i lstin des) (defun *error* (msg) (done_dialog) (vl-file-delete Fdcl) ) (setq i 0 str "ListEditBox : dialog {label = \"Insert Data.\";\n") (foreach item (mapcar 'car lst) (setq str (strcat str " : edit_box {\n" " label = \"" item "\";\n" " key = \"Item" (itoa i) "\";\n" " edit_width = 12;\n" " allow_accept = true;" " }\n" ) ) (setq i (1+ i)) ) (setq str (strcat str " : row {: spacer { width = 1; }\n" " : button {label = \"OK\"; is_default = true; key = \"accept\"; width = 8; fixed_width = true;}\n" " : button {label = \"Cancel\"; is_default = false; is_cancel = true;key = \"cancel\";width = 8;fixed_width = true;}" " : spacer { width = 1;}\n }\n" "}" ) ) (setq Fdcl (vl-filename-mktemp "dcllsteditbox.dcl")) (setq des (open Fdcl "w")) (write-line str des) (close des) (cond ((>= 0 (setq dcl_id (load_dialog Fdcl))) (princ "\n--> Dialog Definition not Found.") ) ( (not (new_dialog "ListEditBox" dcl_id)) (setq dcl_id (unload_dialog dcl_id)) (princ "\n--> Dialog Definition not Found.") ) (t (setq i 0) (foreach item (mapcar 'cdr lst) (set_tile (strcat "Item" (itoa i) ) (if item item "")) (setq i (1+ i)) ) (foreach item lstlock (mode_tile (strcat "Item" (itoa item)) 1) ) (action_tile "cancel" "(progn (setq UserClick nil) (done_dialog))") (action_tile "accept" "(progn (setq UserClick T)\n (repeat (setq i (length lst))\n (setq i (1- i) lstin (cons (get_tile (strcat \"Item\" (itoa i))) lstin)))\n (done_dialog))" ) (start_dialog) ) ) (vl-file-delete Fdcl) (if UserClick (mapcar '(lambda (a b) (cons (car a) b)) lst lstin) nil ) )
-
-
[ GIÚP ĐỠ KHÓA BV ]
trong AutoLisp
3 giờ trước, 7o7 đã nói:Thử cái này https://www.autodwg.com/dwglock/
Mình tải về thấy cũng là MINSERT phá còn dễ hơn mấy cái free chia sẻ trên mạng.
Còn cái password là cái vớ vẩn nếu đã gửi file thì buộc phải cho pass.
-
[ GIÚP ĐỠ KHÓA BV ]
trong AutoLisp
Bạn lên gg tìm lisp này về chạy là đc. WAI-LOCKALL
Lisp phá thì là EXPLODEM
bạn thử xem sao. nhưng chẳng tính khối lương gì đc đâu bạn.
-
[ GIÚP ĐỠ KHÓA BV ]
trong AutoLisp
Nếu đối phương cần file mềm để tính khối lượng. thì không khoá đc đâu bạn ơi.
Hầu hết các phương pháp đều sử dụng MINSERT. Khi convert về dạng này thì chẳng thao tác được gì cả. ngoài ra cũng có lisp phá khoá cho MINSERT rồi.
- 1
-
4 giờ trước, ketxu đã nói:Sáng tạo :)
Mẹo thôi mà bác. :)) lisp có thể giải quyết được nhưng phải tạo ra thêm nhiều block khác nhau. nặng file.
-
em không giỏi toán lắm nhưng vẫn đóng góp 1 cách ăn nhanh ạ:
Sử dụng UCS và lệnh hàm TRANS có sẵn của autolisp.
Từ C kẻ vuông góc AB được D. tạo ucs0 với 3p: D C A => (setq M0 (trans M 0 1))
Từ C1 kẻ vuông góc A1B1 Được D1 tạo ucs1 với 3p: D1 C1 A1 => (setq M1 (trans M0 1 0))
-
-
Của bạn đây nhé!
Vì bạn dùng nhiều loại BLOCK att nên mình bỏ chức năng chọn att. mọi att đều xuất ra.
(defun c:QT (/ ss tag file_name lstbkatt lstpt file_write item ent lstatt pair str) (setq ss (acet-ss-to-list (ssget '((0 . "INSERT")))) file_name (getfiled "Xuat du lieu" "Thong ke Toa do" "txt" 1) ) (mapcar '(lambda (x) (if (assoc 66 (entget x)) (setq lstbkatt (cons x lstbkatt)) (setq lstpt (cons (cdr (assoc 10 (entget x))) lstpt)) ) ) ss ) (if (and file_name (= (length lstbkatt) (length lstpt))) (progn (setq file_write (open file_name "W")) (foreach item lstpt (setq ent (car (vl-sort lstbkatt '(lambda (a b) (< (distance item (cdr (assoc 10 (ENTGET a)))) (distance item (cdr (assoc 10 (ENTGET b)))))))) str (strcat (cdr (assoc 2 (entget ent))) "\t" (rtos (Car item) 2 4) "\t" (rtos (Cadr item) 2 4)) lstatt (vlax-invoke (vlax-ename->vla-object ent) 'getattributes) ) (foreach pair lstatt (setq str (strcat str "\t" (vla-get-textstring pair))) ) (write-line str file_write) ) (close file_write) ) (alert "\nNot match data!") ) (princ) )
- 1
-
Minh viết hơi vội nên không để ý lỗi cú pháp bạn chạy lại cái này hoặc gửi file cad mình chạy thử xem sao
(defun c:QT (/ ss tag file_name lstbkatt lstpt file_write item ent lstatt pair str) (setq ss (acet-ss-to-list (ssget '((0 . "INSERT")))) tag (nentsel "\nSelect Att:") file_name (getfiled "Xuat du lieu" "Thong ke Toa do" "txt" 1) ) (mapcar '(lambda (x) (if (assoc 66 (entget x)) (setq lstbkatt (cons x lstbkatt)) (setq lstpt (cons (cdr (assoc 10 (entget x))) lstpt)) ;<===== sai chỗ này nè. :)) ) ) ss ) (if (and tag file_name (= (length lstbkatt) (length lstpt))) (setq file_write (open file_name "W")) (exit) ) (setq tag (strcase (cdr (assoc 2 (entget (car tag)))))) (foreach item lstpt (setq str (strcat (rtos (Car item) 2 4) "\t" (rtos (Cadr item) 2 4)) ent (car (vl-sort lstbkatt '(lambda (a b) (< (distance item (cdr (assoc 10 (ENTGET a)))) (distance item (cdr (assoc 10 (ENTGET b)))))))) lstatt (vlax-invoke (vlax-ename->vla-object ent) 'getattributes) ) (foreach pair lstatt (if (= tag (strcase (vla-get-tagstring pair))) (setq str (strcat str "\t" (vla-get-textstring pair))) ) ) (write-line str file_write) ) (close file_write) (princ) )
- 1
-
Mình nhận thấy thuật toán này cũng không khó lắm.
1. Chọn block và BLOCKATT
2. chọn att để lấy tagstring (dùng nentsel hoặc getword đều được)
3. Lọc Block và text thành 2 list (điều kiện cần: độ dài 2 list này bằng nhau)
4. Tạo danh sách điểm Block
5. ứng với mỗi điểm Lấy 1 BLOCKATT ở gần nhất (so sánh tagstring att trong block để lấy text tring.)
done!
(defun c:QT (/ ss tag file_name lstbkatt lstpt file_write item ent lstatt pair str) (setq ss (acet-ss-to-list (ssget '((0 . "INSERT")))) tag (nentsel "\nSelect Att:") file_name (getfiled "Xuat du lieu" "Thong ke Toa do" "txt" 1) ) (mapcar '(lambda (x) (if (assoc 66 (entget x)) (setq lstbkatt (cons x lstbkatt)) (setq lstpt (cons (cdr (assoc 10 (entget x))))) ) ) ss ) (if (and tag file_name (= (length lstbkatt) (length lstpt))) (setq file_write (open file_name "W")) (exit) ) (setq tag (strcase (cdr (assoc 2 (entget (car tag)))))) (foreach item lstpt (setq str (strcat (rtos (Car item) 2 4) "\t" (rtos (Cadr item) 2 4)) ent (car (vl-sort lstbkatt '(lambda (a b) (< (distance item (cdr (assoc 10 (ENTGET a)))) (distance item (cdr (assoc 10 (ENTGET b)))))))) lstatt (vlax-invoke (vlax-ename->vla-object ent) 'getattributes) ) (foreach pair lstatt (if (= tag (strcase (vla-get-tagstring pair))) (setq str (strcat str "\t" (vla-get-textstring pair))) ) ) (write-line str file_write) ) (close file_write) (princ) )
-
Vào lúc 12/10/2022 tại 13:45, Duong Nhat Duy đã nói:Mấu chốt của vấn đề là câu này: "ko dùng dc với các chi tiết nét rời rạc"
Có thể khắc phục một phần bằng câu lệnh (vl-cmdf ".PEDIT" ent "Y" "J" "All" "" "X")
Độ chính xác khoảng 80%. :))
-
1 phút trước, Doan Nguyen Van đã nói:Thế thì lỗi do mình đặt nó ở cuố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.
-
6 phút trước, Doan Nguyen Van đã nói:Mình tưởng bấm Yes thì nó không hiện, bấm No thì nó mới load file
Nếu bấm Yes luôn thì không chạy nhưng đợi đến cái VLR-REMOVE-ALL mới YES thì thành công ạ.
https://www.mediafire.com/file/eau7fy96tqz8oqx/clisp12.gif/file
-
Vừa xong, Doan Nguyen Van đã nói:Chắc dùng thủ thuật rồi :))
Không ạ.Em chưa dùng đến lisp.Tại cái này thôi ạ
Em xin trợ giúp dim kích thước.
trong AutoLisp
Đã đăng · Trả lời báo cáo
có phải bạn muốn như thế này
Rất tiếc cái này mình không chia sẻ được