Info | File | ||
Tác giả: vanngeonhuxua Bài viết gốc: 444985 Tên lệnh: change mline |
Đổi MlineStyle cho Mline
Xem cái này xem được không bạn. ml style bạn cần đổi sang current chọn ml cần đổi enter đến kết thúc lệnh
;;
;;... Xem cái này xem được không bạn. ml style bạn cần đổi sang current chọn ml cần đổi enter đến kết thúc lệnh ;; ;; http://cadxp.com/index.php?/topic/34672-remplacer-multiligne-par-une-autre-multiligne/page__pid__188... ;; Change_MLine par Bonuscad - Version 1.00 ;; Remplacer une MLine par une autre qui utilise le style de MLine courant ;; ;; ;; VLisp Routine : Change_MLine ;; Change THE selected MLine to the CURRENT MLine style ;; and you can switch to Closed/Opened MLine ... ;; ;; Minimum Translation for US/English Forums by Patrice BRAUD ;; (vl-load-com) (defun l-coor2l-pt (lst flag / ) (if lst (cons (list (car lst) (cadr lst) (if flag (+ (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) (caddr lst)) (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) ) ) (l-coor2l-pt (if flag (cdddr lst) (cddr lst)) flag) ) ) ) (defun c:Change_MLine ( / js ent ename l_pt cur_lay closed) ; (princ "\nSélectionner une multiligne.") (princ "\nPlease Select a MLine ") (while (null (setq js (ssget "_+.:E:S" '((0 . "MLINE"))))) ; (princ "\nCe n'est pas une multiligne!") (princ "\nThis is not a MLine ! ") ) (setq ent (ssname js 0) ename (vlax-ename->vla-object ent) l_pt (l-coor2l-pt (vlax-get ename 'Coordinates) T) cur_lay (getvar "CLAYER") ) ;; (initget "Fermée Ouverte _Closed Open") ;; (if (eq (getkword "\nMultiligne <Ouverte>: ") "Closed") (initget "Closed Open") (if (eq (getkword "\nMLine <Open>: ") "Closed") (setq closed T) ) (setvar "clayer" (vlax-get ename 'Layer)) (command "_.mline") (foreach n l_pt (command "_none" (trans n 0 1))) (if closed (command "_close") (command "")) (entdel ent) (setvar "CLAYER" cur_lay) (prin1) )
<<
| ||
Tác giả: Biet ve CAD Bài viết gốc: 445000 Tên lệnh: change mline |
Đổi MlineStyle cho Mline
| ||
Tác giả: Doan Nguyen Van Bài viết gốc: 445067 Tên lệnh: te |
Nhờ mọi người viết giúp lisp tạo đường bao
Thử xem oke không bạn. (defun c:te...
Thử xem oke không bạn. (defun c:te (/ ss pt l1 l2 pt2) (setq ss (ssget (list (cons 0 "LWPOLYLINE,LINE")))) (setq pt (getpoint "\nPick point")) (setq l1 (acet-ss-zoom-extents ss)) (setq l2 (acet-ss-zoom-extents (ssget "_X"))) (command "Move" ss "" "_NON" (car l1) "_NON" (cadr l2)) (setq pt2 (polar pt (angle (car l1) (cadr l2)) (distance (car l1) (cadr l2)))) (acet-ss-zoom-extents ss) (command "BOUNDARY" pt2 "" ) (setq ss (ssadd (entlast) ss)) (command "Move" ss "" "_NON" (cadr l2) "_NON" (car l1)) (acet-ss-zoom-extents ss) )
<<
| ||
Tác giả: Doan Nguyen Van Bài viết gốc: 445168 Tên lệnh: te |
(Help) Xin lisp chuyển 2dpline,arc,ellipse thành pline
| ||
Tác giả: thiep Bài viết gốc: 445225 Tên lệnh: c2pl |
(Help) Xin lisp chuyển 2dpline,arc,ellipse thành pline
| ||
Tác giả: mr.thanh2610 Bài viết gốc: 445217 Tên lệnh: sn1 sn sth sng |
LISP Chọn số
Chào các anh em diễn đàn, em có sưu tầm một lisp của các bác trên diễn đàn mình mà thấy chủ đề cũng rất lâu rồi nên nay em xin mạn phép lập chủ đề mới xin nhờ các anh em giúp đỡ.Vấn đề như sau: -Chức năng Lisp cũ: chọn các Text là số (số, số nguyên, số thực...)
-Mong muốn chỉnh sửa Lisp: Chọn được cả Mtext,... Chào các anh em diễn đàn, em có sưu tầm một lisp của các bác trên diễn đàn mình mà thấy chủ đề cũng rất lâu rồi nên nay em xin mạn phép lập chủ đề mới xin nhờ các anh em giúp đỡ.Vấn đề như sau: -Chức năng Lisp cũ: chọn các Text là số (số, số nguyên, số thực...) -Mong muốn chỉnh sửa Lisp: Chọn được cả Mtext, Text và phần chọn số thực chọn được dấu ngăn cách với phần thập phân là dấu phẩy(lisp đang lấy dấu chấm) ; Ví dụ: 1.2("một chấm hai" lisp lấy được), giờ muốn lấy theo kiểu 1,2 (một phẩy hai).Xin chân thành cảm ơn ạ. ;; --------------------LOC TEXT LA SO NAM TRONG KHOANG GIA TRI CHO TRUOC--------------------- ;; free lisp from cadviet.com ;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=5733&st=20 (defun c:SN1(/ ss i ent content so ans snho slon skhoang socuctieu socucdai) ;copyright by TUE_NV (setq ss (ssget '((0 . "*TEXT"))) snho (ssadd) slon (ssadd) skhoang (ssadd)) (setq i 0) (initget "L N K") (setq ans (getkword "\n chon so Nho hon N , Chon so Lon hon L , Chon so trong khoang K < N/L/K > : ")) (if (= ans "N") (progn (setq so (getreal "\n Nhap so nho hon : ")) (while (< i (sslength ss)) (setq ent (ssname ss i)) (if (and (setq content (distof(cdr(assoc 1 (entget ent))))) (< content so)) (setq snho (ssadd ent snho)) ) (setq i (1+ i)) );while (sssetfirst snho snho) );progn );if (setq i 0) (if (= ans "L") (progn (setq so (getreal "\n Nhap so lon hon : ")) (while (< i (sslength ss)) (setq ent (ssname ss i)) (if (and (setq content (distof(cdr(assoc 1 (entget ent))))) (> content so)) (setq slon (ssadd ent slon)) ) (setq i (1+ i)) );while (sssetfirst slon slon) );progn );if (setq i 0) (if (= ans "K") (progn (setq socuctieu (getreal "\n Nhap so cuc tieu MIN : ")) (setq socucdai (getreal "\n Nhap so cuc dai MAX: ")) (while (< i (sslength ss)) (setq ent (ssname ss i)) (if (and (setq content (distof(cdr(assoc 1 (entget ent))))) (> content socuctieu) (< content socucdai)) (setq skhoang (ssadd ent skhoang)) ) (setq i (1+ i)) );while (sssetfirst skhoang skhoang) )) (princ) ) ;; --------------------LOC TEXT LA SO--------------------- (defun c:SN (/ ss ent str ss1) (setq ss1 (ssadd)) (if (setq ss (ssget (list (cons 0 "*TEXT")))) (progn (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))) (setq str (cdr(assoc 1 (entget ent)))) (if (distof str 2) (ssadd ent ss1) ) ) (if (> (sslength ss1) 0) (progn (sssetfirst nil) (princ (strcat "\nChon duoc " (itoa (sslength ss1)) " doi tuong Text co noi dung la so.")) (sssetfirst nil ss1) ) ) ) ) ) ;; --------------------LOC TEXT LA SO THUC--------------------- (defun c:STH(/ ent i ss ss1 str) (if (setq ss (ssget (list (cons 0 "*TEXT")))) (progn (setq i -1 ss1 (ssadd)) (while (setq ent (ssname ss (setq i (1+ i)))) (setq str (cdr(assoc 1 (entget ent)))) (if (and (distof str 2) (= (type (read str)) 'REAL )) (ssadd ent ss1) )) (if (> (sslength ss1) 0) (progn (sssetfirst nil) (princ (strcat "\nChon duoc " (itoa (sslength ss1)) " doi tuong Text co noi dung la so thuc.")) (sssetfirst nil ss1) )) ) )) ;; --------------------LOC TEXT LA SO NGUYEN--------------------- (defun c:SNG(/ ent i ss ss1 str) (if (setq ss (ssget (list (cons 0 "*TEXT")))) (progn (setq i -1 ss1 (ssadd)) (while (setq ent (ssname ss (setq i (1+ i)))) (setq str (cdr(assoc 1 (entget ent)))) (if (and (distof str 2) (= (type (read str)) 'INT )) (ssadd ent ss1) )) (if (> (sslength ss1) 0) (progn (sssetfirst nil) (princ (strcat "\nChon duoc " (itoa (sslength ss1)) " doi tuong Text co noi dung la so thuc.")) (sssetfirst nil ss1) )) ) ))
16.LOC TEXT LA SO(SN, SN1, STH, SNG).lsp <<
| ||
Tác giả: vbao Bài viết gốc: 2716 Tên lệnh: mia |
MIA - Tặng các bác làm về đo đạc khảo sát
| ||
Tác giả: thiep Bài viết gốc: 445296 Tên lệnh: fdt |
LINK ĐỐI TƯỢNG CHO DIM VÀ TEXT
;| LISP FIELD SUM DIMENSIONS TO A TEXT|;
(defun DXF (code en) (cdr (assoc code (entget en))))
(defun getIDobject (obj)
(if (vlax-method-applicable-p *util* 'GetObjectIdString)
(vla-GetObjectIdString *util*... ;| LISP FIELD SUM DIMENSIONS TO A TEXT|; (defun DXF (code en) (cdr (assoc code (entget en)))) (defun getIDobject (obj) (if (vlax-method-applicable-p *util* 'GetObjectIdString) (vla-GetObjectIdString *util* obj :vlax-false) (itoa (vla-get-ObjectId obj)) ) ) (defun c:fdt (/ ApCad ActDoc *Model* *util* ssdim ent_T Obj_Text tz po ent-lst len n Obj_DIM str rowtypes objTab acm prec ) (vl-load-com) (command "undo" "be") (defun *error* (msg) (and doc (_EndUndo doc)) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **")) ) (acet-sysvar-restore) (command "undo" "en") (princ) ) (if (< (substr (getvar "ACADVER") 1 2) "15") (progn (acet-ui-message (strcat "Lisp này ch\U+1EC9 ch\U+1EA1y \U+0111\U+01B0\U+1EE3c t\U+1EEB autoCad 2007 tr\U+1EDF lên." "\nB\U+1EA1n nên nâng c\U+1EA5p autoCad và có menu Express" ) "Warning" 4144 ) (exit) ) ) (acet-sysvar-set '("cmdecho" 0 "osmode" 0 "dimpost" ".")) (setq ApCad (vlax-get-acad-object) ActDoc (vla-get-ActiveDocument ApCad) *Model* (vla-get-ModelSpace ActDoc) *util* (vla-get-Utility ActDoc) ) (setq acm (vla-GetInterfaceObject ApCad (strcat "AutoCAD.AcCmColor." (substr (getvar 'acadver) 1 2)) ) ) (acet-ui-status "Select DIMENSIONs" "Prompt") (setq ssdim (ssget '((0 . "DIMENSION")))) (acet-ui-status) (while (OR (NOT (setq ent_T (car (entsel "\nPick a Text object for set sum dimensions")) ) ) (NOT (eq (DXF 0 ent_T) "TEXT")) ) (prompt "\nPick not right TEXT object, please pick again") ) (setq Obj_Text (vlax-ename->vla-object ent_T)) (setq tz (dxf 40 ent_T)) (setq po (getvar "Extmin") po (list (- (car po) (* tz 20)) (cadr po) 0.0) ) (if (null (setq prec (getint (acet-str-format "\nEnter number of decimal places: <%1> " (itoa (getvar "useri1")) ) ) ) ) (setq prec (getvar "useri1")) ) (setvar "useri1" prec) (if ssdim (progn (setq ent-lst (acet-ss-to-list ssdim)) (setq len (length ent-lst)) (setq objTab (vla-AddTable *Model* (vlax-3D-point po) len 1 (* tz 3.5) (* tz 8) ) ) (vla-put-layer objTab (vla-get-layer Obj_Text)) (vla-setrgb acm 0 0 0) (vla-put-truecolor objTab acm) (setq n 0) (foreach entD ent-lst (setq Obj_DIM (vlax-ename->vla-object entD)) (if (eq (vla-get-TextOverride Obj_DIM) "") (vla-setText objTab n 0 (acet-str-format "%<\\AcObjProp Object(%<\\_ObjId %1>%).%3 \\f \"%llu2%pr%2%\">%" (getIDobject Obj_DIM) (itoa prec) "Measurement" ) ) (vla-setText objTab n 0 (acet-str-format "%<\\AcObjProp Object(%<\\_ObjId %1>%).%2>%" (getIDobject Obj_DIM) "TextOverride" ) ) ) (setq n (+ n 1)) ) (setq str (acet-str-format "%<\\AcExpr (Table(%<\\_ObjId %1>%).Evaluate(Sum(A1:A%2))) \\f \"%lu2%pr%3\">%" (getIDobject objTab) (itoa len) (itoa prec) ) ) (vla-put-TextString Obj_Text str) ) ) (vla-put-Visible objTab acfalse) (ACET-SYSVAR-RESTORE) (command "undo" "en") (princ "ok") (PRINC) ) Lisp tính tổng các text dimension, tạo field giá trị tổng đưa vào 1 đối tượng TEXT có sẵn. Text dimension có thể bị chỉnh sửa hay không bị chỉnh sửa cũng được cộng. Khi 1 hay nhiều dimension thay đổi thì text tổng cũng thay đổi. <<
| ||
Tác giả: Kieu Tan Bài viết gốc: 408470 Tên lệnh: xom |
Xoay text thuộc tính trong block
| ||
Tác giả: Doan Van Ha Bài viết gốc: 434664 Tên lệnh: td |
Hỏi về Lisp (thuật toán, ý tưởng, coding,...)
Cái này?
(defun C:TD(/ ss lst p1 gr code p2) (setq ss (ssget) lst (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))) p1 (getpoint "\nChon diem chuan: ")) (while (and (setq gr (grread T 4 0) code (car gr) p2 (cadr gr)) (not (= 3 code)) (not (= 25 code))) (cond ;----- TH1. Khi rª chuét trªn mµn h×nh. ((= 5 code) (mapcar '(lambda(obj) (vla-Move obj (vlax-3d-point p1) (vlax-3d-point p2))) lst) (setq... Cái này?
(defun C:TD(/ ss lst p1 gr code p2) (setq ss (ssget) lst (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))) p1 (getpoint "\nChon diem chuan: ")) (while (and (setq gr (grread T 4 0) code (car gr) p2 (cadr gr)) (not (= 3 code)) (not (= 25 code))) (cond ;----- TH1. Khi rª chuét trªn mµn h×nh. ((= 5 code) (mapcar '(lambda(obj) (vla-Move obj (vlax-3d-point p1) (vlax-3d-point p2))) lst) (setq p1 p2)) ;----- TH2. Khi pick point hoÆc chuét ph¶i. ((or (= 3 code) (= 25 code)) (mapcar '(lambda(obj) (vla-Move obj (vlax-3d-point p1) (vlax-3d-point p2))) lst)))) (princ))
<<
| ||
Tác giả: thiep Bài viết gốc: 445324 Tên lệnh: fdt2 |
LINK ĐỐI TƯỢNG CHO DIM VÀ TEXT
Lisp đã chỉnh sửa: tạo field của sum dimensions vào đối tượng text có sẵn, không còn tạo "đối tượng trung gian" để cộng trừ nhân chia, chạy thử trên autoCad 2014 thấy OK. Chấp nhận text dim đã chỉnh sửa. Còn sum đối tượng text số, lengLine, area tạo field đưa vào text, hẹn một ngày khác. Cảm ơn Quocmanh04tt đã gợi ý.
Lisp đã chỉnh sửa: tạo field của sum dimensions vào đối tượng text có sẵn, không còn tạo "đối tượng trung gian" để cộng trừ nhân chia, chạy thử trên autoCad 2014 thấy OK. Chấp nhận text dim đã chỉnh sửa. Còn sum đối tượng text số, lengLine, area tạo field đưa vào text, hẹn một ngày khác. Cảm ơn Quocmanh04tt đã gợi ý. ;| LISP FIELD SUM DIMENSIONS TO A TEXT by TrânThiêp 04/2020 |; (defun getIDobject (obj) (if (vlax-method-applicable-p *util* 'GetObjectIdString) (vla-GetObjectIdString *util* obj :vlax-false) (itoa (vla-get-ObjectId obj)) ) ) (defun c:fdt2 (/ ApCad ActDoc *util* ssdim ent_T Obj_Text ent-lst len Obj_DIM objDim_lst ID_Dim_lst str prec) (vl-load-com) (command "undo" "be") (defun *error* (msg) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **")) ) (acet-sysvar-restore) (command "undo" "en") (princ) ) (acet-sysvar-set '("cmdecho" 0 "osmode" 0 )) (setq ApCad (vlax-get-acad-object) ActDoc (vla-get-ActiveDocument ApCad) *util* (vla-get-Utility ActDoc) ) (acet-ui-status "Select DIMENSIONs" "Prompt") (setq ssdim (ssget '((0 . "DIMENSION")))) (acet-ui-status) (while (OR (NOT (setq ent_T (car (entsel "\nPick a Text object for set sum dimensions" ) ) ) ) (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT")) ) (prompt "\nPick not right TEXT object, please pick again") ) (setq Obj_Text (vlax-ename->vla-object ent_T)) (if (null (setq prec (getint (acet-str-format "\nEnter number of decimal places: <%1> " (itoa (getvar "useri1")) ) ) ) ) (setq prec (getvar "useri1")) ) (setvar "useri1" prec) (if ssdim (progn (setq objDim_lst (mapcar 'vlax-ename->vla-object (acet-ss-to-list ssdim) ) ) (setq ID_Dim_lst (mapcar '(lambda (x) (getIDobject x)) objDim_lst)) (setq str "%<\\AcExpr (") (mapcar '(lambda (ob id) (if (distof (vla-get-TextOverride ob)) (Setq str (strcat str (acet-str-format "%<\\AcObjProp Object(%<\\_ObjId %1>%).%2>%+" id "TextOverride" ) ) ) (Setq str (strcat str (acet-str-format "%<\\AcObjProp Object(%<\\_ObjId %1>%).%3 \\f \"%lu2%pr%2\">%+" id (itoa prec) "Measurement" ) ) ) ) ) objDim_lst ID_Dim_lst ) (setq str (acet-str-format "%1) \\f \"%lu2%pr%2\">%" (vl-string-right-trim "+" str) (itoa prec) ) ) (vla-put-TextString Obj_Text str) ) ) (ACET-SYSVAR-RESTORE) (command "undo" "en") (princ "\nOK") (PRINC) )
<<
| ||
Tác giả: thanhduan2407 Bài viết gốc: 445333 Tên lệnh: xdthpl |
Nhờ viết lisp (nối đường line có điều kiên)
Của bạn đây! Áp dụng với Polyline.
(defun C:XDTHPL (/ LTSPLINE SSPLINE X) ;;;XDTHPL
(defun *error* (msg)
(if Olmode
(setvar 'osmode Olmode)
)
(if (not (member msg '("*BREAK,*CANCEL*,*EXIT*")))
(princ (strcat "\nError: " msg))
)
(princ)
)
(command "undo" "begin")
(setq Olmode (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq Gocchenh
(LM:GetXWithDefault
... Của bạn đây! Áp dụng với Polyline.
(defun C:XDTHPL (/ LTSPLINE SSPLINE X) ;;;XDTHPL
(defun *error* (msg)
(if Olmode
(setvar 'osmode Olmode)
)
(if (not (member msg '("*BREAK,*CANCEL*,*EXIT*")))
(princ (strcat "\nError: " msg))
)
(princ)
)
(command "undo" "begin")
(setq Olmode (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq Gocchenh
(LM:GetXWithDefault
getreal
"\nNh\U+1EADp g\U+00F3c ch\U+00EAnh v\U+1EDBi 180 \U+0111\U+1ED9 (1,2,3...10 \U+0111\U+1ED9) \U+0111\U+01B0\U+1EE3c coi l\U+00E0 th\U+1EB3ng h\U+00E0ng: "
'*Gocchenh0*
0.0
)
)
(setq ssPline (ssget '((0 . "*POLYLINE"))))
(if ssPline
(progn
(setq LtsPline (LM:ss->ent ssPline))
(mapcar '(lambda (x) (XDTHPL x Gocchenh)) LtsPline)
)
)
(setvar "OSMODE" Olmode)
(command "undo" "end")
(princ)
)
(defun XDTHPL (pl delta180 / ANG1 ANG2 BUL1 BUL2 BULST CERALST1 CERALST2 ELST ELST1 ELST2 ELST3 I K M N NBUL OBUL PLOB PLST PLST1 RA REC1 VTT1 VTT2)
(setq plst (acet-geom-vertex-list pl)
plob (vlax-ename->vla-object pl)
elst (entget pl)
bulst (list)
plst1 plst
elst1 (list)
elst2 (list)
elst3 (list)
)
(foreach a elst
(if (= (car a) 42)
(setq bulst (append bulst (list (cdr a))))
)
)
(setq k (vl-position (cons 10 (reverse (cdr (reverse (car plst))))) elst)
i 0
)
(while (< i k)
(setq elst1 (append elst1 (list (nth i elst)))
i (1+ i)
)
)
(foreach vrt (if (= (cdr (assoc 70 elst)) 1)
(reverse (cdr (reverse plst)))
plst
)
(setq k (vl-position (cons 10 (reverse (cdr (reverse vrt)))) elst))
(setq elst2 (append elst2
(list
(list (nth k elst) (nth (+ k 1) elst) (nth (+ k 2) elst) (nth (+ k 3) elst))
)
)
)
)
(setq m (cdr (assoc 90 elst)))
(foreach vrt plst
(setq i (vl-position vrt plst))
(if (> i 0)
(progn
(setq vtt1 (vlax-curve-getFirstDeriv
plob
(vlax-curve-getParamAtPoint plob (nth (1- i) plst))
)
)
(setq vtt2 (vlax-curve-getFirstDeriv plob (vlax-curve-getParamAtPoint plob vrt)))
(setq bul1 (nth (1- i) bulst)
bul2 (nth i bulst)
)
(setq ang1 (angle '(0 0 0) vtt1)
ang2 (angle '(0 0 0) vtt2)
)
(if (and (= bul1 0.0)
(= bul2 0.0)
(or (equal ang1 ang2 (* pi (/ delta180 180.0)))
(equal (* 2 pi) (abs (- ang1 ang2)) (* pi (/ delta180 180.0)))
)
(nth (1+ i) plst)
)
(setq plst1 (vl-remove vrt plst1)
m (1- m)
)
)
(if (and (/= bul2 0.0) (/= bul1 0.0))
(progn
(setq ceralst1 (bulgecenter bul1 (nth (1- i) plst) (nth i plst))
ceralst2 (bulgecenter bul2 (nth i plst) (nth (1+ i) plst))
)
(if (and (equal (car ceralst1) (car ceralst2) 1e-8)
(equal (last Ceralst1) (last ceralst2) 1e-8)
)
(setq plst1 (vl-remove vrt plst1)
m (1- m)
)
)
)
)
)
)
)
(if (= (cdr (assoc 70 elst)) 1)
(setq plst1 (reverse (cdr (reverse plst1))))
)
(foreach vrt plst1
(foreach rec elst2
(if (equal (cdar rec) (reverse (cdr (reverse vrt))) 1e-8)
(setq elst3 (append elst3 (list rec)))
)
)
)
(foreach rec elst3
(if (/= (setq obul (cdr (last rec))) 0.0)
(progn
(setq k (vl-position rec elst3)
n (vl-position obul bulst)
ra (car (bulgecenter obul (nth n plst) (nth (1+ n) plst)))
nbul (bulge ra (nth k plst1) (nth (1+ k) plst1))
)
(if (< obul 0)
(setq nbul (- 0 nbul))
)
(setq rec1 (subst (cons 42 nbul) (assoc 42 rec) rec)
elst3 (subst rec1 rec elst3)
)
)
)
)
(foreach rec elst3
(setq elst1 (append elst1 rec))
)
(setq elst (append elst1 (list (cons 210 '(0.0 0.0 1.0)))))
(setq elst (subst (cons 90 m) (assoc 90 elst) elst))
(entmod elst)
)
(defun LM:ss->ent (ss / i l)
(if ss
(repeat (setq i (sslength ss))
(setq l (cons (ssname ss (setq i (1- i))) l))
)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun BulgeCenter (bulge p1 p2 / delta chord radius center)
(setq delta (* (atan bulge) 4)
chord (distance p1 p2)
radius (/ chord (sin (/ delta 2)) 2)
center (polar p1 (+ (angle p1 p2) (/ (- pi delta) 2)) radius)
Ceralst (list center radius)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun bulge (cen p1 p2 / anp)
(setq anp (atan (/ (distance p1 p2) 2 (distance cen (midpt p1 p2))))
bul (/ (sin (/ anp 2)) (cos (/ anp 2)))
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun midpt (p1 p2)
(setq pt (mapcar '(lambda (x y) (/ (+ x y) 2)) p1 p2))
)
(defun LM:GetXWithDefault (_function _prompt _symbol _default / _toString)
;; © Lee Mac 2010
(setq _toString
(lambda (x)
(cond
((eq getangle _function) (angtos x))
((eq 'REAL (type x)) (rtos x))
((eq 'INT (type x)) (itoa x))
(x)
)
)
)
(set _symbol
(
(lambda (input)
(if (or (not input) (eq "" input))
(eval _symbol)
input
)
)
(_function (strcat _prompt
"<"
(_toString (set _symbol
(cond ((eval _symbol))
(_default)
)
)
)
"> : "
)
)
)
)
)
<<
| ||
Tác giả: thiep Bài viết gốc: 445358 Tên lệnh: fdt1 fdt2 fdt3 fdt4 fdt5 |
LINK ĐỐI TƯỢNG CHO DIM VÀ TEXT
Mở rộng thêm lisp fdt1: tạo field của tổng giá trị dimensions vào đối tượng text có sẵn. Thiệp tạo thêm 4 lisp: fdt2: tạo field tổng giá trị số của text, mtext số; fdt3: tạo field tổng giá trị length của các đối tượng có thuộc tính length; fdt4: tạo field tổng giá trị diện tích của các đối tượng có thuộc tính Area;
fdt5: tạo field tổng giá trị chu vi... >> Mở rộng thêm lisp fdt1: tạo field của tổng giá trị dimensions vào đối tượng text có sẵn. Thiệp tạo thêm 4 lisp: fdt2: tạo field tổng giá trị số của text, mtext số; fdt3: tạo field tổng giá trị length của các đối tượng có thuộc tính length; fdt4: tạo field tổng giá trị diện tích của các đối tượng có thuộc tính Area; fdt5: tạo field tổng giá trị chu vi đường tròn của các đối tượng đường tròn. (tuy nhiên fdt2 thật sự Thiep không vừa ý lắm vì nó tạo ra tới độ chính xác 6 con số lẻ của số thập phân. ví dụ số tổng 910.1 nó sẽ ra 910.100000, nhờ ae phân tích tại sao nó bị khiếm khuyết này) Có tới hơn 400 dòng mã của 5 lisp. ;;; LISP FIELD SUM DIMENSIONS, TEXTs, MTEXTs, LENGTHs, AREAs, CIRCUMFERENCEs TO A TEXT ;;; by TrânThiêp 04/2020 ;;; 09188411230 ;;;======================================================= ;;; command fdt1 : field sum DIMENSIONS ;;; command fdt2 : field sum TEXTs, MTEXTs ;;; command fdt3 : field sum LENGTHs ;;; command fdt4 : field sum AREAs ;;; command fdt5 : field sum CIRCUMFERENCEs ;;; (defun DXF (code en) (cdr (assoc code (entget en)))) ;;;===========================================================================1: sum DIMENSIONs ========= (defun c:fdt1 (/ ss ent_T Obj_Text str prec Lobj_dim ID_Dim_lst field_lst) (vl-load-com) (command "undo" "be") (defun *error* (msg) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **")) ) (acet-sysvar-restore) (command "undo" "en") (princ) ) (acet-sysvar-set '("cmdecho" 0 "osmode" 0)) (acet-ui-status "Select DIMENSIONs FOR GET SUM" "Prompt") (setq ss (ssget '((0 . "DIMENSION")))) (acet-ui-status) (while (OR (NOT (setq ent_T (car (entsel "\nPick a Text object for set sum dimensions" ) ) ) ) (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT")) ) (prompt "\nPick not right TEXT object, please pick again") ) (setq Obj_Text (vlax-ename->vla-object ent_T)) (if (null (setq prec (getint (acet-str-format "\nEnter number of decimal places: <%1> " (itoa (getvar "useri1")) ) ) ) ) (setq prec (getvar "useri1")) ) (setvar "useri1" prec) (if ss (progn (mapcar '(lambda (x) (setq Lobj_dim (CONS (vlax-ename->vla-object x) Lobj_dim)) ) (acet-ss-to-list ss) ) (setq ID_Dim_lst (mapcar 'vla-get-objectid Lobj_dim)) (Setq field_lst (mapcar '(lambda (ob id) (if (distof (vla-get-TextOverride ob)) (acet-str-format "%<\\AcObjProp Object(%<\\_ObjId %1>%).%2>%+" (itoa id) "TextOverride" ) (acet-str-format "%<\\AcObjProp Object(%<\\_ObjId %1>%).%3 \\f \"%lu2%pr%2\">%+" (itoa id) (itoa prec) "Measurement" ) ) ) Lobj_dim ID_Dim_lst ) ) (setq str (acet-str-format "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%" (vl-string-right-trim "+" (apply 'strcat field_lst)) (itoa prec) ) ) (vla-put-TextString Obj_Text str) ) ;_PROGN ) ;_IF (ACET-SYSVAR-RESTORE) (command "undo" "en") (PRINC str) (princ "\nOK") ) ;;;===========================================================================2: sum TEXTs, MTEXTs NUMBER========= (defun c:fdt2 (/ ss ent_T Obj_Text str prec Lobj_text ID_text_lst field_lst) (vl-load-com) (command "undo" "be") (defun *error* (msg) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **")) ) (acet-sysvar-restore) (command "undo" "en") (princ) ) (acet-sysvar-set '("cmdecho" 0 "osmode" 0)) (acet-ui-status "Select: TEXT, MTEXT NUMBER FOR GET SUM" "Prompt") (setq ss (ssget '((0 . "*TEXT")))) (acet-ui-status) (if ss (progn (while (OR (NOT (setq ent_T (car (entsel "\nPick a Text object for set sum text number" ) ) ) ) (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT")) ) (prompt "\nPick not right TEXT object, please pick again") ) (setq Obj_Text (vlax-ename->vla-object ent_T)) (if (null (setq prec (getint (acet-str-format "\nEnter number of decimal places: <%1> " (itoa (getvar "useri2")) ) ) ) ) (setq prec (getvar "useri2")) ) (setvar "useri2" prec) (mapcar '(lambda (x) (if (Numberp (atof (dxf 1 x))) (setq Lobj_text (CONS (vlax-ename->vla-object x) Lobj_text ) ) ) ) (acet-ss-to-list ss) ) (setq ID_text_lst (mapcar 'vla-get-objectid Lobj_text)) (setq field_lst (mapcar '(lambda (x) (acet-str-format "%<\\AcObjProp Object(%<\\_ObjId %1>%).TextString>% +" (itoa x) ) ) ID_text_lst ) ) (setq str (acet-str-format "%<\\AcExpr (%1)>%" (vl-string-right-trim "+" (apply 'strcat field_lst)) ) ) (vla-put-TextString Obj_Text str) ) ;_PROGN ) ;_IF (ACET-SYSVAR-RESTORE) (command "undo" "en") (princ "\nOK") (PRINC) ) ;;;===========================================================================3: LENGTHs========= (defun c:fdt3 (/ ss ent_T Obj_Text str prec Lobj_leng ID_leng_lst field_lst) (vl-load-com) (command "undo" "be") (defun *error* (msg) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **")) ) (acet-sysvar-restore) (command "undo" "en") (princ) ) (acet-sysvar-set '("cmdecho" 0 "osmode" 0)) (acet-ui-status "Select: LINE, POLYLINE, for GET SUM LENGTH" "Prompt" ) (setq ss (ssget '((0 . "LINE,*POLYLINE")))) (acet-ui-status) (if ss (progn (while (OR (NOT (setq ent_T (car (entsel "\nPick a Text object for set sum length value" ) ) ) ) (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT")) ) (prompt "\nPick not right TEXT object, please pick again") ) (setq Obj_Text (vlax-ename->vla-object ent_T)) (if (null (setq prec (getint (acet-str-format "\nEnter number of decimal places: <%1> " (itoa (getvar "useri3")) ) ) ) ) (setq prec (getvar "useri3")) ) (setvar "useri3" prec) (mapcar '(lambda (x) (if (vlax-property-available-p (vlax-ename->vla-object x) 'length ) (setq Lobj_leng (CONS (vlax-ename->vla-object x) Lobj_leng ) ) ) ) (acet-ss-to-list ss) ) (setq ID_leng_lst (mapcar 'vla-get-objectid Lobj_leng)) (setq field_lst (mapcar '(lambda (id) (acet-str-format "%<\\AcObjProp Object(%<\\_ObjId %1>%).Length \\f \"%lu2%pr%2\">%+" (itoa id) (itoa prec) ) ) ID_leng_lst ) ) (setq str (acet-str-format "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%" (vl-string-right-trim "+" (apply 'strcat field_lst)) (itoa prec) ) ) (vla-put-TextString Obj_Text str) ) ;_PROGN ) ;_IF (ACET-SYSVAR-RESTORE) (command "undo" "en") (princ "\nOK") (PRINC) ) ;;;===========================================================================4: AREAs========= (defun c:fdt4 (/ ss ent_T Obj_Text Lobj_area ID_area_lst str prec field_lst) (vl-load-com) (command "undo" "be") (defun *error* (msg) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **")) ) (acet-sysvar-restore) (command "undo" "en") (princ) ) (acet-sysvar-set '("cmdecho" 0 "osmode" 0)) (acet-ui-status "Select: POLYLINE, HATCH, ARC, CIRCLE, REGION, ELLIPSE for GET SUM AREA" "Prompt" ) (setq ss (ssget '((0 . "*POLYLINE,HATCH,ARC,CIRCLE,ELLIPSE,REGION")))) (acet-ui-status) (if ss (progn (mapcar '(lambda (x) (if (vlax-property-available-p (vlax-ename->vla-object x) 'area ) (setq Lobj_area (CONS (vlax-ename->vla-object x) Lobj_area)) ) ) (acet-ss-to-list ss) ) (if (null (setq prec (getint (acet-str-format "\nEnter number of decimal places: <%1> " (itoa (getvar "useri4")) ) ) ) ) (setq prec (getvar "useri4")) ) (setvar "useri4" prec) (setq ID_area_lst (mapcar 'vla-get-objectid Lobj_area)) (setq field_lst (mapcar '(lambda (id) (acet-str-format "%<\\AcObjProp Object(%<\\_ObjId %1>%).Area \\f \"%lu2%pr%2\">%+" (itoa id) (itoa prec) ) ) ID_area_lst ) ) (setq str (acet-str-format "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%" (vl-string-right-trim "+" (apply 'strcat field_lst)) (itoa prec) ) ) (while (OR (NOT (setq ent_T (car (entsel "\nPick a Text object for set sum area value" ) ) ) ) (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT")) ) (prompt "\nPick not right TEXT object, please pick again") ) (setq Obj_Text (vlax-ename->vla-object ent_T)) (vla-put-TextString Obj_Text str) ) ;_PROGN ) ;_IF (ACET-SYSVAR-RESTORE) (command "undo" "en") (princ "\nOK") (PRINC) ) ;;;================================================================== 5: CIRCUMFERENCEs: CHU VI VÒNG TRÒN (defun c:fdt5 (/ ss ent_T Obj_Text Lobj_CIR ID_CIR_lst str prec field_lst) (vl-load-com) (command "undo" "be") (defun *error* (msg) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **")) ) (acet-sysvar-restore) (command "undo" "en") (princ) ) (acet-sysvar-set '("cmdecho" 0 "osmode" 0)) (acet-ui-status "Select: CIRCLE for GET SUM CIRCUMFERENCE" "Prompt") (setq ss (ssget '((0 . "CIRCLE")))) (acet-ui-status) (while (OR (NOT (setq ent_T (car (entsel "\nPick a Text object for set sum circumference value" ) ) ) ) (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT")) ) (prompt "\nPick not right TEXT object, please pick again") ) (setq Obj_Text (vlax-ename->vla-object ent_T)) (if ss (progn (mapcar '(lambda (x) (setq Lobj_CIR (CONS (vlax-ename->vla-object x) Lobj_CIR)) ) (acet-ss-to-list ss) ) (if (null (setq prec (getint (acet-str-format "\nEnter number of decimal places: <%1> " (itoa (getvar "useri5")) ) ) ) ) (setq prec (getvar "useri5")) ) (setvar "useri5" prec) (setq ID_CIR_lst (mapcar 'vla-get-objectid Lobj_CIR)) (setq field_lst (mapcar '(lambda (id) (acet-str-format "%<\\AcObjProp Object(%<\\_ObjId %1>%).Circumference \\f \"%lu2%pr%2\">%+" (itoa id) (itoa prec) ) ) ID_CIR_lst ) ) (setq str (acet-str-format "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%" (vl-string-right-trim "+" (apply 'strcat field_lst)) (itoa prec) ) ) (vla-put-TextString Obj_Text str) ) ;_PROGN ) ;_IF (ACET-SYSVAR-RESTORE) (command "undo" "en") (princ "\nOK") (PRINC) ) 910.1 thì nó ra 910.100000; Nhờ các ae chỉ ra chỗ còn khiếm khuyết này) <<
| ||
Tác giả: HoangSon614 Bài viết gốc: 93518 Tên lệnh: blkqty |
Viết lisp theo yêu cầu [phần 2]
| ||
Tác giả: thiep Bài viết gốc: 445415 Tên lệnh: jdk |
Nhờ viết lisp (nối đường line có điều kiên)
Lisp này, như gộp chung cả 2 lệnh Join và Overkill. Trong lisp có 2 biến fuz1 và fuz2: Fuz1 là dung sai khoảng cách rời rạc để nối các đối tượng Line, Arc, lwpolyline lại với nhau, trong lisp Thiệp cho = "0.0" Fuz2 là sai số để so sánh 1 node (p2) nằm ngoài đoạn thẳng (p1-p3) với 1 góc (p2 p1 p3) rất nhỏ nào đó. Trong lisp, Thiệp cho Fuz2=0.003
Trong lệnh Overkill cũng có dung... >> Lisp này, như gộp chung cả 2 lệnh Join và Overkill. Trong lisp có 2 biến fuz1 và fuz2: Fuz1 là dung sai khoảng cách rời rạc để nối các đối tượng Line, Arc, lwpolyline lại với nhau, trong lisp Thiệp cho = "0.0" Fuz2 là sai số để so sánh 1 node (p2) nằm ngoài đoạn thẳng (p1-p3) với 1 góc (p2 p1 p3) rất nhỏ nào đó. Trong lisp, Thiệp cho Fuz2=0.003 Trong lệnh Overkill cũng có dung sai, nhưng tôi thử nhiều lần với 1 góc Grad rất nhỏ 1/100.000.000 mà nó cũng không nhận ra. Ví dụ: 1 điểm p2 ở khoảng giữa đoạn thẳng p1-p3 dài 200km nằm chênh với đoạn thẳng p1-p3 này là 1mm, lệnh Overkill không nhận ra để kill nó đi. Lisp Thiệp viết làm được điều này với dung sai fuz2.
(defun DXF (code en) (cdr (assoc code (entget en))))
(defun c:jdk (/ ss1 ent obj polst1 polst2 ss1 ss2
v1 v2 scalar_prod ent-lst lst_bul bul1 bul2
n po1 po2 po3
)
(command "undo" "be")
(defun *error* (msg)
(or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n** Error: " msg " **"))
)
(acet-sysvar-restore)
(command "undo" "en")
(princ)
)
(acet-sysvar-set '("cmdecho" 0 "osmode" 0))
(setq ss1 (ssget '((0 . "LINE,*POLYLINE,ARC"))))
(if ss1
(progn
(setq Fuz1 "0.0")
(if (> (sslength ss1) 1)
(progn
(mapcar '(lambda (x) (setq lst (cons (dxf 0 x) lst)))
(setq
ent-lst (vl-remove-if 'listp
(mapcar 'cadr (ssnamex ss1))
)
)
)
(setq ss1 (ssadd))
(foreach ent ent-lst
(if (or (eq (dxf 0 ent) "ARC") (eq (dxf 0 ent) "LINE"))
(progn (command "_pedit" ent "" "")
(setq ss1 (ssadd (entlast) ss1))
)
(setq ss1 (ssadd ent ss1))
)
)
(command "_.pedit" "M" ss1 "" "J" Fuz1 "")
(setq ent (entlast))
)
(setq ent (ssname ss1 0))
)
(setq fuz2 3e-3)
(setq obj (vlax-ename->vla-object ent))
(setq lst_bul nil)
(setq polst1 (acet-geom-vertex-list ent))
(setq n 0)
(foreach po polst1
(if (/= (setq bul (vla-GetBulge obj n)) 0.0)
(setq lst_bul (append lst_bul (List (cons (trans po 1 0) (list bul)))))
)
(setq n (+ n 1))
)
(setq polst1 (acet-list-remove-duplicates polst1 nil))
(setq polst2 polst1)
(setq n 0)
(while (<= n (- (length polst1) 2))
(setq po1 (trans (nth n polst1) 1 0)
po2 (nth (+ n 1) polst1)
po3 (nth (+ n 2) polst1)
)
(if po2 (setq po2 (trans (nth (+ n 1) polst1) 1 0)))
(if po3 (setq po3 (trans (nth (+ n 2) polst1) 1 0)))
(setq bul1 (vla-GetBulge obj (vlax-curve-getParamAtpoint obj po1))
bul2 (vla-GetBulge obj (vlax-curve-getParamAtpoint obj po2))
)
(cond ((and (/= bul1 0.0) (= bul2 0.0) po3) (setq n (+ n 1)))
((and (/= bul2 0.0) po3) (setq n (+ n 2)))
((and (= bul1 0.0) (= bul2 0.0) po3)
(setq v1 (mapcar '- po1 po2)
v2 (mapcar '- po3 po2)
)
(setq scalar_prod (- (* (car v1) (cadr v2))
(* (cadr v1) (car v2))
)
)
(if (equal scalar_prod 0 fuz2) ;_
(setq polst2 (vl-remove po2 polst2))
)
(setq n (+ n 1))
)
(T (setq n (+ n 1)))
)
)
(acet-lwpline-make (list polst2))
(entdel ent)
(setq obj (vlax-ename->vla-object (entlast)))
(mapcar '(lambda (lst)
(vla-setBulge obj
(vlax-curve-getParamAtpoint obj (car lst))
(cadr lst)
)
)
lst_bul
)
) ;_
) ;_
(ACET-SYSVAR-RESTORE)
(command "undo" "en")
(princ "\nOK")
(princ)
)
<<
| ||
Tác giả: vbao Bài viết gốc: 5032 Tên lệnh: jpt |
Nối các điểm chèn text thành những đoạn thẳng theo yêu cầu
| ||
Tác giả: Biet ve CAD Bài viết gốc: 445393 Tên lệnh: jp |
Nhờ viết lisp (nối đường line có điều kiên)
Mình làm thử đoạn lisp này, áp dụng cho các đối tượng liền nhau ( cách nhau 1 khoảng 0.1) và dùng cho 1 cụm các đối tượng đó (defun C:jp ( / o) Mình làm thử đoạn lisp này, áp dụng cho các đối tượng liền nhau ( cách nhau 1 khoảng 0.1) và dùng cho 1 cụm các đối tượng đó (defun C:jp ( / o) (setq o (getvar 'PEDITACCEPT)) (setvar 'PEDITACCEPT 1) (vl-cmdf "PEDIT" "M" (ssget) "" "J" 0.1 "") (vl-cmdf "-OVERKILL" (entlast) "" "O" 0.1 "D") (setvar 'PEDITACCEPT o) )
<<
| ||
Tác giả: ngokiet Bài viết gốc: 445499 Tên lệnh: vc |
Hướng dẫn lập trình Lisp
| ||
Tác giả: duy782006 Bài viết gốc: 438722 Tên lệnh: ftp |
nhờ viết lisp hoặc sửa chương trình chuyển số liệu đo bình đồ từ máy thủy binh
| ||
Tác giả: ngokiet Bài viết gốc: 445521 Tên lệnh: test2 |
autolisp diện tích giống lệnh area nhưng có thêm mục ghi text ra luôn
|
Trang 309/330