kts.ngocquan 37 Báo cáo bài đăng Đã đăng Tháng 4 23, 2007 Anh em ai có lệnh extrim ko Tôi load lisp của tôi vào thì lệnh extrim của cad ko thèm chạy :lol: Ai có cách nào ko ? Tôi khoái lệnh này lắm nhưng mà bỏ lisp thì teo Help me !!!!!!! Chia sẻ bài đăng này Liên kết tới bài đăng Chia sẻ trên các trang web khác
Nguyen Hoanh 4.663 Báo cáo bài đăng Đã đăng Tháng 4 23, 2007 Anh em ai có lệnh extrim koTôi load lisp của tôi vào thì lệnh extrim của cad ko thèm chạy :lol: Ai có cách nào ko ? Tôi khoái lệnh này lắm nhưng mà bỏ lisp thì teo Help me !!!!!!! Đây là một vấn đề thú vị. Lệnh Extrim nằm trong file extrim.lsp. Nhưng nếu upload mỗi file extrim.lsp thì hàm không hoạt động được. Lý do là file extrim.lsp này lại sử dụng một số hàm từ bên ngoài. Cụ thể là các hàm: acet-error-init acet-ui-single-select acet-geom-object-point-list acet-layer-locked acet-error-restore acet-dxf acet-currentviewport-ename acet-ucs-cmd acet-geom-object-point-list acet-geom-list-extents acet-viewport-lock-set acet-geom-object-point-list acet-geom-pixel-unit acet-geom-self-intersect acet-ss-visible acet-ucs-set-z acet-viewport-lock-set acet-pline-make acet-geom-vertex-list acet-geom-view-points acet-geom-m-trans acet-geom-m-trans acet-geom-midpoint acet-geom-delta-vector acet-geom-vector-scale acet-geom-vector-add các hàm này nằm trong 2 file acetutil2.fas và acetutil.fas. Nhưng nếu load 2 file này thì lệnh vẫn chưa chạy được vì một số hàm trong tập hàm trên lại gọi các hàm ngoài của nó. Cụ thể là gọi hàm acet-str-replace và acet-ui-progress. Hai hàm này nằm đâu thì tôi chịu, chắc chỉ có AutoDesk mới giải thích được. Nhưng thật may mắn, các hàm gọi 2 hàm ngoài này chỉ là những hàm không quan trọng thuộc về ucs và vport. Vì thế, chúng ta có thể modify file extrim.lsp để "cắt" vứt các hàm này để extrim vẫn hoạt động bình thường. Và kết quả ta có 1 file extrim.lsp mới: (load "acetutil2.fas") (load "acetutil.fas") (defun c:extrim (/ na e1 p1 redraw_it lst n) (acet-error-init (list (list "cmdecho" 0 "highlight" 0 "regenmode" 1 "osmode" 0 "ucsicon" 0 "offsetdist" 0 "attreq" 0 "plinewid" 0 "plinetype" 1 "gridmode" 0 "celtype" "CONTINUOUS" "ucsfollow" 0 "limcheck" 0 ) T ;flag. True means use undo for error clean up. '(if redraw_it (redraw na 4) ) ) ;list ) ;acet-error-init (princ "\nPick a POLYLINE, LINE, CIRCLE, ARC, ELLIPSE, IMAGE or TEXT for cutting edge..." ) (setq na (acet-ui-single-select '((-4 . " (0 . "CIRCLE") (0 . "ARC") (0 . "LINE") (0 . "ELLIPSE") (0 . "ATTDEF") (0 . "TEXT") (0 . "MTEXT") (0 . "IMAGE") (0 . "SPLINE") (0 . "INSERT") (0 . "SOLID") (0 . "3DFACE") (0 . "TRACE") (0 . "LWPOLYLINE") (-4 . " (0 . "POLYLINE") (-4 . " (-4 . "&") (70 . 112) (-4 . "NOT>") (-4 . "AND>") (-4 . "OR>") ) T ) ;acet-ui-single-select ) ;setq (if na (progn (setq e1 (entget na)) ;;setq (if (or (equal "TEXT" (cdr (assoc 0 e1))) (equal "MTEXT" (cdr (assoc 0 e1))) (equal "ATTDEF" (cdr (assoc 0 e1))) (equal "IMAGE" (cdr (assoc 0 e1))) (equal "INSERT" (cdr (assoc 0 e1))) (equal "SOLID" (cdr (assoc 0 e1))) (equal "3DFACE" (cdr (assoc 0 e1))) (equal "TRACE" (cdr (assoc 0 e1))) ) ;or (progn (setq lst (acet-geom-object-point-list na nil)) (setq n 0) (command "_.pline") (repeat (length lst) (command (nth n lst)) (setq n (+ n 1)) ;setq ) ;repeat (if (not (equal (car lst) (last lst) 0.0000001)) (command "_cl") (command "") ) ;if (setq na (entlast) e1 na ) ;setq ) ;progn then draw a temp pline to be the cutting edge. (setq e1 nil) ) ;if (redraw na 3) (setq redraw_it T) (setq p1 (getpoint "\nSpecify the side to trim on:")) ;setq (redraw na 4) (setq redraw_it nil) (command ".ucs" "w") (if p1 (etrim na p1) ) ;if (if e1 (progn (if (setq p1 (acet-layer-locked (getvar "clayer"))) (command "_.layer" "_un" (getvar "clayer") "") ) ;if (entdel e1) (if p1 (command "_.layer" "_lock" (getvar "clayer") "") ) ;if ) ;progn then ) ;if ) ;progn ) ;if (acet-error-restore) (command ".ucs" "p") (princ) ) ;defun c:extrim ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ;Entity-TRIM function ;takes: na - entity name ; a - a point, the side to trim on ;NOTE: This function does not allow for the possible miss of ; non-continuous linetypes. ; (defun etrim (na a / la b d e1 lst lst2 n j k m ss na2 na3 na4 x y z flag flag2 flag3 zlst vpna vplocked ) (setq e1 (entget na)) ;setq (if (or (setq flag (equal (acet-dxf 0 e1) "POLYLINE")) (setq flag (equal (acet-dxf 0 e1) "LWPOLYLINE")) (equal (acet-dxf 0 e1) "LINE") (equal (acet-dxf 0 e1) "CIRCLE") (equal (acet-dxf 0 e1) "ARC") (equal (acet-dxf 0 e1) "ELLIPSE") (equal (acet-dxf 0 e1) "TEXT") (equal (acet-dxf 0 e1) "ATTDEF") (equal (acet-dxf 0 e1) "MTEXT") (equal (acet-dxf 0 e1) "SPLINE") ) ;or (progn (if (and flag (equal 8 (logand 8 (acet-dxf 70 e1))) ) ;and (setq flag nil) ) ;if (setq a (trans a 1 0) ) ;setq (setq lst (acet-geom-object-point-list na nil) ;;;find extents of selected cutting edge object lst (acet-geom-list-extents lst) x (- (car (cadr lst)) (car (car lst))) y (- (cadr (cadr lst)) (cadr (car lst))) x (* 0.075 x) y (* 0.075 y) z (list x y) x (list (+ (car (cadr lst)) (car z)) (+ (cadr (cadr lst)) (cadr z)) ) ;list y (list (- (car (car lst)) (car z)) (- (cadr (car lst)) (cadr z)) ) ;list zlst (zoom_2_object (list x y)) ) ;setq (command "_.zoom" "_w" (car zlst) (cadr zlst)) (entupd na) ;;;update the ent. so it's curves display smoothly (setq lst (acet-geom-object-point-list na (/ (acet-geom-pixel-unit) 2.0) ) ) ;setq (if (or (not flag) (not (acet-geom-self-intersect lst nil)) ) ;or (progn ;then the object is valid and not a self intersecting polyline. (if (and flag (equal (car lst) (last lst) 0.0001) ) ;and (setq flag3 T) ;then the polyline could potentialy need a second offset ) ;if (if (setq la (acet-layer-locked (getvar "clayer"))) (command "_.layer" "_unl" (getvar "clayer") "") ) ;if (command "_.pline") (setq b nil) (setq n 0) ;setq (repeat (length lst) (setq d (nth n lst)) (if (not (equal d b 0.0001)) (progn (command d) (setq lst2 (append lst2 (list d))) ;setq (setq b d) ;setq ) ;progn ) ;if (setq n (+ n 1)) ) ;repeat (command "") (setq na2 (entlast) ss (ssadd) ss (ssadd na2 ss) lst nil ) ;setq (acet-ss-visible ss 1) (setq lst2 (get_fence_points na2 a lst2 flag3 flag)) ;setq (if la (command "_.layer" "_lock" (getvar "clayer") "") ) ;if ;Move the ents to force a display update of the ents to avoid viewres problems. (setvar "highlight" 0) (if (setq ss (ssget "_f" (last lst2))) (command "_.move" ss "" "0,0,0" "0,0,0") ) ;if (if flag (progn (if (setq la (acet-layer-locked (acet-dxf 8 e1))) (command "_.layer" "_unl" (acet-dxf 8 e1) "") ) ;if (acet-ucs-set-z (acet-dxf 210 e1)) (command "_.copy" na "" "0,0,0" "0,0,0") ;(entdel na) (acet-ss-visible (ssadd na (ssadd)) 1) ;make it invisible for a while. ;rk 12:01 PM 3/10/98 (setq na3 na na (entlast) ) ;setq (command "_.pedit" na "_w" "0.0" "_x") (acet-ucs-cmd (list "_p")) (if la (command "_.layer" "_lock" (acet-dxf 8 e1) "") ) ;if ) ;progn ) ;if (command "_.trim" na "") (setq m (- (length lst2) 1)) ;setq (setq k 0) (repeat (length lst2) (setq lst (nth k lst2)) (setq a (trans (car lst) 0 1)) (setq n 1) (repeat (- (length lst) 1) ;repeat each fence list (setq b (trans (nth n lst) 0 1)) (if (equal a b 0.0001) (setq flag2 T) (setq flag2 nil) ) ;if (setq na4 nil) ;setq (setq j 0) ;setq (while (not flag2) ;repeat each segment of the fence until no new ents are created. (setq na4 (entlast)) ;setq (command "_F" a b "") (if (and (equal na4 (entlast)) (or (not (equal k m)) (> j 0) ) ;or ) ;and (setq flag2 T) ) ;if (setq j (+ j 1)) ;setq ) ;while (setq a :lol: ;setq (setq n (+ n 1)) ;setq ) ;repeat (setq k (+ k 1)) ) ;repeat (command "") (if flag (progn (if (setq la (acet-layer-locked (acet-dxf 8 e1))) (command "_.layer" "_unl" (acet-dxf 8 e1) "") ) ;if (entdel na) ;get rid of the copy ;(entdel na3);bring back the original (acet-ss-visible (ssadd na3 (ssadd)) 0) ;bring back the original ;rk 12:01 PM 3/10/98 (if la (command "_.layer" "_lock" (acet-dxf 8 e1) "") ) ;if ) ;progn ) ;if ) ;progn (progn (acet-ucs-cmd (list "_p")) (princ "\nSelf intersecting edges are not acceptable.") ) ;progn else invalid self intersecting polyline ) ;if (command "_.zoom" "_p") ) ;progn then it's a most likely a valid entity. ) ;if ) ;defun etrim ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun another_offset (pl1 pl2 a1 a2 b na2 lst2 a lst3 lst4 / na ss lst da1 da2) (setq da1 (abs (- a2 a1))) ;setq (setq da2 (- (* b (max pl2 pl1)) (/ (* b (abs (- pl2 pl1))) 2.0 ) ) ) ;setq (if (> (abs (- da2 da1)) (* 0.01 (max a1 a2)) ) (progn (acet-pline-make (list lst2)) (setq na (entlast) na2 (entlast) ss (ssadd) ss (ssadd na ss) ) ;setq (acet-ss-visible ss 1) (command "_.offset" b na2 a "") (if (and (not (equal na (entlast))) (setq lst3 (acet-geom-vertex-list (entlast))) (setq lst3 (intersect_check lst2 lst3 lst4)) ) ;and (progn (acet-ss-visible (ssadd (entlast) (ssadd)) 1) (command "_.area" "_ob" (entlast)) (setq pl2 (getvar "perimeter") a2 (getvar "area") ) ;setq (setq lst (list (acet-geom-vertex-list (list (entlast) 0)))) ;setq (entdel (entlast)) ;then offset was a success so delete the ent after getting it's info ) ;progn then (if (not (equal na (entlast))) (entdel (entlast)) ) ;if else ) ;if (entdel na2) ) ;progn then let's do that second offset ) ;if lst ) ;defun another_offset ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun get_fence_points (na2 a lst2 flag plflag / a1 a2 pl1 pl2 b c d n lst lst2 lst3 lst4 na ) (if flag (progn (setq lst2 (cdr lst2)) ;setq (repeat (fix (/ (length lst2) 2)) (setq lst2 (append (cdr lst2) (list (car lst2))) ;append ) ;setq ) ;repeat (setq lst2 (append lst2 (list (car lst2)))) ;setq (command "_.area" "_ob" na2) (setq pl1 (getvar "perimeter") a1 (getvar "area") ) ;setq ) ;progn ) ;if (setq a (trans a 0 1) b (* (getvar "viewsize") 0.05) ;initial offset distance n 3.0 ;number of offsets d (/ b (- n 1)) ;delta offset c (acet-geom-pixel-unit) lst4 (acet-geom-view-points) ) ;setq (while (> b c) (setq na (entlast)) (command "_.offset" b na2 a "") (if (and (not (equal na (entlast))) (setq lst3 (acet-geom-vertex-list (entlast))) (or (not plflag) (setq lst3 (intersect_check lst2 lst3 lst4)) ) ;or ) ;and (progn (setq lst3 (acet-geom-m-trans lst3 1 0)) (acet-ss-visible (ssadd (entlast) (ssadd)) 1) (if flag (progn (command "_.area" "_ob" (entlast)) (setq pl2 (getvar "perimeter") a2 (getvar "area") ) ;setq ) ;progn ) ;if (setq lst (append lst (list lst3))) ;setq (entdel (entlast)) ;delete the ent after getting it's vertex info (if flag (setq lst (append lst (another_offset pl1 pl2 a1 a2 b na2 lst2 a lst3 lst4) ) ;append ) ;setq ) ;if ) ;progn then offset was a success (if (not (equal na (entlast))) (entdel (entlast)) ) ;if else ) ;if (setq b (- b d)) ;setq ) ;while (setq na (entlast)) (command "_.offset" c na2 a "") (if (and (not (equal na (entlast))) (setq lst3 (acet-geom-vertex-list (entlast))) (or (not plflag) (setq lst3 (intersect_check lst2 lst3 lst4)) ) ;or ) ;and (progn (setq lst3 (acet-geom-m-trans lst3 1 0)) (acet-ss-visible (ssadd (entlast) (ssadd)) 1) (if flag (progn (command "_.area" "_ob" (entlast)) (setq pl2 (getvar "perimeter") a2 (getvar "area") ) ;setq ) ;progn ) ;if (setq lst (append lst (list lst3))) ;setq (entdel (entlast)) ;then offset was a success so delete the ent after getting it's info (if flag (setq lst (append lst (another_offset pl1 pl2 a1 a2 c na2 lst2 a lst3 lst4) ) ;append ) ;setq ) ;if ) ;progn then (if (not (equal na (entlast))) (entdel (entlast)) ) ;if else ) ;if (entdel na2) lst ) ;defun get_fence_points ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;returns a list of points on screen if the first two lists do not ;contain segments that intersect each other. ; (defun intersect_check (lst lst2 lst3 / x x2 y y2 lst4 flag len len2 a aa b bb c d n j ) (setq len (length lst) len2 (length lst2) x (car (car lst3)) x2 (car (cadr lst3)) y (cadr (car lst3)) y2 (cadr (cadr lst3)) ) ;setq (setq n 0) ;setq (while (and (not flag) (:()) ) ;if (setq j 0) ;setq (while (and (not flag) (:D)) ;setq ) ;if (if (not flag) (setq flag lst4) (setq flag nil) ) ;if flag ) ;defun intersect_check ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun zoom_2_object (lst / p1 p2 p3 p4 p5 p6 mp dx dy dx2 dy2 r1 r2 na e1 x w h dv1 dv2 x) (setq lst (acet-geom-m-trans lst 1 2) p1 (acet-geom-m-trans (acet-geom-view-points) 1 2) ;p1 and p2 are the viewpnts p2 (cadr p1) p1 (car p1) p1 (list (car p1) (cadr p1)) p2 (list (car p2) (cadr p2)) ) ;setq (if lst (progn (setq p5 (acet-geom-list-extents lst) ;p5 and p6 are the geometry points p6 (cadr p5) p5 (car p5) p5 (list (car p5) (cadr p5)) p6 (list (car p6) (cadr p6)) mp (acet-geom-midpoint p5 p6) ;prepare to resize the geometry rectang to dx (- (car p2) (car p1)) ;have the same dy/dx ratio as p1 p2. dy (- (cadr p2) (cadr p1)) dx2 (- (car p6) (car p5)) dy2 (- (cadr p6) (cadr p5)) ) ;setq (if (equal dx 0.0) (setq dx 0.000001) ) ;just in case div by zero (if (equal dx2 0.0) (setq dx2 0.000001) ) (setq r1 (/ dy dx) r2 (/ dy2 dx2) ) ;setq (if ( (setq dy2 (* r1 dx2)) ;then scale dy2 up (progn (if (equal r1 0.0) (setq r1 0.000001) ) ;just in case div by zero (setq dx2 (* dy2 (/ 1.0 r1))) ;else scale dx2 up ) ;progn ) ;if (setq p5 (list (- (car mp) (/ dx2 1.98)) ;1.98 is used instead of 2.0 to expand (- (cadr mp) (/ dy2 1.98)) ;the rectangle slightly ) ;list p6 (list (+ (car mp) (/ dx2 1.98)) (+ (cadr mp) (/ dy2 1.98)) ) ;list ) ;setq ) ;progn then lst ) ;if (if (and lst (equal 0 (getvar "tilemode")) (not (equal 1 (getvar "cvport"))) (setq na (tblsearch "vport" "*active")) ) ;and (progn (setq e1 (entget na) x (cdr (assoc 10 e1)) w (cdr (assoc 40 e1)) h (cdr (assoc 41 e1)) p3 (list (- (car x) (/ w 2.0)) (- (cadr x) (/ h 2.0)) ) ;list p4 (list (+ (car x) (/ w 2.0)) (+ (cadr x) (/ h 2.0)) ) ;list p3 (trans p3 3 2) ;p3 and p4 are the viewport points p4 (trans p4 3 2) dv1 (acet-geom-delta-vector p1 p3) dv2 (acet-geom-delta-vector p2 p4) x (distance p1 p2) ) ;setq (if (equal 0 x) (setq x 0.000001) ) ;just in case (setq x (/ (distance p5 p6) x ) dv1 (acet-geom-vector-scale dv1 x) dv2 (acet-geom-vector-scale dv2 x) p5 (acet-geom-vector-add p5 dv1) p6 (acet-geom-vector-add p6 dv2) ) ;setq ) ;progn then ) ;if (setq p1 (list (car p1) (cadr p1) 0.0) p2 (list (car p2) (cadr p2) 0.0) p5 (list (car p5) (cadr p5) 0.0) p6 (list (car p6) (cadr p6) 0.0) ) ;setq (if lst (setq lst (list (trans p5 2 1) (trans p6 2 1) ) ;list ) ;setq (setq lst nil) ) ;if lst ) ;defun zoom_2_object (princ) Như vậy, bạn có thể dùng được file trên kết hợp với 2 file acetutil2.fas và acetutil.fas. Nếu ACAD của bạn không có express thì bạn có thể download 2 file đó dưới đây rồi copy nó vào thư mục support của ACAD. Sau đó load file cvextrim.lsp lên và dùng như lệnh extrim của ACAD chuẩn. http://www.cadviet.com/upfiles/cvextrim.lsp http://www.cadviet.com/upfiles/acetutil2.fas http://www.cadviet.com/upfiles/acetutil.fas 2 Chia sẻ bài đăng này Liên kết tới bài đăng Chia sẻ trên các trang web khác
kts.ngocquan 37 Báo cáo bài đăng Đã đăng Tháng 4 24, 2007 Khi tôi copy vào support ở cả 2 nơi C:\Program Files\AutoCAD 2007\Support và C:\Documents and Settings\Nguyen_ngoc_Quan\Application Data\Autodesk\AutoCAD 2007\R17.0\enu\Support thì đều xuất hiện dòng dưới và ko cắt tỉa gì cả Bạn có thể giúp tôi xỬ lý đc ko ?? Thanks for U Command: Specify the side to trim on: no function definition: BNS_TRUNCATE_2_VIEW Command: ; error: An error has occurred inside the *error* functionno function definition: ACET-UI-PROGRESS Chia sẻ bài đăng này Liên kết tới bài đăng Chia sẻ trên các trang web khác
Nguyen Hoanh 4.663 Báo cáo bài đăng Đã đăng Tháng 4 24, 2007 Như tôi đã nói, hàm trong 2 file fas này lại gọi các hàm ở trong file khác và không biết file "khác" này là file nào nên đành chịu. Vả lại, chỉ cần cài đúng cách là bộ Express Tools hoạt động ngay mà không cần đi quá sâu vào ACAD. Chia sẻ bài đăng này Liên kết tới bài đăng Chia sẻ trên các trang web khác
kts.ngocquan 37 Báo cáo bài đăng Đã đăng Tháng 4 25, 2007 Thanks for :lol: U Chia sẻ bài đăng này Liên kết tới bài đăng Chia sẻ trên các trang web khác
TokyoNhat 16 Báo cáo bài đăng Đã đăng Tháng 10 25, 2010 Bác hoanh cho e hỏi với , e đã làm đúng hướng dẫn của bác khi đánh lênh extrim và pick vaò 1 rectang bo 1 vùng thì thì máy báo function definition: ACET-UI-PROGRESS và không cắt được đối tượng vậy ? Chia sẻ bài đăng này Liên kết tới bài đăng Chia sẻ trên các trang web khác
ketxu 2.984 Báo cáo bài đăng Đã đăng Tháng 10 26, 2010 Bác hoanh cho e hỏi với , e đã làm đúng hướng dẫn của bác khi đánh lênh extrim và pick vaò 1 rectang bo 1 vùng thì thì máy báo function definition: ACET-UI-PROGRESSvà không cắt được đối tượng vậy ? 1 topic chỉ có mấy bài bên trên,bạn nên chịu khó đọc những dòng a Hoành đã nói rõ về vấn đề này Chia sẻ bài đăng này Liên kết tới bài đăng Chia sẻ trên các trang web khác