Info | File | ||
Tác giả: hihi.hehe Bài viết gốc: 386391 Tên lệnh: gd |
Lisp Ghi ?? D?c Lên ???ng!
| ||
Tác giả: pphung183 Bài viết gốc: 386465 Tên lệnh: cco |
Nhờ Viết Lisp Copy Cộng Dồn Khoảng Cách
Lâu lâu vận động trí óc để tránh Bệnh Alzheimer’s :D : (defun c:cco (/ oldos css ss p0 p1 p2 a e d) (defun css (ss p0 p1 a) ((lambda (i / e obj o1 i) (while (setq e (ssname ss (setq i (1+ i)))) (setq obj (vlax-ename->vla-object e)) (setq o1 (vla-copy obj)) (if p0 (vla-move o1 (vlax-3d-point p0) (vlax-3d-point p1))) (vla-move o1 (vlax-3d-point p1) (vlax-3d-point (polar p1 a d))) )) -1) ) (princ "\n Chon doi tuong can copy") (setq ss... Lâu lâu vận động trí óc để tránh Bệnh Alzheimer’s :D : (defun c:cco (/ oldos css ss p0 p1 p2 a e d) (defun css (ss p0 p1 a) ((lambda (i / e obj o1 i) (while (setq e (ssname ss (setq i (1+ i)))) (setq obj (vlax-ename->vla-object e)) (setq o1 (vla-copy obj)) (if p0 (vla-move o1 (vlax-3d-point p0) (vlax-3d-point p1))) (vla-move o1 (vlax-3d-point p1) (vlax-3d-point (polar p1 a d))) )) -1) ) (princ "\n Chon doi tuong can copy") (setq ss (ssget) p0 (getpoint "\n Chon diem chuan") p1 (getpoint p0 "\n Chon diem goc") p2 (getpoint p1 "\n Chon diem dinh huong copy") a (angle p1 p2) e (entlast)) (while (setq d (getdist "\n Nhap khoang cach can copy tiep theo: ")) (css ss p0 p1 a) (setq ss (ssadd)) (while (setq e (entnext e)) (setq ss (ssadd e ss))) (setq p0 nil e (entlast)) ) (princ)) <<
| ||
Tác giả: hiepttr Bài viết gốc: 386445 Tên lệnh: ec |
Nhờ Viết Lisp Tọa Độ Theo File Đính Kem
Lỗi là do hàm MakeText chưa được load _ mình cũng không hiểu vì sao :D :D :D
>>> Xử lý: Bạn Cut đoạn code định nghĩa hàm MakeText >>> paste xuống cuối cùng nhé ! ;; free lisp from cadviet.com ;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/154743-nha-via-t-lisp-ta-a-a-theo-file-a-nh-kem/ (defun c:EC( / i p point lst key base_pnt last_pnt fn pw) ;Export... Lỗi là do hàm MakeText chưa được load _ mình cũng không hiểu vì sao :D :D :D
>>> Xử lý: Bạn Cut đoạn code định nghĩa hàm MakeText >>> paste xuống cuối cùng nhé ! ;; free lisp from cadviet.com ;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/154743-nha-via-t-lisp-ta-a-a-theo-file-a-nh-kem/ (defun c:EC( / i p point lst key base_pnt last_pnt fn pw) ;Export Coordinates (setq i 1) (while (setq p (getpoint "\nPick Point: ")) (setq point p) (MakeText (itoa i) 2.5 0 "L" nil nil 1 nil) (setq p (list i (car p) (cadr p)) i (1+ i) lst (cons p lst))) (if (> (length lst) 2) (progn (initget "Cad Excel cadAndexcel") (setq key (NGT key "Cad" getkword "Enter an option [Cad/Excel/cad_And_excel]")) (cond ((wcmatch key "Cad") (setq #textheight (NGT #textheight 2 getint "Chieu cao chu")) (setq base_pnt (getpoint "\nDiem chen: ")) (H:Creat_Cel+Data base_pnt 'L1 'L2 'L3 'L4 nil (* 5 #textheight) (* 0.5 #textheight) #textheight "MC" "STT" nil) (setq base_pnt (polar base_pnt 0 (* 5 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 'L3 nil nil (* 15 #textheight) (* 0.5 #textheight) #textheight "MC" "X" nil) (setq base_pnt (polar base_pnt 0 (* 15 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 'L3 nil nil (* 15 #textheight) (* 0.5 #textheight) #textheight "MC" "Y" nil) (setq base_pnt (polar base_pnt 0 (* 15 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 'L3 nil nil (* 10 #textheight) (* 0.5 #textheight) #textheight "MC" "K/CACH (m)" nil) ;;Xong tieu de (setq base_pnt (polar (polar base_pnt pi (* 35 #textheight)) (* 1.5 pi) (* 2 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil 'L4 nil (* 5 #textheight) (* 0.5 #textheight) #textheight "MC" (itoa (car (last lst))) nil) (setq base_pnt (polar base_pnt 0 (* 5 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 15 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (cadr (last lst)) 2 3) nil) (setq base_pnt (polar base_pnt 0 (* 15 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 15 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (last (last lst)) 2 3) nil) (setq base_pnt (polar base_pnt 0 (* 15 #textheight))) (H:Creat_Cel+Data base_pnt nil 'L2 nil nil nil (* 10 #textheight) (* 0.5 #textheight) #textheight "MC" nil nil) (setq last_pnt (cdr (last lst))) ;;Xong dong 1 (foreach p (cdr (reverse lst)) (setq base_pnt (polar (polar base_pnt pi (* 35 #textheight)) (* 1.5 pi) (* 2 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil 'L4 nil (* 5 #textheight) (* 0.5 #textheight) #textheight "MC" (itoa (car p)) nil) (setq base_pnt (polar base_pnt 0 (* 5 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 15 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (cadr p) 2 3) nil) (setq base_pnt (polar base_pnt 0 (* 15 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 15 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (last p) 2 3) nil) (setq base_pnt (polar base_pnt 0 (* 15 #textheight))) (H:Creat_Cel+Data base_pnt nil 'L2 nil nil nil (* 10 #textheight) (* 0.5 #textheight) #textheight "M" (rtos (distance last_pnt (setq last_pnt (cdr p))) 2 3) nil) ) ;;Xong cac diem giua (setq base_pnt (polar (polar base_pnt pi (* 35 #textheight)) (* 1.5 pi) (* 2 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil 'L4 nil (* 5 #textheight) (* 0.5 #textheight) #textheight "MC" (itoa (car (last lst))) nil) (setq base_pnt (polar base_pnt 0 (* 5 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 15 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (cadr (last lst)) 2 3) nil) (setq base_pnt (polar base_pnt 0 (* 15 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 15 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (last (last lst)) 2 3) nil) (setq base_pnt (polar base_pnt 0 (* 15 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 10 #textheight) (* 0.5 #textheight) #textheight "M" (rtos (distance last_pnt (cdr (last lst))) 2 3) nil) ;;Xong lap lai dong 1 + k/cach khep ) ((wcmatch key "Excel") (setq fn (getfiled "Chon file de xuat ket qua" "" "csv" 1)) (setq pw (open fn "w")) (write-line "STT,X,Y,K/cach (m)" pw) (write-line (strcat (itoa (car (last lst))) "," (rtos (cadr (last lst)) 2 3) "," (rtos (last (last lst)) 2 3)) pw) (setq last_pnt (cdr (last lst))) (foreach p (cdr (reverse lst)) (write-line (strcat (itoa (car p)) "," (rtos (cadr p) 2 3) "," (rtos (last p) 2 3) "," (rtos (distance last_pnt (setq last_pnt (cdr p))) 2 3)) pw) ) (write-line (strcat (itoa (car (last lst))) "," (rtos (cadr (last lst)) 2 3) "," (rtos (last (last lst)) 2 3) "," (rtos (distance last_pnt (cdr (last lst))) 2 3)) pw) (close pw) ) (t (setq #textheight (NGT #textheight 2 getint "Chieu cao chu")) (setq base_pnt (getpoint "\nDiem chen: ")) (H:Creat_Cel+Data base_pnt 'L1 'L2 'L3 'L4 nil (* 5 #textheight) (* 0.5 #textheight) #textheight "MC" "STT" nil) (setq base_pnt (polar base_pnt 0 (* 5 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 'L3 nil nil (* 15 #textheight) (* 0.5 #textheight) #textheight "MC" "X" nil) (setq base_pnt (polar base_pnt 0 (* 15 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 'L3 nil nil (* 15 #textheight) (* 0.5 #textheight) #textheight "MC" "Y" nil) (setq base_pnt (polar base_pnt 0 (* 15 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 'L3 nil nil (* 10 #textheight) (* 0.5 #textheight) #textheight "MC" "K/CACH (m)" nil) ;;Xong tieu de (setq base_pnt (polar (polar base_pnt pi (* 35 #textheight)) (* 1.5 pi) (* 2 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil 'L4 nil (* 5 #textheight) (* 0.5 #textheight) #textheight "MC" (itoa (car (last lst))) nil) (setq base_pnt (polar base_pnt 0 (* 5 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 15 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (cadr (last lst)) 2 3) nil) (setq base_pnt (polar base_pnt 0 (* 15 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 15 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (last (last lst)) 2 3) nil) (setq base_pnt (polar base_pnt 0 (* 15 #textheight))) (H:Creat_Cel+Data base_pnt nil 'L2 nil nil nil (* 10 #textheight) (* 0.5 #textheight) #textheight "MC" nil nil) (setq last_pnt (cdr (last lst))) ;;Xong dong 1 (foreach p (cdr (reverse lst)) (setq base_pnt (polar (polar base_pnt pi (* 35 #textheight)) (* 1.5 pi) (* 2 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil 'L4 nil (* 5 #textheight) (* 0.5 #textheight) #textheight "MC" (itoa (car p)) nil) (setq base_pnt (polar base_pnt 0 (* 5 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 15 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (cadr p) 2 3) nil) (setq base_pnt (polar base_pnt 0 (* 15 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 15 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (last p) 2 3) nil) (setq base_pnt (polar base_pnt 0 (* 15 #textheight))) (H:Creat_Cel+Data base_pnt nil 'L2 nil nil nil (* 10 #textheight) (* 0.5 #textheight) #textheight "M" (rtos (distance last_pnt (setq last_pnt (cdr p))) 2 3) nil) ) ;;Xong cac diem giua (setq base_pnt (polar (polar base_pnt pi (* 35 #textheight)) (* 1.5 pi) (* 2 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil 'L4 nil (* 5 #textheight) (* 0.5 #textheight) #textheight "MC" (itoa (car (last lst))) nil) (setq base_pnt (polar base_pnt 0 (* 5 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 15 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (cadr (last lst)) 2 3) nil) (setq base_pnt (polar base_pnt 0 (* 15 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 15 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (last (last lst)) 2 3) nil) (setq base_pnt (polar base_pnt 0 (* 15 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 10 #textheight) (* 0.5 #textheight) #textheight "M" (rtos (distance last_pnt (cdr (last lst))) 2 3) nil) ;;Xong lap lai dong 1 + k/cach khep ;;Xong chen bang trong cad (setq fn (getfiled "Chon file de xuat ket qua" "" "csv" 1)) (setq pw (open fn "w")) (write-line "STT,X,Y,K/cach (m)" pw) (write-line (strcat (itoa (car (last lst))) "," (rtos (cadr (last lst)) 2 3) "," (rtos (last (last lst)) 2 3)) pw) (setq last_pnt (cdr (last lst))) (foreach p (cdr (reverse lst)) (write-line (strcat (itoa (car p)) "," (rtos (cadr p) 2 3) "," (rtos (last p) 2 3) "," (rtos (distance last_pnt (setq last_pnt (cdr p))) 2 3)) pw) ) (write-line (strcat (itoa (car (last lst))) "," (rtos (cadr (last lst)) 2 3) "," (rtos (last (last lst)) 2 3) "," (rtos (distance last_pnt (cdr (last lst))) 2 3)) pw) (close pw) ) ) ) (princ "\n***** Phai pick >2 diem ! ***") ) (princ) ) ;;;End main ;=============================================================================================== (defun NGT(a mac_dinh ham str_nhac / modul) ;;Nhan gia tri (or a (setq a mac_dinh)) (setq a (cond ((= "" (setq modul (ham (strcat "\n" str_nhac " <" (vl-princ-to-string a) ">: ")))) a) (modul) (a) ) ) ) ;===================== (defun H:Creat_Cel+Data (base_pnt L1 L2 L3 L4 celheight celwidth offset textheight justify string Ang / pnt2 pnt3 pnt4 justify point) ;================================= (defun MakeLine (PT1 PT2 Linetype LTScale Layer Color xdata) (entmakex (list '(0 . "LINE") (cons 8 (if Layer Layer (getvar "Clayer"))) (cons 6 (if Linetype Linetype "bylayer")) (cons 48 (if LTScale LTScale 1)) (cons 62 (if Color Color 256)) (cons 10 PT1) (cons 11 PT2) (cons -3 (if xdata (list xdata) nil)))) );end ;================================= (if (null celheight) (setq celheight (+ textheight (* 2 offset)))) (setq pnt2 (polar base_pnt 0 celwidth) pnt3 (polar pnt2 (* 1.5 pi) celheight) pnt4 (polar pnt3 pi celwidth) ) (if justify (setq justify (strcase justify))) (cond ((wcmatch justify "C,BC") (setq point (polar (polar pnt4 (* 0.5 pi) offset) 0 (* 0.5 celwidth)))) ((wcmatch justify "R,BR") (setq point (polar pnt3 (* 0.75 pi) (* offset (sqrt 2))))) ((wcmatch justify "M") (setq point (polar base_pnt 0 (* 0.5 celwidth)))) ((wcmatch justify "MC") (setq point (polar (polar pnt4 (* 0.5 pi) (* 0.5 celheight)) 0 (* 0.5 celwidth)))) ((wcmatch justify "TL") (setq point (polar (polar base_pnt (* 1.5 pi) offset) 0 offset))) ((wcmatch justify "TC") (setq point (polar (polar base_pnt (* 1.5 pi) offset) 0 (* 0.5 celheight)))) ((wcmatch justify "TR") (setq point (polar pnt2 (* 1.25 pi) (* offset (sqrt 2))))) ((wcmatch justify "ML") (setq point (polar (polar base_pnt (* 1.5 pi) (* 0.5 celheight)) 0 offset))) ((wcmatch justify "MR") (setq point (polar (polar pnt2 (* 1.5 pi) (* 0.5 celheight)) pi offset))) (t (setq point (polar pnt4 (* 0.25 pi) (* offset (sqrt 2))))) ) (if L1 (MakeLine pnt4 pnt3 nil nil nil nil nil)) (if L2 (MakeLine pnt3 pnt2 nil nil nil nil nil)) (if L3 (MakeLine base_pnt pnt2 nil nil nil nil nil)) (if L4 (MakeLine pnt4 base_pnt nil nil nil nil nil)) (if string (MakeText string textheight Ang justify nil nil nil nil)) ) ;=================================== (defun MakeText (string Height Ang justify Style Layer Color xdata / Lst) ; Ang: Radial (setq Lst (list '(0 . "TEXT") (cons 8 (if Layer Layer (getvar "Clayer"))) (cons 62 (if Color Color 256)) (cons 10 point) (cons 40 Height) (cons 1 string) (cons 50 (if Ang Ang 0)) (cons 7 (if Style Style (getvar "Textstyle"))) (cons -3 (if xdata (list xdata) nil))) ;justify (strcase justify) ) (cond ((= justify "C") (setq Lst (append Lst (list (cons 72 1) (cons 11 point))))) ((= justify "R") (setq Lst (append Lst (list (cons 72 2) (cons 11 point))))) ((= justify "M") (setq Lst (append Lst (list (cons 72 4) (cons 11 point))))) ((= justify "TL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 3))))) ((= justify "TC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 3))))) ((= justify "TR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 3))))) ((= justify "ML") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 2))))) ((= justify "MC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 2))))) ((= justify "MR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 2))))) ((= justify "BL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 1))))) ((= justify "BC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 1))))) ((= justify "BR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 1))))) ) (entmakex Lst) );end ;================================= p/s: Tiện thể, có bác nào ngang qua cho em hỏi: Vì sao khi "bỏ" hàm MakeText vào trong hàm H:Creat_Cel+Data (mục đích để định nghĩa lại nó mỗi khi gọi hàm H:Creat_Cel+Data tránh sai sót) và đã không thiết lập nó là biến cục bộ thì cad không load được hàm MakeText. Phải chăng là do mình đã để ngõ tham số point trong đó. <<
| ||
Tác giả: thiep Bài viết gốc: 386535 Tên lệnh: cltf |
Nhập các File *.lsp thành một file *.fas
Trước hết bạn phải tải các file doslib...arx vào thư mục support hoạc bất kỳ thư mục nào mà bạn đã add trong "support file search path. Tải các file doslib tại đây: http://www.en.na.mcneel.com/doslib.htm Đây là lisp Thiep thêm arxload:
>> Trước hết bạn phải tải các file doslib...arx vào thư mục support hoạc bất kỳ thư mục nào mà bạn đã add trong "support file search path. Tải các file doslib tại đây: http://www.en.na.mcneel.com/doslib.htm Đây là lisp Thiep thêm arxload:
(cond ((eq (getvar "acadver") "19.0s (LMS Tech)") (arxload "doslib19") ) ((or (eq (getvar "acadver") "18.2s (LMS Tech)") (eq (getvar "acadver") "18.1s (LMS Tech)") (eq (getvar "acadver") "18.0s (LMS Tech)") ) (arxload "doslib18") ) ((or (eq (getvar "acadver") "17.2s (LMS Tech)") (eq (getvar "acadver") "17.1s (LMS Tech)") (eq (getvar "acadver") "17.0s (LMS Tech)") ) (arxload "doslib17") ) ) (defun c:cltf (/ lsp fas lst) (setq lsp (dos_getdir "Browse for folder" " " "Select a folder as source" t) ) (setq fas (dos_getdir "Browse for folder" " " "Select a folder as destination" t ) ) (setq lst (vl-directory-files lsp "*.lsp" 1)) (if lst (progn (foreach x lst (vlisp-compile 'st (strcat lsp x) (strcat fas (substr x 1 (- (strlen x) 4)) ".fas") ) ) ; foreach ) ; progn (alert "There is not contained file") ) ; if (princ) ) Tuy nhiên, lisp trên chỉ compiler mỗi một file *.lsp thành 1 file *.fas. Chưa biết làm sao compiler nhiều file thành 1 file được. (Nếu làm trong VLISP thì ok rồi) <<
| ||
Tác giả: hiepttr Bài viết gốc: 386573 Tên lệnh: ec |
Nhờ Viết Lisp Tọa Độ Theo File Đính Kem
@Namgiang: 1. Khoảng cách này bạn đã không yêu cầu từ đầu >>> Ngại sửa lắm, nhưng đã sửa theo ý bạn. 2. Text chữ thì canh giữa, số thì canh Right (k/cach canh giữa là vì mình nhác, nếu không đã canh R) >>>> Mình bảo lưu, ko sửa. 3. Bạn cài đặt dấu thập phân cho Excel là đấu chấm "." nhé ! 4. Có lẽ bạn đã không đặt lại... >> @Namgiang: 1. Khoảng cách này bạn đã không yêu cầu từ đầu >>> Ngại sửa lắm, nhưng đã sửa theo ý bạn. 2. Text chữ thì canh giữa, số thì canh Right (k/cach canh giữa là vì mình nhác, nếu không đã canh R) >>>> Mình bảo lưu, ko sửa. 3. Bạn cài đặt dấu thập phân cho Excel là đấu chấm "." nhé ! 4. Có lẽ bạn đã không đặt lại tên file nên xuất file trùng tên vì trước đó bạn đã thử cho lựa chọn Excel ;lisp pick diem => xuat toa do thua ra cad, excel ;;So diem pick phai >2 (defun c:EC( / i p point lst key base_pnt last_pnt fn pw) ;Export Coordinates ;=================================== (defun MakeText (string Height Ang justify Style Layer Color xdata / Lst) ; Ang: Radial (setq Lst (list '(0 . "TEXT") (cons 8 (if Layer Layer (getvar "Clayer"))) (cons 62 (if Color Color 256)) (cons 10 point) (cons 40 Height) (cons 1 string) (cons 50 (if Ang Ang 0)) (cons 7 (if Style Style (getvar "Textstyle"))) (cons -3 (if xdata (list xdata) nil))) ;justify (strcase justify) ) (cond ((= justify "C") (setq Lst (append Lst (list (cons 72 1) (cons 11 point))))) ((= justify "R") (setq Lst (append Lst (list (cons 72 2) (cons 11 point))))) ((= justify "M") (setq Lst (append Lst (list (cons 72 4) (cons 11 point))))) ((= justify "TL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 3))))) ((= justify "TC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 3))))) ((= justify "TR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 3))))) ((= justify "ML") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 2))))) ((= justify "MC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 2))))) ((= justify "MR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 2))))) ((= justify "BL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 1))))) ((= justify "BC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 1))))) ((= justify "BR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 1))))) ) (entmakex Lst) );end ;================================= (setq i 1) (while (setq p (getpoint "\nPick Point: ")) (setq point p) (MakeText (itoa i) 2.5 0 "L" nil nil 1 nil) (setq p (list i (car p) (cadr p)) i (1+ i) lst (cons p lst))) (if (> (length lst) 2) (progn (setq #sole (NGT #sole 3 getint "So thap phan")) (initget "Cad Excel cadAndexcel") (setq key (NGT key "Cad" getkword "Enter an option [Cad/Excel/cadAndexcel]")) (cond ((wcmatch key "Cad") (setq #textheight (NGT #textheight 2 getint "Chieu cao chu")) (setq base_pnt (getpoint "\nDiem chen: ")) (H:Creat_Cel+Data base_pnt 'L1 'L2 'L3 'L4 nil (* 4 #textheight) (* 0.5 #textheight) #textheight "MC" "STT" nil) (setq base_pnt (polar base_pnt 0 (* 4 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 'L3 nil nil (* 8 #textheight) (* 0.5 #textheight) #textheight "MC" "X" nil) (setq base_pnt (polar base_pnt 0 (* 8 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 'L3 nil nil (* 8 #textheight) (* 0.5 #textheight) #textheight "MC" "Y" nil) (setq base_pnt (polar base_pnt 0 (* 8 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 'L3 nil nil (* 7 #textheight) (* 0.5 #textheight) #textheight "MC" "K/CACH (m)" nil) ;;Xong tieu de (setq base_pnt (polar (polar base_pnt pi (* 20 #textheight)) (* 1.5 pi) (* 2 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil 'L4 nil (* 4 #textheight) (* 0.5 #textheight) #textheight "MC" (itoa (car (last lst))) nil) (setq base_pnt (polar base_pnt 0 (* 4 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 8 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (cadr (last lst)) 2 #sole) nil) (setq base_pnt (polar base_pnt 0 (* 8 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 8 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (last (last lst)) 2 #sole) nil) (setq base_pnt (polar base_pnt 0 (* 8 #textheight))) (H:Creat_Cel+Data base_pnt nil 'L2 nil nil nil (* 7 #textheight) (* 0.5 #textheight) #textheight "MC" nil nil) (setq last_pnt (cdr (last lst))) ;;Xong dong 1 (foreach p (cdr (reverse lst)) (setq base_pnt (polar (polar base_pnt pi (* 20 #textheight)) (* 1.5 pi) (* 2 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil 'L4 nil (* 4 #textheight) (* 0.5 #textheight) #textheight "MC" (itoa (car p)) nil) (setq base_pnt (polar base_pnt 0 (* 4 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 8 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (cadr p) 2 #sole) nil) (setq base_pnt (polar base_pnt 0 (* 8 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 8 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (last p) 2 #sole) nil) (setq base_pnt (polar base_pnt 0 (* 8 #textheight))) (H:Creat_Cel+Data base_pnt nil 'L2 nil nil nil (* 7 #textheight) (* 0.5 #textheight) #textheight "M" (rtos (distance last_pnt (setq last_pnt (cdr p))) 2 #sole) nil) ) ;;Xong cac diem giua (setq base_pnt (polar (polar base_pnt pi (* 20 #textheight)) (* 1.5 pi) (* 2 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil 'L4 nil (* 4 #textheight) (* 0.5 #textheight) #textheight "MC" (itoa (car (last lst))) nil) (setq base_pnt (polar base_pnt 0 (* 4 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 8 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (cadr (last lst)) 2 #sole) nil) (setq base_pnt (polar base_pnt 0 (* 8 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 8 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (last (last lst)) 2 #sole) nil) (setq base_pnt (polar base_pnt 0 (* 8 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 7 #textheight) (* 0.5 #textheight) #textheight "M" (rtos (distance last_pnt (cdr (last lst))) 2 #sole) nil) ;;Xong lap lai dong 1 + k/cach khep ) ((wcmatch key "Excel") (setq fn (getfiled "Chon file de xuat ket qua" "" "csv" 1)) (setq pw (open fn "w")) (write-line "STT,X,Y,K/cach (m)" pw) (write-line (strcat (itoa (car (last lst))) "," (rtos (cadr (last lst)) 2 #sole) "," (rtos (last (last lst)) 2 #sole)) pw) (setq last_pnt (cdr (last lst))) (foreach p (cdr (reverse lst)) (write-line (strcat (itoa (car p)) "," (rtos (cadr p) 2 #sole) "," (rtos (last p) 2 #sole) "," (rtos (distance last_pnt (setq last_pnt (cdr p))) 2 #sole)) pw) ) (write-line (strcat (itoa (car (last lst))) "," (rtos (cadr (last lst)) 2 #sole) "," (rtos (last (last lst)) 2 #sole) "," (rtos (distance last_pnt (cdr (last lst))) 2 #sole)) pw) (close pw) ) (t (setq #textheight (NGT #textheight 2 getint "Chieu cao chu")) (setq base_pnt (getpoint "\nDiem chen: ")) (H:Creat_Cel+Data base_pnt 'L1 'L2 'L3 'L4 nil (* 4 #textheight) (* 0.5 #textheight) #textheight "MC" "STT" nil) (setq base_pnt (polar base_pnt 0 (* 4 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 'L3 nil nil (* 8 #textheight) (* 0.5 #textheight) #textheight "MC" "X" nil) (setq base_pnt (polar base_pnt 0 (* 8 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 'L3 nil nil (* 8 #textheight) (* 0.5 #textheight) #textheight "MC" "Y" nil) (setq base_pnt (polar base_pnt 0 (* 8 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 'L3 nil nil (* 7 #textheight) (* 0.5 #textheight) #textheight "MC" "K/CACH (m)" nil) ;;Xong tieu de (setq base_pnt (polar (polar base_pnt pi (* 20 #textheight)) (* 1.5 pi) (* 2 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil 'L4 nil (* 4 #textheight) (* 0.5 #textheight) #textheight "MC" (itoa (car (last lst))) nil) (setq base_pnt (polar base_pnt 0 (* 4 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 8 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (cadr (last lst)) 2 #sole) nil) (setq base_pnt (polar base_pnt 0 (* 8 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 8 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (last (last lst)) 2 #sole) nil) (setq base_pnt (polar base_pnt 0 (* 8 #textheight))) (H:Creat_Cel+Data base_pnt nil 'L2 nil nil nil (* 7 #textheight) (* 0.5 #textheight) #textheight "MC" nil nil) (setq last_pnt (cdr (last lst))) ;;Xong dong 1 (foreach p (cdr (reverse lst)) (setq base_pnt (polar (polar base_pnt pi (* 20 #textheight)) (* 1.5 pi) (* 2 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil 'L4 nil (* 4 #textheight) (* 0.5 #textheight) #textheight "MC" (itoa (car p)) nil) (setq base_pnt (polar base_pnt 0 (* 4 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 8 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (cadr p) 2 #sole) nil) (setq base_pnt (polar base_pnt 0 (* 8 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 8 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (last p) 2 #sole) nil) (setq base_pnt (polar base_pnt 0 (* 8 #textheight))) (H:Creat_Cel+Data base_pnt nil 'L2 nil nil nil (* 7 #textheight) (* 0.5 #textheight) #textheight "M" (rtos (distance last_pnt (setq last_pnt (cdr p))) 2 #sole) nil) ) ;;Xong cac diem giua (setq base_pnt (polar (polar base_pnt pi (* 20 #textheight)) (* 1.5 pi) (* 2 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil 'L4 nil (* 4 #textheight) (* 0.5 #textheight) #textheight "MC" (itoa (car (last lst))) nil) (setq base_pnt (polar base_pnt 0 (* 4 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 8 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (cadr (last lst)) 2 #sole) nil) (setq base_pnt (polar base_pnt 0 (* 8 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 8 #textheight) (* 0.5 #textheight) #textheight "MR" (rtos (last (last lst)) 2 #sole) nil) (setq base_pnt (polar base_pnt 0 (* 8 #textheight))) (H:Creat_Cel+Data base_pnt 'L1 'L2 nil nil nil (* 7 #textheight) (* 0.5 #textheight) #textheight "M" (rtos (distance last_pnt (cdr (last lst))) 2 #sole) nil) ;;Xong lap lai dong 1 + k/cach khep ;;Xong chen bang trong cad (setq fn (getfiled "Chon file de xuat ket qua" "" "csv" 1)) (setq pw (open fn "w")) (write-line "STT,X,Y,K/cach (m)" pw) (write-line (strcat (itoa (car (last lst))) "," (rtos (cadr (last lst)) 2 #sole) "," (rtos (last (last lst)) 2 #sole)) pw) (setq last_pnt (cdr (last lst))) (foreach p (cdr (reverse lst)) (write-line (strcat (itoa (car p)) "," (rtos (cadr p) 2 #sole) "," (rtos (last p) 2 #sole) "," (rtos (distance last_pnt (setq last_pnt (cdr p))) 2 #sole)) pw) ) (write-line (strcat (itoa (car (last lst))) "," (rtos (cadr (last lst)) 2 #sole) "," (rtos (last (last lst)) 2 #sole) "," (rtos (distance last_pnt (cdr (last lst))) 2 #sole)) pw) (close pw) ) ) ) (princ "\n***** Phai pick >2 diem ! ***") ) (princ) ) ;;;End main ;=============================================================================================== (defun NGT(a mac_dinh ham str_nhac / modul) ;;Nhan gia tri (or a (setq a mac_dinh)) (setq a (cond ((= "" (setq modul (ham (strcat "\n" str_nhac " <" (vl-princ-to-string a) ">: ")))) a) (modul) (a) ) ) ) ;===================== (defun H:Creat_Cel+Data (base_pnt L1 L2 L3 L4 celheight celwidth offset textheight justify string Ang / pnt2 pnt3 pnt4 justify point) ;================================= (defun MakeLine (PT1 PT2 Linetype LTScale Layer Color xdata) (entmakex (list '(0 . "LINE") (cons 8 (if Layer Layer (getvar "Clayer"))) (cons 6 (if Linetype Linetype "bylayer")) (cons 48 (if LTScale LTScale 1)) (cons 62 (if Color Color 256)) (cons 10 PT1) (cons 11 PT2) (cons -3 (if xdata (list xdata) nil)))) );end ;================================= (if (null celheight) (setq celheight (+ textheight (* 2 offset)))) (setq pnt2 (polar base_pnt 0 celwidth) pnt3 (polar pnt2 (* 1.5 pi) celheight) pnt4 (polar pnt3 pi celwidth) ) (if justify (setq justify (strcase justify))) (cond ((wcmatch justify "C,BC") (setq point (polar (polar pnt4 (* 0.5 pi) offset) 0 (* 0.5 celwidth)))) ((wcmatch justify "R,BR") (setq point (polar pnt3 (* 0.75 pi) (* offset (sqrt 2))))) ((wcmatch justify "M") (setq point (polar base_pnt 0 (* 0.5 celwidth)))) ((wcmatch justify "MC") (setq point (polar (polar pnt4 (* 0.5 pi) (* 0.5 celheight)) 0 (* 0.5 celwidth)))) ((wcmatch justify "TL") (setq point (polar (polar base_pnt (* 1.5 pi) offset) 0 offset))) ((wcmatch justify "TC") (setq point (polar (polar base_pnt (* 1.5 pi) offset) 0 (* 0.5 celheight)))) ((wcmatch justify "TR") (setq point (polar pnt2 (* 1.25 pi) (* offset (sqrt 2))))) ((wcmatch justify "ML") (setq point (polar (polar base_pnt (* 1.5 pi) (* 0.5 celheight)) 0 offset))) ((wcmatch justify "MR") (setq point (polar (polar pnt2 (* 1.5 pi) (* 0.5 celheight)) pi offset))) (t (setq point (polar pnt4 (* 0.25 pi) (* offset (sqrt 2))))) ) (if L1 (MakeLine pnt4 pnt3 nil nil nil nil nil)) (if L2 (MakeLine pnt3 pnt2 nil nil nil nil nil)) (if L3 (MakeLine base_pnt pnt2 nil nil nil nil nil)) (if L4 (MakeLine pnt4 base_pnt nil nil nil nil nil)) (if string (MakeText string textheight Ang justify nil nil nil nil)) ) <<
| ||
Tác giả: Doan Van Ha Bài viết gốc: 386589 Tên lệnh: ha |
[Yêu Cầu] Lisp Lọc Đường Thẳng Theo Độ Dốc!
Dùng cái này xem. ;Doan Van Ha - CADViet.com - Ngay 23/11/2015 ;Muc dich: Chon cac doi tuong Line nam giua 2 gioi han ve Dy/Dx. (defun C:HA( / duoi tren ss lst) (if (and (not (initget 1)) (setq duoi (getreal "\nNhap gioi han duoi: ")) (not (initget 1)) (setq tren (getreal "\nNhap gioi han tren: ")) (princ "\nChon cac doi tuong Line...") (setq ss (ssget '((0 . "Line"))) ss1... Dùng cái này xem. ;Doan Van Ha - CADViet.com - Ngay 23/11/2015 ;Muc dich: Chon cac doi tuong Line nam giua 2 gioi han ve Dy/Dx. (defun C:HA( / duoi tren ss lst) (if (and (not (initget 1)) (setq duoi (getreal "\nNhap gioi han duoi: ")) (not (initget 1)) (setq tren (getreal "\nNhap gioi han tren: ")) (princ "\nChon cac doi tuong Line...") (setq ss (ssget '((0 . "Line"))) ss1 (ssadd))) (progn (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))) (setq lst (entget ent)) (if (>= tren (/ (- (caddr (assoc 10 lst)) (caddr (assoc 11 lst))) (- (cadr (assoc 10 lst)) (cadr (assoc 11 lst)))) duoi) (setq ss1 (ssadd ent ss1)))) (sssetfirst nil ss1)))) <<
| ||
Tác giả: Tr.CongSon Bài viết gốc: 386730 Tên lệnh: ttd |
Lisp Ghi Chú Tọa Độ Từng Điểm Khi Pick
Bạn dùng tạm cái này xem sao^^ Cái này,lúc trước mình sửa lại cho 1 bạn trên cadviet ^^ Lisp này không phải chính chủ nhé! (prompt "\n -... >>
Bạn dùng tạm cái này xem sao^^ Cái này,lúc trước mình sửa lại cho 1 bạn trên cadviet ^^ Lisp này không phải chính chủ nhé! (prompt "\n - THONG KE TOA DO") Chúc thành công ! <<
| ||
Tác giả: dckonhi1987 Bài viết gốc: 386787 Tên lệnh: 123 round dcc dc dcx |
[Yêu Cầu] Lisp Đánh Cao Độ Bằng Field
Có lẽ do yêu cầu trước hơi nhiều nên các bác ngại. Nên em xin đôi yêu cầu cho ngắn: + Viết thành lisp chương trình này để em có thể chỉnh sửa. + Tọa độ đối chiếu (gốc), là bất kỳ không phải là +0.00. + Tọa độ gốc lấy theo text của gốc. Nghĩa là mình chỉ cần thay đổi text của tọa độ gốc thì tọa độ con nhảy theo text đó.
Lệnh chạy chương... >> Có lẽ do yêu cầu trước hơi nhiều nên các bác ngại. Nên em xin đôi yêu cầu cho ngắn: + Viết thành lisp chương trình này để em có thể chỉnh sửa. + Tọa độ đối chiếu (gốc), là bất kỳ không phải là +0.00. + Tọa độ gốc lấy theo text của gốc. Nghĩa là mình chỉ cần thay đổi text của tọa độ gốc thì tọa độ con nhảy theo text đó.
Lệnh chạy chương trình: CD1, update bằng RE http://www.cadviet.com/link/?f=upfiles/4/141736_cotcaodo_2.zip&w=152
Hình chường trình:
Mong các bác giúp đỡ! <<
| ||
Tác giả: Nguyen Hoanh Bài viết gốc: 386883 Tên lệnh: cf%25 |
Lisp Chuyển Đổi Mã Font Chữ Trong Autocad
VẤN ĐỀ Bác Vbao có nhờ mình xem cho một file xem vì sao file này là mã TCVN mà không convert được sang các mã khác. Vì đây là vấn đề khá thú vị, một vài bạn cũng khó thể sẽ gặp điều tương tự, nên mình chia sẻ lên đây để mọi người cùng theo dõi. File đó như sau (mình đã xoá các nội dung khác, chỉ để các nội dung text cần nói): >> VẤN ĐỀ Bác Vbao có nhờ mình xem cho một file xem vì sao file này là mã TCVN mà không convert được sang các mã khác. Vì đây là vấn đề khá thú vị, một vài bạn cũng khó thể sẽ gặp điều tương tự, nên mình chia sẻ lên đây để mọi người cùng theo dõi. File đó như sau (mình đã xoá các nội dung khác, chỉ để các nội dung text cần nói): http://www.cadviet.com/upfiles/5/3_percentfontsample.dwg NGUYÊN NHÂN Text trong file này có mã là TCVN3, nhưng không viết theo kiểu thông thường bằng các phần mềm gõ tiếng Việt (Unikey, Vietkey,...) mà được tạo ra theo một cách nào đó. Thay vì chữ có mã code theo bảng ASCII thì chữ lại được hiển thị theo kiểu %%XXX trong đó XXX là mã ASCII của chữ. Bằng cách này, chữ vẫn hiển thị lên đúng mã TCVN, tuy nhiên các phần mềm convert font sẽ không thể nhận dạng được. GIẢI PHÁP Mình đã viết một lệnh cf% dành cho trường hợp này. Các bạn chỉ cần appload file, gõ lệnh cf% là xong. Sau khi chạy lệnh cf%, các text sẽ được convert về thành các text bình thường và có thể sử dụng các lệnh CFU, CFV,... một cách bình thường. (defun c:cf% () (defun convertone (ent) (setq tt (entget ent)) (if (and (wcmatch (cdr (assoc 0 tt)) "*TEXT,ATTRIBUTE") (wcmatch (setq gt (cdr (assoc 1 tt))) "*%%###*") ) (progn (setq i 1 len (strlen gt) kq "" ) (while (<= i len) (if (wcmatch (substr gt i 5) "%%###") (setq curchar (chr (atoi (substr gt (+ i 2) 3))) i (+ i 5) ) (setq curchar (substr gt i 1) i (1+ i) ) ) (setq kq (strcat kq curchar)) ) (entmod (subst (cons 1 kq) (assoc 1 tt) tt)) (entupd ent) ) ) ) (setq ent (entnext)) (while (setq ent (entnext ent)) (convertone ent) ) (princ) ) <<
| ||
Tác giả: hainguyen2014 Bài viết gốc: 386981 Tên lệnh: ttd |
Lisp Ghi Chú Tọa Độ Từng Điểm Khi Pick
>>
<<
| ||
Tác giả: namgiangduy89 Bài viết gốc: 387001 Tên lệnh: xtd lkd |
Lisp Ghi Chú Tọa Độ Từng Điểm Khi Pick
em có lisp này của anh duy cung khá hay, mà lại thao tác it hơn, anh chỉnh lại dùm em vơi. cho y nằm dưới đường line và thêm cái vong tron cho em với, cái lisp anh cho phía sau không co số thập phân. (Defun c:xtd ( ) >> em có lisp này của anh duy cung khá hay, mà lại thao tác it hơn, anh chỉnh lại dùm em vơi. cho y nằm dưới đường line và thêm cái vong tron cho em với, cái lisp anh cho phía sau không co số thập phân. (Defun c:xtd ( ) <<
| ||
Tác giả: Doan Van Ha Bài viết gốc: 264508 Tên lệnh: dimpoly |
Đo đường gấp khúc Pline
Đây bạn! ;Ve Dim kieu Pline/Spline. ; ============================================================================= ; Filename : DimPoly.lsp ; Datum : 08.03.06 ; Author : ...
Đây bạn! ;Ve Dim kieu Pline/Spline. ; ============================================================================= ; Filename : DimPoly.lsp ; Datum : 08.03.06 ; Author : jme ; Copyright : MENZI ENGINEERING GmbH, Switzerland ; Revision 1 : 10.03.06 jme - DIMBLK1/2, DIMSE1/2 and DIMDLE support added ; - Bug Text rotation fixed ; - Code refined ; Revision 2 : 13.03.06 jme - Bug attribute insertion point fixed ; - Flag 70 excluded in Spline flag check ; Revision 3 : __.__.__ ___ - ; ----------------------------------------------------------------------------- ; Description: ; Creates a Polyline/Spline dimension. ; ----------------------------------------------------------------------------- ; Global variables: ; Me:AcD ; ----------------------------------------------------------------------------- ; Internal LISP-functions: ; MeAddArrowObjects MeCalcArrow MeGetAssoc MeGetCurSpace MeGetEndPoints ; MeGetObjLength MeGetObjMidPoint MeGetTangentAtPoint MeTranslateDimBklName ; MeSelPline MeShorten MeTan ; ----------------------------------------------------------------------------- ; External LISP-functions: ; None ; ----------------------------------------------------------------------------- ; Version notes: ; AutoCAD: Version: Language: AddIns: ; 15 up 1.02 English ... ; ----------------------------------------------------------------------------- ; ; == Message on loading ======================================================= ; (princ "\nDimPoly v1.02") ; ; == Main ===================================================================== ; (defun C:DimPoly ( / BlkLst CurEnt CurObj CurSpc DimAsz DimBl1 DimBl2 DimDle DimEnt DimExe DimExo DimGap DimObj DimScl DimTxt DimVal FstAng FstBpt FstDpt FstPnt NxtAng NxtBpt NxtDpt NxtPnt ObjNme OldCmd OldOsm PntLst TmpBlk TmpObj TxtAng TxtIpt *Error*) ; - Check for AutoCAD version 15.0+ (if (< (atof (getvar "ACADVER")) 15.0) (alert " DimPoly requires AutoCAD 2000 or higher. ") (progn ; - Initialize ActiveX (vl-load-com) ; - Get AutoCAD's current document (or Me:AcD (setq Me:AcD (vla-get-ActiveDocument (vlax-get-acad-object)))) ; - Save system variables (setq OldCmd (getvar "CMDECHO") OldOsm (getvar "OSMODE") ) ; - Establish error handler (defun *error* (Msg) (setvar "CMDECHO" OldCmd) (setvar "OSMODE" OldOsm) (vla-EndUndoMark Me:AcD) (if Msg (princ Msg)) (princ) ) ; - Begin program (vla-StartUndoMark Me:AcD) (if (setq CurEnt (MeSelPline "\nSelect Polyline or Spline: " nil nil)) (progn (setq FstPnt (cadr CurEnt) CurEnt (car CurEnt) CurObj (vlax-ename->vla-object CurEnt) NxtPnt (getpoint FstPnt "\nDimension line position: ") ) (setvar "CMDECHO" 0) (setvar "OSMODE" 0) (cond ((not NxtPnt)) ((not (vl-cmdf "_.OFFSET" (distance FstPnt NxtPnt) CurEnt NxtPnt "")) (princ "can't offset this object. ") ) (T (setq DimEnt (entlast) DimObj (vlax-ename->vla-object DimEnt) ) (if (not (eq (vla-get-ObjectName DimObj) "AcDbSpline")) (vla-put-ConstantWidth DimObj 0.0) ) (vla-put-Color DimObj (getvar "DIMCLRD")) (vla-put-LineWeight DimObj (getvar "DIMLWD")) (setq CurSpc (MeGetCurSpace) PntLst (MeGetEndPoints CurObj) FstBpt (car PntLst) NxtBpt (cadr PntLst) PntLst (MeGetEndPoints DimObj) FstDpt (car PntLst) NxtDpt (cadr PntLst) DimVal (MeGetObjLength CurObj) TxtIpt (MeGetObjMidPoint DimObj) DimScl (getvar "DIMSCALE") DimBl1 (MeTranslateDimBklName (getvar "DIMBLK1")) DimBl2 (MeTranslateDimBklName (getvar "DIMBLK2")) BlkLst '("_DOTSMALL" "_SMALL" "_NONE" "_OBLIQUE" "_INTEGRAL" "_ARCHTICK" ) DimExe (* DimScl (getvar "DIMEXE")) DimExo (* DimScl (getvar "DIMEXO")) DimDle (* DimScl (getvar "DIMDLE")) DimTxt (* DimScl (getvar "DIMTXT")) DimAsz (* DimScl (getvar "DIMASZ")) DimGap (+ (* DimScl (getvar "DIMGAP")) (/ DimTxt 2.0)) TxtAng (MeGetTangentAtPoint DimObj TxtIpt) TxtAng (if (and (> TxtAng (* pi 0.5)) (<= TxtAng (* pi 1.5))) (- TxtAng pi) TxtAng ) TxtIpt (polar TxtIpt (+ TxtAng (* pi 0.5)) DimGap) FstAng (MeGetTangentAtPoint DimObj FstDpt) NxtAng (MeGetTangentAtPoint DimObj NxtDpt) TmpBlk (vlax-invoke (vla-get-Blocks Me:AcD) 'Add '(0.0 0.0 0.0) "*U" ) TmpObj (vlax-invoke TmpBlk 'AddAttribute DimTxt acAttributeModePreset "" TxtIpt "DIMTXT" (rtos DimVal (getvar "DIMLUNIT") (getvar "DIMDEC")) ) ) (vla-put-Rotation TmpObj TxtAng) (vla-put-StyleName TmpObj (getvar "DIMTXSTY")) (vla-put-Alignment TmpObj acAlignmentMiddle) (vlax-put TmpObj 'TextAlignmentPoint TxtIpt) (vla-put-Color TmpObj (getvar "DIMCLRT")) (if (= (getvar "DIMSE1") 0) (progn (setq TmpObj (vlax-invoke TmpBlk 'AddLine (polar FstBpt (angle FstBpt FstDpt) DimExo) (polar FstDpt (angle FstBpt FstDpt) DimExe) ) ) (vla-put-Color TmpObj (getvar "DIMCLRE")) (vla-put-LineWeight TmpObj (getvar "DIMLWE")) ) ) (if (= (getvar "DIMSE2") 0) (progn (setq TmpObj (vlax-invoke TmpBlk 'AddLine (polar NxtBpt (angle NxtBpt NxtDpt) DimExo) (polar NxtDpt (angle NxtBpt NxtDpt) DimExe) ) ) (vla-put-Color TmpObj (getvar "DIMCLRE")) (vla-put-LineWeight TmpObj (getvar "DIMLWE")) ) ) (if (and (> DimDle 0.0) (vl-position DimBl1 BlkLst)) (progn (setq TmpObj (vlax-invoke TmpBlk 'AddLine FstDpt (polar FstDpt (+ FstAng pi) DimDle) ) ) (vla-put-Color TmpObj (getvar "DIMCLRD")) (vla-put-LineWeight TmpObj (getvar "DIMLWD")) ) ) (if (and (> DimDle 0.0) (vl-position DimBl2 BlkLst)) (progn (setq TmpObj (vlax-invoke TmpBlk 'AddLine NxtDpt (polar NxtDpt NxtAng DimDle) ) ) (vla-put-Color TmpObj (getvar "DIMCLRD")) (vla-put-LineWeight TmpObj (getvar "DIMLWD")) ) ) (if (vl-position DimBl1 BlkLst) (MeAddArrowObjects FstDpt FstAng DimAsz DimBl1 TmpBlk) (progn (MeShorten DimEnt DimAsz (car PntLst)) (setq PntLst (MeGetEndPoints DimObj) FstAng (angle (car PntLst) FstDpt) ) (MeAddArrowObjects FstDpt FstAng DimAsz DimBl1 TmpBlk) ) ) (if (vl-position DimBl2 BlkLst) (MeAddArrowObjects NxtDpt (+ NxtAng pi) DimAsz DimBl2 TmpBlk) (progn (MeShorten DimEnt DimAsz (cadr PntLst)) (setq PntLst (MeGetEndPoints DimObj) NxtAng (angle (cadr PntLst) NxtDpt) ) (MeAddArrowObjects NxtDpt NxtAng DimAsz DimBl2 TmpBlk) ) ) (vlax-invoke Me:AcD 'CopyObjects (list DimObj) TmpBlk) (vla-Delete DimObj) (vlax-invoke CurSpc 'InsertBlock '(0.0 0.0 0.0) (vla-get-Name TmpBlk) 1.0 1.0 1.0 0.0 ) ) ) ) ) (*Error* nil) ) ) (princ) ) ; ; == Subs ===================================================================== ; ; == Function MeAddArrowObjects ; Adds the requestet arrow objects to a block object. ; Argumens : ; Pnt = Start point ; Ang = Rotation angle ; Siz = Arrow size ; Nme = Dimension block name ; Obj = Add to block ; Return : ; > Null ; Notes: ; - Requires the global variable Me:AcD ; (defun MeAddArrowObjects (Pnt Ang Siz Nme Obj / ArwObj BlkNme CurSpc ObjLst PntLst TmpObj) (cond ((eq Nme "_NONE")) ((eq Nme "") (setq PntLst (MeCalcArrow Pnt Siz) ArwObj (vlax-invoke Obj 'AddSolid (car PntLst) (cadr PntLst) (caddr PntLst) (car PntLst) ) ) (vlax-invoke ArwObj 'Rotate Pnt (+ Ang pi)) (vla-put-Color ArwObj (getvar "DIMCLRD")) (vla-put-LineWeight ArwObj (getvar "DIMLWD")) ) (T (setq CurSpc (MeGetCurSpace) TmpObj (vlax-invoke CurSpc 'InsertBlock Pnt Nme Siz Siz Siz Ang) ObjLst (vlax-invoke TmpObj 'Explode) ) (vla-Delete TmpObj) (mapcar '(lambda (l) (vla-put-Color l (getvar "DIMCLRD"))) ObjLst) (mapcar '(lambda (l) (vla-put-LineWeight l (getvar "DIMLWD"))) ObjLst) (vlax-invoke Me:AcD 'CopyObjects ObjLst Obj) (mapcar 'vla-Delete ObjLst) ) ) (princ) ) ; ; == Function MeCalcArrow ; Returns the points of an arrow, calculated by size. ; Argumens : ; Pnt = Start point ; Siz = Arrow size ; Return : ; > Point list (Pt1 Pt1 Pt3) ; Notes: ; - None ; (defun MeCalcArrow (Pnt Siz / Angl_A Side_A) (setq Side_A (/ Siz 6.0) Angl_A (MeTan (/ Side_A Siz)) ) (list (polar Pnt Angl_A (/ Side_A (sin Angl_A))) (polar Pnt (- Angl_A) (/ Side_A (sin Angl_A))) Pnt ) ) ; ; == Function MeGetAssoc ; Get associative value from a list. ; Arguments : ; Key = Key to search ; Lst = Dotted pair list ; Return : ; > Value ; Notes: ; - None ; (defun MeGetAssoc (Key Lst) (cdr (assoc Key Lst)) ) ; ; == Function MeGetCurSpace ; Returns the current space object. ; Arguments : ; --- = ; Return : ; > Mspace or Pspace object ; Notes: ; - Requires the global variable Me:AcD ; (defun MeGetCurSpace () (if (or (= (getvar "TILEMODE") 1) (> (getvar "CVPORT") 1)) (vla-get-ModelSpace Me:AcD) (vla-get-PaperSpace Me:AcD) ) ) ; ; == Function MeGetEndPoints ; Returns the endpoints of an object. ; Arguments : ; Obj = Object ; Return : ; > Endpoints '((x y z) (x y z)) ; > Nil if invalid object ; Notes: ; - Proceeds *Polylines, Splines, Lines, Arcs, Circles and Ellipses ; (defun MeGetEndPoints (Obj) (list (vlax-curve-getStartPoint Obj) (vlax-curve-getEndPoint Obj) ) ) ; ; == Function MeGetObjLength ; Returns the length of an object. ; Arguments : ; Obj = Object ; Return : ; > Length of the object ; Notes: ; - Proceeds *Polylines, Splines, Lines, Arcs, Circles and Ellipses ; (defun MeGetObjLength (Obj) (vlax-curve-getDistAtParam Obj (vlax-curve-getEndParam Obj)) ) ; ; == Function MeGetObjMidPoint ; Returns the middle point of an object. ; Arguments : ; Obj = Object ; Return : ; > Length of the object ; Notes: ; - Proceeds *Polylines, Splines, Lines, Arcs, Circles and Ellipses ; (defun MeGetObjMidPoint (Obj / CurDst) (setq CurDst (vlax-curve-getDistAtParam Obj (vlax-curve-getEndParam Obj) ) ) (vlax-curve-getPointAtDist Obj (/ CurDst 2.0)) ) ; ; == Function MeGetTangentAtPoint ; Returns the tangent at the specified point. ; Arguments : ; Obj = Object ; Pnt = Point on object ; Return : ; > Tangent angle at point ; > False if point is not on object. ; Notes: ; - None ; (defun MeGetTangentAtPoint (Obj Pnt / CurPar PntLst TmpPnt) (setq PntLst (MeGetEndPoints Obj) CurPar (cond ((equal Pnt (car PntLst) 1E-6) (vlax-curve-getStartParam Obj) ) ((equal Pnt (cadr PntLst) 1E-6) (vlax-curve-getEndParam Obj) ) ((setq TmpPnt (vlax-curve-getClosestPointTo Obj Pnt)) (if (<= (distance TmpPnt Pnt) 1E-6) (vlax-curve-getParamAtPoint Obj TmpPnt) ) ) (T nil) ) ) (if CurPar (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv Obj CurPar) ) ) ) ; ; == Function MeSelPline ; Extended Polyline selection function. ; Arguments : ; Pmt = User prompt ; 3Dp = 3Dpolyline flag (3Dpolyline allowed) ; Cls = Close flag (pline must be closed) ; Return : ; > List with entity name and pickpoint '((Ename (x y z)) ; Notes: ; - Credits to James Allen ; - Returns nil when user press 'Return' or 'Space' ; (defun MeSelPline (Pmt 3Dp Cls / CurEnt EntFlg EntLst EntNme ExLoop) (while (not ExLoop) (initget " ") (setq CurEnt (entsel Pmt)) (cond ((= CurEnt "") (setq ExLoop T CurEnt nil)) (CurEnt (setq EntLst (entget (car CurEnt)) EntNme (MeGetAssoc 0 EntLst) EntFlg (MeGetAssoc 70 EntLst) CurEnt (list (car CurEnt) (trans (if (eq EntNme "POLYLINE") (vlax-curve-getClosestPointToProjection (car CurEnt) (trans (cadr CurEnt) 1 0) (trans (getvar "VIEWDIR") 1 0 1) ) (cond ((osnap (cadr CurEnt) "_nea")) ((cadr CurEnt))) ) 0 1 ) ) ) (cond ((or (not (member EntNme '("LWPOLYLINE" "POLYLINE" "SPLINE"))) (and (not 3Dp) (not (eq EntNme "SPLINE")) (= (logand EntFlg 8) 8)) (and (not (eq EntNme "SPLINE")) (= (logand EntFlg 16) 16)) (and (not (eq EntNme "SPLINE")) (= (logand EntFlg 64) 64)) ) (princ "selected entity is not a Polyline or Spline. ") ) ((and Cls (/= (logand EntFlg 1) 1)) (princ "selected Polyline or Spline is not closed. ") ) ((setq ExLoop T)) ) ) ((princ "1 selected, 0 found. ")) ) ) CurEnt ) ; ; == Function MeShorten ; Shortens an object at end point by distance. ; Arguments : ; Ent = Entity ; Dst = Shorten distance ; Pnt = Point on end ; Return : ; > Null ; Notes: ; - None ; (defun MeShorten (Ent Dst Pnt / ObjLen TmpPnt) (setq ObjLen (MeGetObjLength Ent)) (if (and (> Dst 0.0) (< Dst ObjLen)) (vl-cmdf "_.LENGTHEN" "_TOT" (- ObjLen Dst) (list Ent Pnt) "") ) (princ) ) ; ; == Function MeTan ; Returns tangens of an angle. ; Argumens : ; Ang = Angle (radians) ; Return : ; > Tangens ; Notes: ; - None ; (defun MeTan (Ang) (/ (sin Ang) (cos Ang))) ; ; == Function MeTranslateDimBklName ; Returns the arrow block name by language of the current AutoCAD version. ; Arguments : ; Nme = Arrow name ; Return : ; > Arrow block name ; Notes: ; - Autodesk has no f*@#%*g concept for DIMBLK(1/2)!!! ; That's the reason why we need this translation table. ; - In case you wanna add a new language support, you've to check each ; value by setting DIMBLK first by English key (eg. _DOT). Then call ; DIMBLK again and add the default value as the first atom in the ; list (upper case). ; (defun MeTranslateDimBklName (Nme / AcdLng RegPth TrlLst) (setq RegPth (strcat "HKEY_LOCAL_MACHINE\\" (vlax-product-key)) AcdLng (vl-registry-read RegPth "Language") TrlLst (cond ((eq AcdLng "Deutsch") '(("" . "") ("PUNKT" . "_DOT") ("PUNKTKLEIN" . "_DOTSMALL") ("PUNKTLEER" . "_DOTBLANK") ("URSPRUNG" . "_ORIGIN") ("URSPRUNG2" . "_ORIGIN2") ("GEÖFFNET" . "_OPEN") ("GEÖFFNET90" . "_OPEN90") ("GEÖFFNET30" . "_OPEN30") ("GESCHLOSSEN" . "_CLOSED") ("KLEIN" . "_SMALL") ("KEIN" . "_NONE") ("SCHRÄG" . "_OBLIQUE") ("QUADRATGEFÜLLT" . "_BOXFILLED") ("QUADRATLEER" . "_BOXBLANK") ("GESCHLOSSENLEER" . "_CLOSEDBLANK") ("UMGEKDREIECKGEFÜLLT" . "_DATUMFILLED") ("UMGEKDREIECKLEER" . "_DATUMBLANK") ("INTEGRAL" . "_INTEGRAL") ("ARCHITEKTONISCH" . "_ARCHTICK") ) ) ((eq AcdLng "Français") '(("" . "") ("POINT" . "_DOT") ("PETITPOINT" . "_DOTSMALL") ("POINTVIDE" . "_DOTBLANK") ("ORIGINE" . "_ORIGIN") ("ORIGINE2" . "_ORIGIN2") ("OUVERTE" . "_OPEN") ("ANGLEDROIT" . "_OPEN90") ("ANGLE30" . "_OPEN30") ("FERMÉ" . "_CLOSED") ("PETIT" . "_SMALL") ("AUCUNE" . "_NONE") ("OBLIQUE" . "_OBLIQUE") ("CARREPLEIN" . "_BOXFILLED") ("CARREVIDE" . "_BOXBLANK") ("FERMÉEVIDE" . "_CLOSEDBLANK") ("TRIANGLEPLEININVERSE" . "_DATUMFILLED") ("TRIANGLEVIDEINVERSE" . "_DATUMBLANK") ("INTEGRALE" . "_INTEGRAL") ("MARQUEARCH" . "_ARCHTICK") ) ) ((eq AcdLng "English") '(("" . "") ("DOT" . "_DOT") ("DOTSMALL" . "_DOTSMALL") ("DOTBLANK" . "_DOTBLANK") ("ORIGIN" . "_ORIGIN") ("ORIGIN2" . "_ORIGIN2") ("OPEN" . "_OPEN") ("OPEN90" . "_OPEN90") ("OPEN30" . "_OPEN30") ("CLOSED" . "_CLOSED") ("SMALL" . "_SMALL") ("NONE" . "_NONE") ("OBLIQUE" . "_OBLIQUE") ("BOXFILLED" . "_BOXFILLED") ("BOXBLANK" . "_BOXBLANK") ("CLOSEDBLANK" . "_CLOSEDBLANK") ("DATUMFILLED" . "_DATUMFILLED") ("DATUMBLANK" . "_DATUMBLANK") ("INTEGRAL" . "_INTEGRAL") ("ARCHTICK" . "_ARCHTICK") ) ) (T (alert (strcat "Your AutoCad language is not supported." "\nAdd the desired translation table in function: " "\nMeTranslateDimBklName" ) ) (exit) ) ) ) (cond ((MeGetAssoc (strcase Nme) TrlLst)) (Nme)) ) ; ; == Copyright - Note (May be never deleted) ================================== ; (princ "\n-------------------------------------------") (princ "\n ©2006 MENZI ENGINEERING GmbH, Switzerland ") (princ "\n-------------------------------------------") (princ "\nType DimPoly in the command line to start the programm...") (princ) ; ; == End DimPoly ============================================================== <<
| ||
Tác giả: tien2005 Bài viết gốc: 387077 Tên lệnh: gnl |
Nhờ Viết Lisp Lấy Nội Dung Linetype Gán Vào Block Att
code nhanh cho Bạn. Lệnh là GNL, chọn và update lien tục các tên của linetype vào block, khi muốn kết thúc thì enter (defun c:GNL (/ e b lay nam);get name linetype (while (and (princ "\nChon Line, PLINE") (setq e (ssget '((0 . "*LINE")))) (princ "\nChon block") (setq b (ssget '((0 . "insert") (66 . 1)))) ) (setq lay (cdr (assoc 8 (setq e (entget (ssname e 0)))))) (if (not (setq nam (cdr (assoc 6 e)))) ... code nhanh cho Bạn. Lệnh là GNL, chọn và update lien tục các tên của linetype vào block, khi muốn kết thúc thì enter (defun c:GNL (/ e b lay nam);get name linetype (while (and (princ "\nChon Line, PLINE") (setq e (ssget '((0 . "*LINE")))) (princ "\nChon block") (setq b (ssget '((0 . "insert") (66 . 1)))) ) (setq lay (cdr (assoc 8 (setq e (entget (ssname e 0)))))) (if (not (setq nam (cdr (assoc 6 e)))) (setq nam (cdr (assoc 6 (tblsearch "LAYER" lay)))) ) (mapcar '(lambda (x) (mapcar '(lambda (Att) (if (= (strcase (vla-get-TagString att)) "2T2K") (vla-put-textstring att nam) ) ) (vlax-invoke (vlax-ename->vla-object x) 'GetAttributes) ) ) (vl-remove-if 'listp (mapcar 'cadr (ssnamex b))) ) ) (princ) ) <<
| ||
Tác giả: Tr.CongSon Bài viết gốc: 387116 Tên lệnh: gtd |
Lisp Ghi Chú Tọa Độ Từng Điểm Khi Pick
| ||
Tác giả: hiepttr Bài viết gốc: 387400 Tên lệnh: dong5 |
[Yêu Cầu] Cắm Cọc Gpmb Trên 2 Mép Ngoài Taluy Trên Bình Đồ
Rảnh >>> lại dâng sớ đây :D :D :D Với BD bạn gửi lên: - Chuyển Elevation của MEPTLP về 0 - Match tất cả line text tên cọc về layer "Texttencoc" - EX để kéo dài: tim, MEPTLP, MEPTLT vượt qua ENTCOC đầu và cuối - Copy/ Paste block cocmoc (define block)
>>> Ap lisp >>> DONG5 :D (defun c:DONG5 ( /... Rảnh >>> lại dâng sớ đây :D :D :D Với BD bạn gửi lên: - Chuyển Elevation của MEPTLP về 0 - Match tất cả line text tên cọc về layer "Texttencoc" - EX để kéo dài: tim, MEPTLP, MEPTLT vượt qua ENTCOC đầu và cuối - Copy/ Paste block cocmoc (define block)
>>> Ap lisp >>> DONG5 :D (defun c:DONG5 ( / lst_va old ss_coc ss lst_name tim tlt tlp lst_ten_coc lst_coc mid_pnt ten find ob trai phai mid_pt fn pw) ; (vl-load-com) ; (setq lst_va '("osmode" "cmdecho")) (setq old (mapcar 'getvar lst_va)) (mapcar 'setvar lst_va '(0 0)) (prompt "\nQuet chon BD de lay ten coc !") (setq ss_coc (ssget '((0 . "LINE") (8 . "Texttencoc")))) (if ss_coc (progn (princ "\n Chon MEPTLT, MEPTLP, tim tuyen !") (setq ss (ssget '((8 . "MEPTLT,MEPTLP,TUYEN")))) (setq lst_name (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))) (setq tim (car (vl-remove-if-not '(lambda(x) (= "TUYEN" (cdr (assoc 8 (entget x))))) lst_name)) tlt (vlax-ename->vla-object (car (vl-remove-if-not '(lambda(x) (= "MEPTLT" (cdr (assoc 8 (entget x))))) lst_name))) tlp (vlax-ename->vla-object (car (vl-remove-if-not '(lambda(x) (= "MEPTLP" (cdr (assoc 8 (entget x))))) lst_name)))) (command ".zoom" "o" ss_coc "") (setq lst_ten_coc (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss_coc))) lst_ten_coc (mapcar '(lambda (x) (list x (get_text_coc x 4.5 13))) lst_ten_coc)) (setq lst_coc (ssget "_F" (lst_point_fence tim) '((0 . "LINE") (8 . "ENTCOC")))) (setq lst_coc (vl-remove-if 'listp (mapcar 'cadr (ssnamex lst_coc)))) (setq lst_coc (mapcar '(lambda (x) (setq mid_pnt (mid (vlax-curve-getStartpoint x) (vlax-curve-getEndpoint x)) i 0) (while (< i (length lst_ten_coc)) (if (setq find (find_piles (car (setq ten (nth i lst_ten_coc))) mid_pnt 50)) (setq i (length lst_ten_coc)) (setq i (1+ i))) ) ;while (if find (list x mid_pnt (last ten)) (list x mid_pnt "No name")) ) lst_coc) ) (setq fn (getfiled "Chon file de xuat ket qua" "" "csv" 1)) (setq pw (open fn "w")) (write-line "STT,Ten coc,Trai,,,Phai" pw) (write-line ",,K/cach den tim,Y,X,K/cach den tim,Y,X" pw) (foreach c lst_coc (setq mid_pt (cadr c) trai (car (vl-sort (H:inter-group3 (setq ob (vlax-ename->vla-object (car c))) tlt) '(lambda (x y) (< (distance x mid_pt) (distance y mid_pt))))) phai (car (vl-sort (H:inter-group3 ob tlp) '(lambda (x y) (< (distance x mid_pt) (distance y mid_pt))))) ) (command "_.insert" "cocmoc" trai 1 "" "") (command "_.insert" "cocmoc" phai 1 "" "") (command ".DIMALIGNED" mid_pt trai (mid trai mid_pt)) (command ".DIMALIGNED" mid_pt phai (mid phai mid_pt)) (write-line (strcat "," (last c) "," (rtos (distance mid_pt trai) 2 3) "," (rtos (cadr trai) 2 3) "," (rtos (car trai) 2 3) "," (rtos (distance mid_pt phai) 2 3) "," (rtos (cadr phai) 2 3) "," (rtos (car phai) 2 3)) pw) ) (close pw) ) (princ "\nKhong chon duoc line ten coc !") ) (mapcar 'setvar lst_va old) (princ) ) ;;;============================================================== (defun mid (p1 p2) (mapcar '* (mapcar '+ p1 p2) '(0.5 0.5 0.5))) ;;;;============================================================== (defun H:inter-group3(ob1 ob2 / modul res) (cond ((null (setq modul (vlax-invoke ob1 'intersectwith ob2 acExtendThisEntity))) nil) ((= (length modul) 3) (list modul)) (t (while (> (length modul) 0) (setq res (cons (list (car modul) (cadr modul) (caddr modul)) res) modul (cdddr modul) ) ) (reverse res) ) ) ) ;;;;=================================================================== (defun lst_point_fence (pl / info lst_bug lst_point i arc_len fence) (setq info (entget pl '("*")) lst_bug (vl-remove-if-not '(lambda(x) (= 42 (car x))) info) lst_point (vl-remove-if-not '(lambda(x) (= 10 (car x))) info) i 0) (while (< i (length lst_bug)) (cond ((/= 0 (cdr (nth i lst_bug))) (setq fence (cons (cdr (nth i lst_point)) fence) arc_len (abs (- (setq start (vlax-curve-getDistAtPoint pl (cdr(nth i lst_point)))) (vlax-curve-getDistAtPoint pl (cdr (nth (setq i (1+ i)) lst_point))))) ) (repeat 3 (setq fence (cons (vlax-curve-getPointAtDist pl (setq start (+ start (/ arc_len 4)))) fence)) ) ) (t (setq fence (cons (cdr (nth i lst_point)) fence) i (1+ i)) ) ) ) (reverse fence) ) ;;;=============================================================== (defun get_text_coc (ent h w / info dau_line cuoi_line pt1 pt2 pt3 pt4 ss) ;ham lay text ten coc thuoc layer "Texttencoc" khi co line vach chi gan text ;h, w: chieu cao, rong cuar window vung chon (setq dau_line (cdr (assoc 10 (setq info (entget ent)))) cuoi_line (cdr (assoc 11 info)) pt1 (polar cuoi_line (+ (setq ang_line (angle dau_line cuoi_line)) (* 0.5 pi)) (* 0.5 w)) pt2 (polar pt1 ang_line h) pt3 (polar pt2 (- ang_line (* 0.5 pi)) w) pt4 (polar cuoi_line (- ang_line (* 0.5 pi)) (* 0.5 w)) ) (setq ss (ssget "_WP" (list pt1 pt2 pt3 pt4) '((0 . "TEXT") (8 . "Texttencoc")))) (if ss (cdr (assoc 1 (entget (ssname ss 0)))) "No_name") ) ;;;=================================================================== (defun find_piles (line_piles_name pnt_piles lim / st end) ;Tu line ten coc, tim thay point tim coc trong gioi han khoang cach (dien ten coc) (setq st (vlax-curve-getStartpoint line_piles_name) end (vlax-curve-getEndpoint line_piles_name)) (if (and (<= (distance end pnt_piles) lim) (equal (angle end st) (angle end pnt_piles) 1e-3)) T) ) p/s: Vì mình trình còn non, code theo kiểu luyện bài cũ >>> Lisp này chủ yếu để chạy trên bản vẽ này, trên bản khác thì có thể phát sinh lỗi ngay nếu không hiệu chỉnh một vài thứ :D <<
| ||
Tác giả: hiepttr Bài viết gốc: 387716 Tên lệnh: dong5 |
[Yêu Cầu] Cắm Cọc Gpmb Trên 2 Mép Ngoài Taluy Trên Bình Đồ
Lỗi xảy ra vẫn vì 2 lý do đó :D - Lỗi No_name: ".. từ line có layer "texttencoc" tìm không ra text chứa tên cọc " : Ở đây, lisp tìm có quy luật: Tìm trong ô chọn hình chữ nhật phía End point của line Texttencoc; Ô chọn có kích thước xác định tại ......(get_text_coc x... Lỗi xảy ra vẫn vì 2 lý do đó :D - Lỗi No_name: ".. từ line có layer "texttencoc" tìm không ra text chứa tên cọc " : Ở đây, lisp tìm có quy luật: Tìm trong ô chọn hình chữ nhật phía End point của line Texttencoc; Ô chọn có kích thước xác định tại ......(get_text_coc x 6 13)... (trong code mình post ở dưới _ trước đó là ...(get_text_coc x 4.5 13)..) >>>> Các line không đúng quy tắc (tức đưa Start point về phía text tên cọc) sẽ bị lỗi do lisp chỉ tìm phía end point >>>> Phiền bạn đổi chiều các line đó trước khi chạy lisp. Lý do: Mình có thể sửa code để nhận tên cả 2 đầu nhưng dễ gây ra lỗi nhận nhầm tên cọc. - Lỗi No name: Là do: 1. Texttencoc lệch, VD: P50 ... >>>> Fix: Đã sửa để lisp chấp nhận một khoảng lệch ~ 0.1 m ứng với khoảng cách điền cọc cách tim tuyến ~15m. >> Khoảng lệch lớn hơn bạn phải chỉnh lại. 2. Trong code cũ, mình chỉ tìm cọc tương thích với tên cọc theo 1 chiều (từ end point đến Start point của line Texttencoc) >>>> Đã fix tìm theo 2 chiều (Dư nhưng chứng minh được điều mình nói :D ) (defun c:DONG5 ( / lst_va old ss_coc ss lst_name tim tlt tlp lst_ten_coc lst_coc mid_pnt ten find ob trai phai mid_pt fn pw) ; (vl-load-com) ; (setq lst_va '("osmode" "cmdecho")) (setq old (mapcar 'getvar lst_va)) (mapcar 'setvar lst_va '(0 0)) (prompt "\nQuet chon BD de lay ten coc !") (setq ss_coc (ssget '((0 . "LINE") (8 . "Texttencoc")))) (if ss_coc (progn (princ "\n Chon MEPTLT, MEPTLP, tim tuyen !") (setq ss (ssget '((8 . "MEPTLT,MEPTLP,TUYEN")))) (setq lst_name (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))) (setq tim (car (vl-remove-if-not '(lambda(x) (= "TUYEN" (cdr (assoc 8 (entget x))))) lst_name)) tlt (vlax-ename->vla-object (car (vl-remove-if-not '(lambda(x) (= "MEPTLT" (cdr (assoc 8 (entget x))))) lst_name))) tlp (vlax-ename->vla-object (car (vl-remove-if-not '(lambda(x) (= "MEPTLP" (cdr (assoc 8 (entget x))))) lst_name)))) (command ".zoom" "o" ss_coc "") (setq lst_ten_coc (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss_coc))) lst_ten_coc (mapcar '(lambda (x) (list x (get_text_coc x 6 13))) lst_ten_coc)) (setq lst_coc (ssget "_F" (lst_point_fence tim) '((0 . "LINE") (8 . "ENTCOC")))) (setq lst_coc (vl-remove-if 'listp (mapcar 'cadr (ssnamex lst_coc)))) (setq lst_coc (mapcar '(lambda (x) (setq mid_pnt (mid (vlax-curve-getStartpoint x) (vlax-curve-getEndpoint x)) i 0) (while (< i (length lst_ten_coc)) (if (setq find (find_piles (car (setq ten (nth i lst_ten_coc))) mid_pnt 35)) (setq i (length lst_ten_coc)) (setq i (1+ i))) ) ;while (if find (list x mid_pnt (last ten)) (list x mid_pnt "No name")) ) lst_coc) ) (setq fn (getfiled "Chon file de xuat ket qua" "" "csv" 1)) (setq pw (open fn "w")) (write-line "STT,Ten coc,Trai,,,Phai" pw) (write-line ",,K/cach den tim,Y,X,K/cach den tim,Y,X" pw) (foreach c lst_coc (setq mid_pt (cadr c) trai (car (vl-sort (H:inter-group3 (setq ob (vlax-ename->vla-object (car c))) tlt) '(lambda (x y) (< (distance x mid_pt) (distance y mid_pt))))) phai (car (vl-sort (H:inter-group3 ob tlp) '(lambda (x y) (< (distance x mid_pt) (distance y mid_pt))))) ) (command "_.insert" "cocmoc" trai 1 "" "") (command "_.insert" "cocmoc" phai 1 "" "") (command ".DIMALIGNED" mid_pt trai (mid trai mid_pt)) (command ".DIMALIGNED" mid_pt phai (mid phai mid_pt)) (write-line (strcat "," (last c) "," (rtos (distance mid_pt trai) 2 3) "," (rtos (cadr trai) 2 3) "," (rtos (car trai) 2 3) "," (rtos (distance mid_pt phai) 2 3) "," (rtos (cadr phai) 2 3) "," (rtos (car phai) 2 3)) pw) ) (close pw) ) (princ "\nKhong chon duoc line ten coc !") ) (mapcar 'setvar lst_va old) (princ) ) ;;;============================================================== (defun mid (p1 p2) (mapcar '* (mapcar '+ p1 p2) '(0.5 0.5 0.5))) ;;;;============================================================== (defun H:inter-group3(ob1 ob2 / modul res) (cond ((null (setq modul (vlax-invoke ob1 'intersectwith ob2 acExtendThisEntity))) nil) ((= (length modul) 3) (list modul)) (t (while (> (length modul) 0) (setq res (cons (list (car modul) (cadr modul) (caddr modul)) res) modul (cdddr modul) ) ) (reverse res) ) ) ) ;;;;=================================================================== (defun lst_point_fence (pl / info lst_bug lst_point i arc_len fence) (setq info (entget pl '("*")) lst_bug (vl-remove-if-not '(lambda(x) (= 42 (car x))) info) lst_point (vl-remove-if-not '(lambda(x) (= 10 (car x))) info) i 0) (while (< i (length lst_bug)) (cond ((/= 0 (cdr (nth i lst_bug))) (setq fence (cons (cdr (nth i lst_point)) fence) arc_len (abs (- (setq start (vlax-curve-getDistAtPoint pl (cdr(nth i lst_point)))) (vlax-curve-getDistAtPoint pl (cdr (nth (setq i (1+ i)) lst_point))))) ) (repeat 3 (setq fence (cons (vlax-curve-getPointAtDist pl (setq start (+ start (/ arc_len 4)))) fence)) ) ) (t (setq fence (cons (cdr (nth i lst_point)) fence) i (1+ i)) ) ) ) (reverse fence) ) ;;;=============================================================== (defun get_text_coc (ent h w / info dau_line cuoi_line pt1 pt2 pt3 pt4 ss) ;ham lay text ten coc thuoc layer "Texttencoc" khi co line vach chi gan text ;h, w: chieu cao, rong cuar window vung chon (setq dau_line (cdr (assoc 10 (setq info (entget ent)))) cuoi_line (cdr (assoc 11 info)) pt1 (polar cuoi_line (+ (setq ang_line (angle dau_line cuoi_line)) (* 0.5 pi)) (* 0.5 w)) pt2 (polar pt1 ang_line h) pt3 (polar pt2 (- ang_line (* 0.5 pi)) w) pt4 (polar cuoi_line (- ang_line (* 0.5 pi)) (* 0.5 w)) ) (setq ss (ssget "_WP" (list pt1 pt2 pt3 pt4) '((0 . "TEXT") (8 . "Texttencoc")))) (if ss (cdr (assoc 1 (entget (ssname ss 0)))) "No_name") ) ;;;=================================================================== (defun find_piles (line_piles_name pnt_piles lim / st end) ;Tu line ten coc, tim thay point tim coc trong gioi han khoang cach (dien ten coc) (setq st (vlax-curve-getStartpoint line_piles_name) end (vlax-curve-getEndpoint line_piles_name)) (if (and (<= (distance end pnt_piles) lim) (or (equal (angle end st) (angle end pnt_piles) 7e-3) (equal pi (abs (- (angle end st) (angle end pnt_piles))) 7e-3))) T) ) <<
| ||
Tác giả: thanhduan2407 Bài viết gốc: 369183 Tên lệnh: |
Hỏi về Lisp (thuật toán, ý tưởng, coding,...)
Nhờ các bác chỉ giáo sửa em 1 chút để hoàn thiện việc tăng tốc độ được không ạ? Vì không chỉ bài toán nhỏ này mà em có kế hoạch nâng cấp hết lại các chương trình em viết. Vì đa số em hay dùng Append, chương trình chạy rất chậm nên đôi khi em thất vọng. Em cảm ơn các bác nhiều. P/s: Em vọc được cả 2 cách bác @Phamthanhbinh và bác @Doan Van Ha rồi >> Nhờ các bác chỉ giáo sửa em 1 chút để hoàn thiện việc tăng tốc độ được không ạ? Vì không chỉ bài toán nhỏ này mà em có kế hoạch nâng cấp hết lại các chương trình em viết. Vì đa số em hay dùng Append, chương trình chạy rất chậm nên đôi khi em thất vọng. Em cảm ơn các bác nhiều. P/s: Em vọc được cả 2 cách bác @Phamthanhbinh và bác @Doan Van Ha rồi (vl-load-com) (defun replace_str (str) (setq rs (acet-str-replace "," " " str) rs (acet-str-replace " " " " rs) ) (split_space rs) ) (defun split_space (str) (vl-remove-if '(lambda (x) (= x "")) (acet-str-to-list " " str) ) ) (defun c: (/ DATA F I L1 LINE LST LST1 LST2 LST3 LST4 TEN) (if (setq ten (getfiled "Select File" (getvar "dwgprefix") "txt" 8)) (progn (setq f (open (findfile ten) "r")) (setq lst (list)) (while (setq Line (read-line f)) (wcmatch Line (strcat "*" (chr 9) "*,*" (chr 32) "*,*" (chr 44) "*") ) (progn (setq data (replace_str Line)) (if (/= (length data) 0) (progn (setq lst (cons data lst)) ) ) ) ) (setq i 0) (while (setq l1 (nth i (reverse lst))) (if (not (equal (car l1) "COC")) (setq lst1 (append lst1 (list l1))) (progn (setq lst2 (append lst2 (list lst1)) lst1 (list l1) ) ) ) (setq i (1+ i)) ) (setq lst3 (cdr (append lst2 (list lst1)))) (setq lst4 (mapcar '(lambda (x) (cons (cadr (car x)) (cdr x) ) ) lst3 ) ) ) ) (princ lst4) (princ) ) File Test: http://www.cadviet.com/upfiles/5/36665_test_2.txt <<
| ||
Tác giả: hiepttr Bài viết gốc: 388237 Tên lệnh: dong6 |
[Yêu Cầu] Cắm Cọc Gpmb Trên 2 Mép Ngoài Taluy Trên Bình Đồ
Update DONG5 >>> DONG6: - Thay command bằng entmake - Fix lỗi hàm lst_point_fence cho trường hợp có điểm trùng (như trên) - Duyệt list bằng foreach ... thay cho while+nth ... - Thêm cột K/c lẻ .... p/s: @ndtnv: Nếu mà thay WP bằng F hay CP thì xác suất chọn được tên cọc cao hơn nhưng phải xữ lý khá nhiều mà chưa chắc đã "toàn vẹn" >>> Thôi... >> Update DONG5 >>> DONG6: - Thay command bằng entmake - Fix lỗi hàm lst_point_fence cho trường hợp có điểm trùng (như trên) - Duyệt list bằng foreach ... thay cho while+nth ... - Thêm cột K/c lẻ .... p/s: @ndtnv: Nếu mà thay WP bằng F hay CP thì xác suất chọn được tên cọc cao hơn nhưng phải xữ lý khá nhiều mà chưa chắc đã "toàn vẹn" >>> Thôi thì bác cho mình bảo lưu vậy :D :D :D (defun c:DONG6 ( / lst_va old ss_coc ss lst_name tim tlt tlp lst_ten_coc lst_coc mid_pnt ten ob trai phai mid_pt fn pw c last_piles) ; (vl-load-com) ; (setq lst_va '("osmode" "cmdecho")) (setq old (mapcar 'getvar lst_va)) (mapcar 'setvar lst_va '(0 0)) (prompt "\nQuet chon BD de lay ten coc !") (setq ss_coc (ssget '((0 . "LINE") (8 . "Texttencoc")))) (if ss_coc (progn (princ "\n Chon MEPTLT, MEPTLP, tim tuyen !") (setq ss (ssget '((8 . "MEPTLT,MEPTLP,TUYEN")))) (setq lst_name (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))) (setq tim (car (vl-remove-if-not '(lambda(x) (= "TUYEN" (cdr (assoc 8 (entget x))))) lst_name)) tlt (vlax-ename->vla-object (car (vl-remove-if-not '(lambda(x) (= "MEPTLT" (cdr (assoc 8 (entget x))))) lst_name))) tlp (vlax-ename->vla-object (car (vl-remove-if-not '(lambda(x) (= "MEPTLP" (cdr (assoc 8 (entget x))))) lst_name)))) (command ".zoom" "o" ss_coc "") (setq lst_ten_coc (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss_coc))) lst_ten_coc (mapcar '(lambda (x) (list x (get_text_coc x 6 13))) lst_ten_coc)) (setq lst_coc (ssget "_F" (lst_point_fence tim) '((0 . "LINE") (8 . "ENTCOC")))) (setq lst_coc (vl-remove-if 'listp (mapcar 'cadr (ssnamex lst_coc)))) (setq lst_coc (mapcar '(lambda (x) (setq mid_pnt (mid (vlax-curve-getStartpoint x) (vlax-curve-getEndpoint x)) ten "No name") (foreach elem lst_ten_coc (if (find_piles (car elem) mid_pnt 50) (setq ten (last elem))) ) ;for (list x mid_pnt ten) ) lst_coc) ) (setq fn (getfiled "Chon file de xuat ket qua" "" "csv" 1)) (setq pw (open fn "w")) (write-line "STT,Ten coc,K/c le,Trai,,,Phai" pw) (write-line ",,,K/cach den tim,Y,X,K/cach den tim,Y,X" pw) ;;xong tieu de (setq c (car lst_coc)) (setq mid_pt (cadr c) last_piles mid_pt trai (car (vl-sort (H:inter-group3 (setq ob (vlax-ename->vla-object (car c))) tlt) '(lambda (x y) (< (distance x mid_pt) (distance y mid_pt))))) phai (car (vl-sort (H:inter-group3 ob tlp) '(lambda (x y) (< (distance x mid_pt) (distance y mid_pt))))) ) (Ket_insert "cocmoc" trai 1 0) (Ket_insert "cocmoc" phai 1 0) (make_dim_al mid_pt trai) (make_dim_al mid_pt phai) (write-line (strcat "," (last c) "," "," (rtos (distance mid_pt trai) 2 3) "," (rtos (cadr trai) 2 3) "," (rtos (car trai) 2 3) "," (rtos (distance mid_pt phai) 2 3) "," (rtos (cadr phai) 2 3) "," (rtos (car phai) 2 3)) pw) ;xong dong 1 (foreach c (cdr lst_coc) (setq mid_pt (cadr c) trai (car (vl-sort (H:inter-group3 (setq ob (vlax-ename->vla-object (car c))) tlt) '(lambda (x y) (< (distance x mid_pt) (distance y mid_pt))))) phai (car (vl-sort (H:inter-group3 ob tlp) '(lambda (x y) (< (distance x mid_pt) (distance y mid_pt))))) ) (Ket_insert "cocmoc" trai 1 0) (Ket_insert "cocmoc" phai 1 0) (make_dim_al mid_pt trai) (make_dim_al mid_pt phai) (write-line (strcat "," (last c)"," (rtos (distance mid_pt last_piles) 2 3) "," (rtos (distance mid_pt trai) 2 3) "," (rtos (cadr trai) 2 3) "," (rtos (car trai) 2 3) "," (rtos (distance mid_pt phai) 2 3) "," (rtos (cadr phai) 2 3) "," (rtos (car phai) 2 3)) pw) (setq last_piles mid_pt) ) (close pw) ) (princ "\nKhong chon duoc line ten coc !") ) (mapcar 'setvar lst_va old) (princ) ) ;;;============================================================== (defun mid (p1 p2) (mapcar '* (mapcar '+ p1 p2) '(0.5 0.5 0.5))) ;;;;============================================================== (defun H:inter-group3(ob1 ob2 / modul res) (cond ((null (setq modul (vlax-invoke ob1 'intersectwith ob2 acExtendThisEntity))) nil) ((= (length modul) 3) (list modul)) (t (while (> (length modul) 0) (setq res (cons (list (car modul) (cadr modul) (caddr modul)) res) modul (cdddr modul) ) ) (reverse res) ) ) ) ;;;;=================================================================== (defun lst_point_fence (pl / info lst_bug lst_point i arc_len fence pre fence1) (setq info (entget pl '("*")) lst_bug (vl-remove-if-not '(lambda(x) (= 42 (car x))) info) lst_point (vl-remove-if-not '(lambda(x) (= 10 (car x))) info) i 0) (while (< i (length lst_bug)) (cond ((/= 0 (cdr (nth i lst_bug))) (setq fence (cons (cdr (nth i lst_point)) fence) arc_len (abs (- (setq start (vlax-curve-getDistAtPoint pl (cdr(nth i lst_point)))) (vlax-curve-getDistAtPoint pl (cdr (nth (setq i (1+ i)) lst_point))))) ) (repeat 3 (setq fence (cons (vlax-curve-getPointAtDist pl (setq start (+ start (/ arc_len 4)))) fence)) ) ) (t (setq fence (cons (cdr (nth i lst_point)) fence) i (1+ i)) ) ) ) (setq pre (car fence) fence1 (list pre)) (foreach p (cdr fence) (cond ((not (equal 0 (distance p pre) 1e-3)) (setq fence1 (cons p fence1) pre p)) ) ) fence1 ) ;;;=============================================================== (defun get_text_coc (ent h w / info dau_line cuoi_line pt1 pt2 pt3 pt4 ss) ;ham lay text ten coc thuoc layer "Texttencoc" khi co line vach chi gan text ;h, w: chieu cao, rong cuar window vung chon (setq dau_line (cdr (assoc 10 (setq info (entget ent)))) cuoi_line (cdr (assoc 11 info)) pt1 (polar cuoi_line (+ (setq ang_line (angle dau_line cuoi_line)) (* 0.5 pi)) (* 0.5 w)) pt2 (polar pt1 ang_line h) pt3 (polar pt2 (- ang_line (* 0.5 pi)) w) pt4 (polar cuoi_line (- ang_line (* 0.5 pi)) (* 0.5 w)) ) (setq ss (ssget "_WP" (list pt1 pt2 pt3 pt4) '((0 . "TEXT") (8 . "Texttencoc")))) (if ss (cdr (assoc 1 (entget (ssname ss 0)))) "No_name") ) ;;;=================================================================== (defun find_piles (line_piles_name pnt_piles lim / st end) ;Tu line ten coc, tim thay point tim coc trong gioi han khoang cach (dien ten coc) (setq st (vlax-curve-getStartpoint line_piles_name) end (vlax-curve-getEndpoint line_piles_name)) (if (and (<= (distance end pnt_piles) lim) (or (equal (angle end st) (angle end pnt_piles) 7e-3) (equal pi (abs (- (angle end st) (angle end pnt_piles))) 7e-3))) T) ) ;;;=========================================================== (defun make_dim_al(pnt1 pnt2 / ) (setq lst (list '(0 . "DIMENSION") '(100 . "AcDbEntity") '(8 . "dim") '(100 . "AcDbDimension") (cons 10 pnt2) (cons 11 (mid pnt1 pnt2)) '(70 . 33) '(1 . "") '(100 . "AcDbAlignedDimension") (cons 13 pnt1) (cons 14 pnt2) )) (entmake lst) ) ;============================================================= (defun Ket_insert (bname p s r) ;Insert simple static block ;Ten point scale rotation (entmake (list '(0 . "INSERT") (cons 2 bname) (cons 10 p) (cons 41 s)(cons 42 s)(cons 43 s) (cons 50 r) ) ; list ) ) ;======================= <<
| ||
Tác giả: hiepttr Bài viết gốc: 388281 Tên lệnh: scd |
Nhờ Viết Lisp Đánh Số Cột Đèn Có Phân Pha!
Rảnh nên làm thầy bói phát xem sao :D :D :D ;;;lisp danh so cot den (defun c:SCD( / st str p chu str1) (setq #tu (NGT #tu "1" getstring "Tu chieu sang so") #lo (NGT #lo "1" getstring "Lo so") #st (NGT #st 1 getint "STT cot dau tien") st (1- #st) str (strcat "TCS" #tu "/L" #lo "/") ) (while (setq p (getpoint "\nPick: ")) (setq chu (nth (rem st 3) '("A" "B" "C")) st (1+ st) str1 (strcat str (itoa st) chu) ) (MakeText p str1 2.5... Rảnh nên làm thầy bói phát xem sao :D :D :D ;;;lisp danh so cot den (defun c:SCD( / st str p chu str1) (setq #tu (NGT #tu "1" getstring "Tu chieu sang so") #lo (NGT #lo "1" getstring "Lo so") #st (NGT #st 1 getint "STT cot dau tien") st (1- #st) str (strcat "TCS" #tu "/L" #lo "/") ) (while (setq p (getpoint "\nPick: ")) (setq chu (nth (rem st 3) '("A" "B" "C")) st (1+ st) str1 (strcat str (itoa st) chu) ) (MakeText p str1 2.5 0 "L" nil nil 2 nil) ) ) ;;;================================================== (defun NGT(a mac_dinh ham str_nhac / modul) ;;Nhan gia tri (or a (setq a mac_dinh)) (setq a (cond ((= "" (setq modul (ham (strcat "\n" str_nhac " <" (vl-princ-to-string a) ">: ")))) a) (modul) (a) ) ) ) ;;;================================================= (defun MakeText (point string Height Ang justify Style Layer Color xdata / Lst) ; Ang: Radial (setq Lst (list '(0 . "TEXT") (cons 8 (if Layer Layer (getvar "Clayer"))) (cons 62 (if Color Color 256)) (cons 10 point) (cons 40 Height) (cons 1 string) (if Ang (cons 50 Ang)) (cons 7 (if Style Style (getvar "Textstyle"))) (cons -3 (if xdata (list xdata) nil))) justify (strcase justify)) (cond ((= justify "C") (setq Lst (append Lst (list (cons 72 1) (cons 11 point))))) ((= justify "R") (setq Lst (append Lst (list (cons 72 2) (cons 11 point))))) ((= justify "M") (setq Lst (append Lst (list (cons 72 4) (cons 11 point))))) ((= justify "TL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 3))))) ((= justify "TC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 3))))) ((= justify "TR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 3))))) ((= justify "ML") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 2))))) ((= justify "MC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 2))))) ((= justify "MR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 2))))) ((= justify "BL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 1))))) ((= justify "BC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 1))))) ((= justify "BR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 1))))) ) (entmakex Lst) );end ;================================= <<
| ||
Tác giả: hiepttr Bài viết gốc: 388294 Tên lệnh: scd |
Nhờ Viết Lisp Đánh Số Cột Đèn Có Phân Pha!
Đây bạn: ;;;lisp danh so cot den (defun c:SCD( / st str i p chu str1) (setq #tu (NGT #tu "1" getstring "Tu chieu sang so") #lo (NGT #lo "1" getstring "Lo so") #st (NGT #st 1 getint "STT cot dau tien") st (1- #st) str (strcat "TCS" #tu "/L" #lo "/") ) (initget "A B C") (setq #pha (NGT #pha "A" getkword "Pha dau tien [A/B/C]")) (cond ((= (strcase #pha) "A") (setq i -1) (while (setq p... Đây bạn: ;;;lisp danh so cot den (defun c:SCD( / st str i p chu str1) (setq #tu (NGT #tu "1" getstring "Tu chieu sang so") #lo (NGT #lo "1" getstring "Lo so") #st (NGT #st 1 getint "STT cot dau tien") st (1- #st) str (strcat "TCS" #tu "/L" #lo "/") ) (initget "A B C") (setq #pha (NGT #pha "A" getkword "Pha dau tien [A/B/C]")) (cond ((= (strcase #pha) "A") (setq i -1) (while (setq p (getpoint "\nPick: ")) (setq i (1+ i)) (setq chu (nth (rem i 3) '("A" "B" "C")) st (1+ st) str1 (strcat str (itoa st) chu) ) (MakeText p str1 2.5 0 "L" nil nil 2 nil) ) ) ((= (strcase #pha) "B") (setq i 0) (while (setq p (getpoint "\nPick: ")) (setq i (1+ i)) (setq chu (nth (rem i 3) '("A" "B" "C")) st (1+ st) str1 (strcat str (itoa st) chu) ) (MakeText p str1 2.5 0 "L" nil nil 2 nil) ) ) ((= (strcase #pha) "C") (setq i 1) (while (setq p (getpoint "\nPick: ")) (setq i (1+ i)) (setq chu (nth (rem i 3) '("A" "B" "C")) st (1+ st) str1 (strcat str (itoa st) chu) ) (MakeText p str1 2.5 0 "L" nil nil 2 nil) ) ) ) ) ;;;================================================== (defun NGT(a mac_dinh ham str_nhac / modul) ;;Nhan gia tri (or a (setq a mac_dinh)) (setq a (cond ((= "" (setq modul (ham (strcat "\n" str_nhac " <" (vl-princ-to-string a) ">: ")))) a) (modul) (a) ) ) ) ;;;================================================= (defun MakeText (point string Height Ang justify Style Layer Color xdata / Lst) ; Ang: Radial (setq Lst (list '(0 . "TEXT") (cons 8 (if Layer Layer (getvar "Clayer"))) (cons 62 (if Color Color 256)) (cons 10 point) (cons 40 Height) (cons 1 string) (if Ang (cons 50 Ang)) (cons 7 (if Style Style (getvar "Textstyle"))) (cons -3 (if xdata (list xdata) nil))) justify (strcase justify)) (cond ((= justify "C") (setq Lst (append Lst (list (cons 72 1) (cons 11 point))))) ((= justify "R") (setq Lst (append Lst (list (cons 72 2) (cons 11 point))))) ((= justify "M") (setq Lst (append Lst (list (cons 72 4) (cons 11 point))))) ((= justify "TL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 3))))) ((= justify "TC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 3))))) ((= justify "TR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 3))))) ((= justify "ML") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 2))))) ((= justify "MC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 2))))) ((= justify "MR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 2))))) ((= justify "BL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 1))))) ((= justify "BC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 1))))) ((= justify "BR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 1))))) ) (entmakex Lst) );end ;================================= <<
|
Trang 199/330