NgọcH
-
Số lượng nội dung
38 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
1
Bài đăng được đăng bởi NgọcH
-
-
-
Sửa lisp Xline
trong AutoLisp
cảm ơn a thứ e tìm đây rùi
Vào lúc 3/4/2025 tại 22:35, amateurday đã nói:không hiểu câu hỏi lắm.
(defun c:xv() (command "XLINE" "V" pause) ) (defun c:xh() (command "XLINE" "H" pause) ) (defun c:xa() (command "XLINE" "a" pause) ) -
bác ơi link lisp bị hỏng rồi bác cho em xin lại được không ạ
-
Sửa lisp Xline
trong AutoLisp
Chào mọi người, e vừa xem được 1 lisp của Leemac về dóng đường Xline. Các bác có thể sửa giúp e cho nó hiện đường dóng giống như lệnh Xline mặc định trong cad được không ạ. file lisp e có để ở bên dưới, e cảm ơn ạ
-
42 phút trước, conghoa đã nói:Mình có ghi chú ở bên trên rồi mà :) , lisp gốc của Lee cũng bị thế
nếu đặt theo 1 phương X hoặc Y thì mình thấy nó sẽ không bị. hơi khó
-
1 giờ} trướ}c, conghoa đã nói:Mình xin dừng lại đây :) , AI mình cũng chỉ bảo nó làm dc như cái đầu tiên thôi :D . Chờ các cao nhân hỗ trợ
cái của b dùng ngon rồi bị mỗi cái chưa đưa text về layer hiện hành với nó đang đưa cả kích thước của hình bên trong. tiếc quá
-
Nó lỗi luôn rùi b ơi. Với lại có cách nào để bỏ qua hình bên trong không điền kích thước không b
52 phút trước, conghoa đã nói:;; Minimum Bounding Box - Lee Mac (modified) (defun LM:minboundingbox ( sel tol / ang box bx1 bx2 cen idx lst obj rtn wid len pts edges) (if (and sel (< 0.0 tol 1.0)) (progn (repeat (setq idx (sslength sel)) (setq obj (vlax-ename->vla-object (ssname sel (setq idx (1- idx))))) (if (and (vlax-method-applicable-p obj 'getboundingbox) (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list obj 'a 'b)))) ) (setq lst (cons (vla-copy obj) lst)) ) ) (if lst (progn (setq box (LM:objlstboundingbox lst) tol (* tol pi) cen (apply 'mapcar (cons '(lambda ( a b ) (/ (+ a b) 2.0)) box)) bx1 (* (- (caadr box) (caar box)) (- (cadadr box) (cadar box))) rtn (list 0.0 box) ang 0.0 ) (while (< (setq ang (+ ang tol)) pi) (foreach obj lst (vlax-invoke obj 'rotate cen tol)) (setq box (LM:objlstboundingbox lst) bx2 (* (- (caadr box) (caar box)) (- (cadadr box) (cadar box))) ) (if (< bx2 bx1) (setq bx1 bx2 rtn (list ang box)) ) ) (foreach obj lst (vla-delete obj)) (setq pts (LM:rotatepoints (mapcar '(lambda ( a ) (mapcar '(lambda ( b ) (apply b (cdr rtn))) a)) '( (caar cadar) (caadr cadar) (caadr cadadr) (caar cadadr) ) ) cen (- (car rtn)) ) ) (setq edges (list (distance (nth 0 pts) (nth 1 pts)) (distance (nth 1 pts) (nth 2 pts)) (distance (nth 2 pts) (nth 3 pts)) (distance (nth 3 pts) (nth 0 pts)) ) ) (setq len (apply 'max edges)) (setq wid (apply 'min edges)) (list pts len wid) ) ) ) ) ) ;; Object List Bounding Box - Lee Mac (defun LM:objlstboundingbox ( lst / llp ls1 ls2 urp ) (foreach obj lst (vla-getboundingbox obj 'llp 'urp) (setq ls1 (cons (vlax-safearray->list llp) ls1) ls2 (cons (vlax-safearray->list urp) ls2) ) ) (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list ls1 ls2)) ) ;; Rotate Points - Lee Mac (defun LM:rotatepoints ( lst bpt ang / mat vec ) (setq mat (list (list (cos ang) (sin (- ang)) 0.0) (list (sin ang) (cos ang) 0.0) '(0.0 0.0 1.0) ) ) (setq vec (mapcar '- bpt (mxv mat bpt))) (mapcar '(lambda ( x ) (mapcar '+ (mxv mat x) vec)) lst) ) ;; Matrix x Vector - Vladimir Nesterovsky (defun mxv ( m v ) (mapcar '(lambda ( r ) (apply '+ (mapcar '* r v))) m) ) (defun C:MinBoxToPline (/ sel plines text text_obj txtstyle txtheight txtlayer i pline cen result len wid txtdim pts edge1 edge2 long_edge text_angle box_ents) (vl-load-com) (setvar "CMDECHO" 0) ; Tat echo lenh (princ "\nChon nhieu Pline kin de tinh bounding box va ghi kich thuoc: ") (if (setq plines (ssget '((0 . "LWPOLYLINE") (70 . 1)))) (progn (princ "\nChon text mau de lay thong so: ") (while (not (setq text (ssget ":S" '((0 . "TEXT"))))) (princ "\nVui long chon mot doi tuong Text!")) (setq text (ssname text 0)) (setq text_obj (vlax-ename->vla-object text)) (setq txtstyle (vla-get-StyleName text_obj)) (setq txtheight (vla-get-Height text_obj)) (setq txtlayer (vla-get-Layer text_obj)) ; Lay layer cua text goc (setvar "TEXTSTYLE" txtstyle) (setq box_ents '()) (setq i 0) (repeat (sslength plines) (setq pline (ssname plines i)) (setq sel (ssadd)) (ssadd pline sel) (setq result (LM:minboundingbox sel 0.01)) (if result (progn (setq pts (car result)) (setq len (cadr result)) (setq wid (caddr result)) (vla-GetBoundingBox (vlax-ename->vla-object pline) 'minpt 'maxpt) (setq cen (mapcar '/ (mapcar '+ (vlax-safearray->list minpt) (vlax-safearray->list maxpt)) '(2 2 2))) ; Xac dinh canh dai nhat va tinh goc nghieng, dong bo voi len va wid (setq edge1 (distance (nth 0 pts) (nth 1 pts))) (setq edge2 (distance (nth 1 pts) (nth 2 pts))) (if (> edge1 edge2) (progn (setq long_edge (list (nth 0 pts) (nth 1 pts))) (setq text_angle (angle (nth 0 pts) (nth 1 pts))) (setq len edge1 wid edge2) ) (progn (setq long_edge (list (nth 1 pts) (nth 2 pts))) (setq text_angle (angle (nth 1 pts) (nth 2 pts))) (setq len edge2 wid edge1) ) ) ; Dieu chinh goc text de khong bi nguoc (cond ((and (> text_angle (/ pi 2)) (<= text_angle (* pi 1.5))) ; 90° den 270° (setq text_angle (- text_angle pi))) ; Giam 180° ((> text_angle (* pi 1.5)) ; > 270° (setq text_angle (- text_angle (* 2 pi)))) ; Giam 360° ((< text_angle (- (/ pi 2))) ; < -90° (setq text_angle (+ text_angle pi))) ; Cong 180° ) (setq txtdim (strcat (rtos wid 2 2) "x" (rtos len 2 2))) (command "_TEXT" "_J" "_MC" cen txtheight (* 180 (/ text_angle pi)) txtdim) ; Dat layer cua text moi giong text goc (if (tblobjname "LAYER" txtlayer) (command "_CHPROP" (entlast) "" "_LA" txtlayer "") (princ (strcat "\nLayer '" txtlayer "' khong ton tai!")) ) (entmake (append '( (000 . "LWPOLYLINE") (100 . "AcDbEntity") (100 . "AcDbPolyline") (090 . 4) (070 . 1) ) (mapcar '(lambda ( p ) (cons 10 p)) pts) ) ) (setq box_ents (cons (entlast) box_ents)) ) (princ (strcat "\nKhong the tinh bounding box cho Pline thu " (itoa (1+ i)) ".")) ) (setq i (1+ i)) ) (foreach ent box_ents (if (entget ent) (entdel ent)) ) (princ "\nDa ghi kich thuoc vao cac Pline va xoa bounding box!") ) (princ "\nKhong co Pline kin nao duoc chon.") ) (setvar "CMDECHO" 1) (princ) ) (vl-load-com) (princ)Bạn thử lại xem được chưa.
-
1 giờ} trướ}c, conghoa đã nói:;; Minimum Bounding Box - Lee Mac (modified) (defun LM:minboundingbox ( sel tol / ang box bx1 bx2 cen idx lst obj rtn wid len pts edges) (if (and sel (< 0.0 tol 1.0)) (progn (repeat (setq idx (sslength sel)) (setq obj (vlax-ename->vla-object (ssname sel (setq idx (1- idx))))) (if (and (vlax-method-applicable-p obj 'getboundingbox) (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list obj 'a 'b)))) ) (setq lst (cons (vla-copy obj) lst)) ) ) (if lst (progn (setq box (LM:objlstboundingbox lst) tol (* tol pi) cen (apply 'mapcar (cons '(lambda ( a b ) (/ (+ a b) 2.0)) box)) bx1 (* (- (caadr box) (caar box)) (- (cadadr box) (cadar box))) rtn (list 0.0 box) ang 0.0 ) (while (< (setq ang (+ ang tol)) pi) (foreach obj lst (vlax-invoke obj 'rotate cen tol)) (setq box (LM:objlstboundingbox lst) bx2 (* (- (caadr box) (caar box)) (- (cadadr box) (cadar box))) ) (if (< bx2 bx1) (setq bx1 bx2 rtn (list ang box)) ) ) (foreach obj lst (vla-delete obj)) (setq pts (LM:rotatepoints (mapcar '(lambda ( a ) (mapcar '(lambda ( b ) (apply b (cdr rtn))) a)) '( (caar cadar) (caadr cadar) (caadr cadadr) (caar cadadr) ) ) cen (- (car rtn)) ) ) (setq edges (list (distance (nth 0 pts) (nth 1 pts)) (distance (nth 1 pts) (nth 2 pts)) (distance (nth 2 pts) (nth 3 pts)) (distance (nth 3 pts) (nth 0 pts)) ) ) (setq len (apply 'max edges)) (setq wid (apply 'min edges)) (list pts len wid) ) ) ) ) ) ;; Object List Bounding Box - Lee Mac (defun LM:objlstboundingbox ( lst / llp ls1 ls2 urp ) (foreach obj lst (vla-getboundingbox obj 'llp 'urp) (setq ls1 (cons (vlax-safearray->list llp) ls1) ls2 (cons (vlax-safearray->list urp) ls2) ) ) (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list ls1 ls2)) ) ;; Rotate Points - Lee Mac (defun LM:rotatepoints ( lst bpt ang / mat vec ) (setq mat (list (list (cos ang) (sin (- ang)) 0.0) (list (sin ang) (cos ang) 0.0) '(0.0 0.0 1.0) ) ) (setq vec (mapcar '- bpt (mxv mat bpt))) (mapcar '(lambda ( x ) (mapcar '+ (mxv mat x) vec)) lst) ) ;; Matrix x Vector - Vladimir Nesterovsky (defun mxv ( m v ) (mapcar '(lambda ( r ) (apply '+ (mapcar '* r v))) m) ) (defun C:Test (/ sel plines text txtstyle txtheight i pline cen result len wid txtdim pts edge1 edge2 long_edge text_angle box_ents) (vl-load-com) (setvar "CMDECHO" 0) ; Tat echo lenh (princ "\nChon nhieu Pline kin de tinh bounding box va ghi kich thuoc: ") (if (setq plines (ssget '((0 . "LWPOLYLINE") (70 . 1)))) (progn (princ "\nChon text mau de lay kieu chu va chieu cao: ") (while (not (setq text (ssget ":S" '((0 . "TEXT"))))) (princ "\nVui long chon mot doi tuong Text!")) (setq text (ssname text 0)) (setq text_obj (vlax-ename->vla-object text)) (setq txtstyle (vla-get-StyleName text_obj)) (setq txtheight (vla-get-Height text_obj)) (setvar "TEXTSTYLE" txtstyle) (setq box_ents '()) (setq i 0) (repeat (sslength plines) (setq pline (ssname plines i)) (setq sel (ssadd)) (ssadd pline sel) (setq result (LM:minboundingbox sel 0.01)) (if result (progn (setq pts (car result)) (setq len (cadr result)) (setq wid (caddr result)) (vla-GetBoundingBox (vlax-ename->vla-object pline) 'minpt 'maxpt) (setq cen (mapcar '/ (mapcar '+ (vlax-safearray->list minpt) (vlax-safearray->list maxpt)) '(2 2 2))) ; Xac dinh canh dai nhat va tinh goc nghieng, dong bo voi len va wid (setq edge1 (distance (nth 0 pts) (nth 1 pts))) (setq edge2 (distance (nth 1 pts) (nth 2 pts))) (if (> edge1 edge2) (progn (setq long_edge (list (nth 0 pts) (nth 1 pts))) (setq text_angle (angle (nth 0 pts) (nth 1 pts))) (setq len edge1 wid edge2) ) (progn (setq long_edge (list (nth 1 pts) (nth 2 pts))) (setq text_angle (angle (nth 1 pts) (nth 2 pts))) (setq len edge2 wid edge1) ) ) ; Dieu chinh goc text de khong bi nguoc (cond ((and (> text_angle (/ pi 2)) (<= text_angle (* pi 1.5))) ; 90° den 270° (setq text_angle (- text_angle pi))) ; Giam 180° ((> text_angle (* pi 1.5)) ; > 270° (setq text_angle (- text_angle (* 2 pi)))) ; Giam 360° de ve khoang -90° den 90° ((< text_angle (- (/ pi 2))) ; < -90° (setq text_angle (+ text_angle pi))) ; Cong 180° ) (setq txtdim (strcat (rtos wid 2 2) "x" (rtos len 2 2))) (command "_TEXT" "_J" "_MC" cen txtheight (* 180 (/ text_angle pi)) txtdim) (entmake (append '( (000 . "LWPOLYLINE") (100 . "AcDbEntity") (100 . "AcDbPolyline") (090 . 4) (070 . 1) ) (mapcar '(lambda ( p ) (cons 10 p)) pts) ) ) (setq box_ents (cons (entlast) box_ents)) ) (princ (strcat "\nKhong the tinh bounding box cho Pline thu " (itoa (1+ i)) ".")) ) (setq i (1+ i)) ) (foreach ent box_ents (if (entget ent) (entdel ent)) ) (princ "\nDa ghi kich thuoc vao cac Pline va xoa bounding box!") ) (princ "\nKhong co Pline kin nao duoc chon.") ) (setvar "CMDECHO" 1) (princ) ) (vl-load-com) (princ)AI kết hợp với leemac, Bạn dùng thử, lưu ý là code của Lee cũng đang bị trường hợp khi cùng 1 hình với các góc xoay khác nhau thì lại ra kết quả khác nhau chút ít.
Tên lệnh là : Test
cảm ơn bạn lisp dùng ok nhưng có 1 vấn đề là text xuất ra layer và màu nó k giống với text mình chọn mẫu ý, bạn sửa giúp mình được không
-
9 phút trước, cuongtk2 đã nói:DimMinBox.zip Netload, Dùng lệnh đó luôn.
e muốn xuất ra text như hình cớ chứ ko phải dim a ah
-
-
cảm ơn a nhưng e ko biết xuất ra text như trên yêu cầu như nào ah với lại e xem thì nó vẽ luôn đường bao nhưng e ko muốn có đường bao chỉ xuất text thôi. a có thể giúp e không ạ
15 giờ trước, cuongtk2 đã nói:Trong Lee-Mac cũng có hàm (LM:minboundingbox sel tol) để lấy vùng bao tối thiểu cho tập hợp. Bằng cách rotate liên tục theo tol + 0->pi để tính bound có diện tích nhỏ nhất.
-
18 giờ trước, NTHAHT đã nói:Có vẻ như đây là chọn kích thước tấm nhỏ nhất kể cắt được như hình, vậy thì đoạn chữ tô màu diễn giải không chính xác. Xem hình thứ 2 và cuối ở cột bên trái thì sẽ thấy rõ.
e muốn xuất ra đường bao kích thước 2 cạnh lớn nhất thôi ah
-
E chào mọi người. Nhờ các cao nhân giúp đỡ lisp.
Có các đa giác là pline kín. E muốn ghi được text kích thước như trong ảnh thì có cách nào ko ạ, kích thước là chiều dài dim đoạn thằng lớn nhất của đa giác
Text xoay theo chiều cạnh dài
Kiểu text là layer là layer hiện hành, chiều cao chữ chọn 1 lần đầu tiên.
Và có thể quét chọn 1 lần nhiều đa giác được ko.
E cảm ơn ạ.
-
Vào lúc 30/9/2014 tại 17:21, nhoclangbat đã nói:- bạn cứ test thử nhiều trường hợp có lỗi pm nhoc hen ^^
;; free lisp from cadviet.com ;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/13750-lisp-tinh-gia-tri-trung-binh-cua-cac-text/page-3 (defun mktext (point height string justify style mau / lst) (setq lst (list '(0 . "TEXT") (cons 10 point) (cons 40 height) (cons 7 style) (cons 1 string) (cons 62 mau) ) justify (strcase justify)) (cond ((= justify "L") (setq Lst (append Lst (list (cons 72 0) (cons 11 point))))) ((= 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))))) ) (entmakex Lst) ) ;end mktext ;;;; (prompt "Lenh tinh trung binh cong cac so: TBCC") (defun C:tbcc(/ c tong mstbc num ss pt ctext kq old sty) (setq old (getvar "osmode")) (setq sty (getvar "textstyle")) (setq c -1 tong 0 mstbc 0) (if (setq ss (ssget '((0 . "TEXT")))) (progn (while (setq ename (ssname ss (setq c (1+ c)))) (if (setq num (distof (cdr (assoc 1 (entget ename))))) (setq tong (+ tong num) mstbc (1+ mstbc)) );if (if ename (progn (setq ctext (cdr (assoc 40 (entget ename)))) ;(setq glayer (cdr (assoc 8 (entget ename)))) ;(setq gstyle (cdr (assoc 7 (entget ename)))) ) ) );while (if (null (zerop mstbc)) (progn (setq kq (/ tong mstbc)) (setvar "osmode" 0) (setq pt (getpoint "\nchon diem dat ket qua:")) (mktext pt ctext (rtos kq 2 3) "L" sty 1) );progn );if );progn (alert "\nChua co doi tuong dc chon hoac ban chi chon toan text chu ^^") );if (setvar "osmode" old) (princ) )
Chào a, phiền a có thể chỉnh text xuất ra:
+ layer và màu theo layer hiện hành
+ kiểu text theo kiểu text hiện hành
+ chiều cao chữ do mình tự chọn
được không ạ
-
-
-
Vào lúc 2/7/2009 tại 12:46, gia_bach đã nói:bác ơi, bác có thể giúp e thành xóa các đối tượng nằm giữa 2 vùng kín được ko ( chỉ xóa các đối tượng, ko trim)
-
Layer DIM
trong Sử dụng AutoCAD
19 giờ trước, vietduc147258 đã nói:Vì lệnh này mà bỏ 2016 lên 2018. Tính ra cad mới lưu mạc định cũng 2018 nên cũng tiện nhiều thứ ghê.
Ngoài ra hình như có lệnh hplayer, textlayer, nữa thì phải. Có lệnh layer đường center line nữa
e cảm ơn ạ, dùng lệnh này ổn rồi hehe
-
Layer DIM
trong Sử dụng AutoCAD
17 giờ trước, vietduc147258 đã nói:DIMLAYER nếu cad 2018 hoặc cao hơn.
Nếu cad đời thấp thì dùng lisp.
Tham khảo
giờ mới biết có lệnh dimlayer, cái này khi mở bản vẽ mới là phải gõ lại lệnh phải ko b
-
Layer DIM
trong Sử dụng AutoCAD
Chào các bác, các bác cho hỏi có cách nào mỗi khi dim thì cad tự động dùng layer dim đó ko, e hay bị nhầm layer. Bản cad của e nhiều đối tượng vs block dùng filter hay bị đơ quá
-
Chào các bác, các bác cho e hỏi có lệnh cad hay lisp nào kiểm tra giống nhau của các đối tượng bao gồm cả vị trí sắp xếp không ạ. Ví dụ e muốn tìm so sánh các tấm giống với tấm e khoanh đỏ hoặc so sánh xem các tấm đã chọn có giống vs tấm khoanh đỏ hay ko ạ. E cảm ơn ạ
-
Vào lúc 16/7/2012 tại 13:19, lp_hai đã nói:Mình nhớ trước đây có bạn yêu cầu lisp chọn những dt có vị trí trương đồng ở nhiều Mặt bằng khác nhau, có viết cho riêng trường hợp bạn ấy yêu cầu, kiểu chọn đối tượng là (ssget "W"), bạn test thử có giống như vậy không?
(defun c:ss(/ dt lstp p01 p02 n id dtc p1 p2 stdc spt) (setq dt (ssadd) osm (getvar "osmode") ) (setq p01(getpoint "\nchon diem goc 1:")) (command "ucs" "n" p01) (setvar "osmode" 0) (while (setq p1(getpoint"\nchon doi tuong:")) (setq p2(getcorner p1) lstp (append (list p1 p2) lstp)) ) (setq spt (/(length lstp)2) n 0) (repeat spt (setq dtc (ssget "W" (nth n lstp) (nth (+ n 1) lstp)) n (+ n 2) ) (setq sdtc (sslength dtc) id 0) (repeat sdtc (setq dt (ssadd (ssname dtc id) dt) id (1+ id)) ) ) (setvar "osmode" osm) ;;;; (while (setq p02 (getpoint "\nchon diem goc tiep theo:")) (command "ucs" "n" p02) (setvar "osmode" 0) (setq n 0) (repeat spt (setq dtc (ssget "W" (nth n lstp) (nth (+ n 1) lstp)) n (+ n 2) ) (setq sdtc (sslength dtc) id 0) (repeat sdtc (setq dt (ssadd (ssname dtc id) dt) id (1+ id)) ) ) (setvar "osmode" osm) ) (command "ucs" "w") (sssetfirst dt dt) (princ) )
a cho e hỏi lisp này có chọn được các đối tượng giống nhau theo vị trí và số lượng ko ạ. 1 mặt bằng có rất nhiều tấm như này và e muốn tìm những tấm giống với tấm e khoanh đỏ kia
-
2 giờ trước, conghoa đã nói:Gửi bạn cái lisp chọn đối tượng bên trong nhiều polyline kín
Nguồn trên mạng.
có lisp nào để kiểm tra bên trong polyline có đối tượng (là layer khác) hay ko b
-
23 giờ trước, cuongtk2 đã nói:(defun c:test ( / CK CK1 LISTCIRCLE LISTLINE SS nss) (setq ss (mapcar 'vlax-ename->vla-object (ACET-SS-TO-LIST(ssget)))) (setq listcircle (vl-remove-if-not '(lambda (obj) (= "AcDbCircle" (vla-get-ObjectName obj))) ss) listline (vl-remove-if '(lambda (obj) (= "AcDbCircle" (vla-get-ObjectName obj))) ss)) (SETQ nss (ssadd)) (foreach circle listcircle (setq ck nil) (foreach line listline (if (vlax-invoke circle 'intersectwith line acextendnone) (setq ck T)) ;if );foreach (if ck (setq nss (ssadd (vlax-vla-object->ename circle) nss )) );if );foreach (command "select" nss "") ; (command "select" "_P" ) xu ly tiep theo cho nss )e cảm ơn a, e nhận thấy lisp nó không xóa được các block phức tạp như gồm nhiều đoạn thẳng khác nhau hoặc block chứa nhiều đường cong và thi thoảng lisp nó không hoạt động. a có biết nguyên nhân vì sao không ạ










Extrim chọn được nhiều đối tượng
trong AutoLisp
Đã đăng · Trả lời báo cáo
trước cũng có kìa nhưng link tải bị mất rùi đang kiếm lại mà mãi khum có b ah