Chuyển đến nội dung
Diễn đàn CADViet

Nguyen Hoanh

Moderator
  • Số lượng nội dung

    4.228
  • Đã tham gia

  • Lần ghé thăm cuối

  • Ngày trúng

    258

Bài đăng được đăng bởi Nguyen Hoanh


  1. Vào lúc 18/11/2023 tại 17:20, monavamonava đã nói:

    Chào các bác. Em in bản vẽ trên autocad 2024 mà tốc độ chậm ( khoảng 30-40s/trang a3) so với bình thường (~1-2S) sử dụng các phiên bản 201x. Có bác nào gặp trường hợp tương tự như vậy không ạ?
    -> Mong nhận được sự trợ giúp hỗ trợ của các bác để em cải thiện tốc độ in được không ạ...

    image.png

     

    Bạn thử reset AutoCAD to default xem sao?

     

    Windows 11: Start > All Apps > AutoCAD 20xx > Reset Settings To Default

    Windows 10: Start > AutoCAD 20xx > Reset Settings To Default

     

    image.png


  2. 21 giờ trước, ldnamxddd đã nói:

    Chã là em có tìm trong diễn đàn Lisp chọn các thuộc tính giống nhau của block thuộc tính của bác Doãn Văn Hà.

    Tuy nhiên, trên bản vẽ của công trình em thì Block người ta làm vừa là dynamic block, vừa là attribute block. Nên chạy lisp ( trong máy em) không thực hiện được. 

    Mong các bác giúp em cải tiến với ạ. 

     

    Bạn nên post vào bài có lisp đó, và up file dwg mà bạn đang muốn dùng, thì mọi người mới dễ dàng giúp bạn được.

    • Like 1

  3. Chưa hiểu bạn muốn gì.

    Có phải bạn muốn nói: bạn đã dùng lisp trên diễn đàn nhưng chưa đúng ý,  và muốn sửa?

     

    Nếu vậy thì:

    1- Bạn đã dùng lisp nào, bạn có thể upload lại file lsp, hoặc đường link đến bài viết có lisp đó.

    2- Bạn không ưng lisp đó ở điểm nào, bạn muốn sửa lại như thế nào?


  4. Vấn đề này đã được Autodesk mô tả tại đây:

    https://knowledge.autodesk.com/support/autocad/troubleshooting/caas/sfdcarticles/sfdcarticles/XLine-will-not-work-properly-when-snapping-to-an-endpoint-in-AutoCAD.html

     

    VẤN ĐỀ:
    Trong AutoCAD, bạn muốn tạo XLine bằng cách bắt vào điểm cuối của một đoạn thẳng nhưng thay vì sử dụng điểm cuối làm tâm của XLine và cho phép bạn chọn điểm tiếp theo để xác định góc, XLine sẽ chỉ hiển thị dưới dạng thẳng đứng hoặc nằm ngang cho đến khi xong lệnh. Lệnh hoạt động bình thường khi bắt điểm vào các OSnap khác như trung điểm (midpoint) và điểm gần nhất (nearest).

     

    NGUYÊN NHÂN:
    lệnh XLine cố gắng bắt vuông góc với đối tượng tại  điểm cuối vừa chọn.

     

    GIẢI PHÁP:
    Hãy thử thực hiện một trong những cách sau:
    - Tắt OSnap perpendicular (vuông góc).[hoặc tắt F3, chọn điểm bằng cách giữ shift + phải chuột]

    - Bật OSnap tangent  (tiếp tuyến) thêm mỗi khi bật OSnap perpendicular (vuông góc). 

    - Tạm thời tắt OSnaps và chọn điểm kết thúc bằng cách nhấn shift + chuột phải.

     

    Nói cách khác, đây không phải là lỗi, mà là chức năng mới của AutoCAD. Bạn cần tắt osnap (nhấn F3) khi chọn điểm thứ 2 là được.

    • Like 1

  5. Mình đã viết lisp cho bạn như bên dưới.

     

    Cách dùng:

    1- Download file lisp về

    2- Mở file lisp, Sửa chữ chỗ ("DESC3"."S"..... theo nguyên tắc: Phía bên trái dấu chấm là tên tag, phía bên phải dấu chấm là giá trị default value. Mỗi dòng là 1 lần thay. Lưu lại.

    3- Add file lisp này vào mục chạy tự động, bằng lệnh Appload > Contents > Add

    4- Dùng một chức năng nào đó để mở 3500 file của bạn, mỗi lần file được mở lên, lisp sẽ tự động chạy, sửa, lưu lại và tự động close bản vẽ.

     

    Sau khi dùng xong, thì xóa hoặc rename file lisp thành tên khác, rồi remove file lisp ra khỏi việc chạy tự động.

    (setq
      cv:thay '(
    	 ("DESC3" . "S")
    	 ("DESC1" . "XY")
    	)
    )
    
    (defun c:thayattr( / dt ss ent tt find repl)
    (foreach dt cv:thay
      (setq ss (ssget "X" (list (cons 0 "ATTDEF") (cons 2 (car dt)))))
      (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
        (setq tt (entget ent)
    	  find (assoc 1 tt)
    	  repl (cons 1 (cdr dt))
    	  tt (if find
    	       (subst repl find tt)
    	       (cons repl find)
    	     )
         )
         (entmod tt)
      )
    )
      (command ".qsave" "y")
      (command ".close")
    )
    (c:thayattr)

     


  6. Mình thấy vẫn còn mà

     

    (vl-load-com)
    
    (defun C:co1 ( / ANG ANG1 ANG2 DIS ELST ELST_COPY ELST_INTERS ELST_PL ENT ENT1 ETYPE I LEN LST LST1 LST_ADD LST_DIS LST_PT MODE OBJ PT PT1 PT2 PT_BASE ROTP X)
      (princ "Select objects to copy: ")
      (if (and (setq elst_copy (vl-remove-if 'listp (mapcar 'cadr (if (ssget) (ssnamex (ssget "_P")))))) (setq pt_base (getpoint "\nSpecify base point: ")))
        (progn
          (setq elst (vl-remove-if 'listp (mapcar 'cadr (if (ssget) (ssnamex (ssget "_P"))))))
          (setq elst_pl (vl-remove-if-not '(lambda (ent) (wcmatch (cdr (assoc 0 (entget ent))) "*LINE,ARC")) elst))
          (setq elst_inters (vl-remove-if-not '(lambda (ent) (wcmatch (cdr (assoc 0 (entget ent))) "*LINE,ARC,CIRCLE")) elst))
          (setq rotp (get_key (list "Yes" "No") "No" "Xoay theo doi tuong"))
          (if elst_inters
    	(setq mode (listbox (list "Dinh" "Dau" "Cuoi" "Trung diem" "Trong tam" "Giao cat") "Vi tri Paste cua Pline, Arc" 10 8 1))
    	)
          (setq lst_pt nil)
          (foreach ent elst
    	(setq lst (entget ent))
    	(setq etype (cdr (assoc 0 lst)))
    	(setq pt nil)
    	(if (wcmatch etype "*TEXT")
    	  (if (and (assoc 11 lst)
    		   (not (equal (car (cdr (assoc 11 lst))) 0))
    		   (not (equal (cadr (cdr (assoc 11 lst))) 0))
    		   )
    	    (setq pt (cdr (assoc 11 lst)))
    	    (setq pt (cdr (assoc 10 lst)))
    	    )
    	  )
    	(if (wcmatch etype "HATCH")
    	  (setq pt (boundingbox_centroid ent))
    	  )
    	(if (not (wcmatch etype "*TEXT,*LINE,ARC,HATCH"))
    	  (setq pt (cdr (assoc 10 lst)))
    	  )
    	(if (not (setq ang (cdr (assoc 50 lst)))) (setq ang 0.0))
    	(if pt (setq lst_pt (cons (cons ang pt) lst_pt)))
    	)
          (if (member "Dinh" mode)
    	(foreach ent elst_pl
    	  (if (wcmatch (cdr (assoc 0 (entget ent))) "LINE,ARC")
    	    (progn
    	      (setq pt1 (vlax-curve-getPointAtParam ent (vlax-curve-getStartParam ent)))
    	      (setq ang1 (angle (list 0 0) (vlax-curve-getFirstDeriv ent (vlax-curve-getParamAtPoint ent pt1))))
    	      (setq pt2 (vlax-curve-getPointAtParam ent (vlax-curve-getEndParam ent)))
    	      (setq ang2 (angle (list 0 0) (vlax-curve-getFirstDeriv ent (vlax-curve-getParamAtPoint ent pt2))))
    	      (setq lst_pt (cons (cons ang1 pt1) lst_pt))
    	      (setq lst_pt (cons (cons ang2 pt2) lst_pt))
    	      )
    	    )
    	  (if (wcmatch (cdr (assoc 0 (entget ent))) "*POLYLINE")
    	    (progn
    	      (setq lst_add (mapcar '(lambda (pt) (cons (angle (list 0 0) (vlax-curve-getFirstDeriv ent (vlax-curve-getParamAtPoint ent pt))) pt)) (get_vertex ent)))
    	      (setq lst_pt (append lst_add lst_pt))
    	      )
    	    )
    	  )
    	)
          (if (and (member "Dau" mode) (not (member "Dinh" mode)))
    	(foreach ent elst_pl
    	  (setq pt (vlax-curve-getPointAtParam ent (vlax-curve-getStartParam ent)))
    	  (setq ang (angle (list 0 0) (vlax-curve-getFirstDeriv ent (vlax-curve-getParamAtPoint ent pt))))
    	  (setq lst_pt (cons (cons ang pt) lst_pt))
    	  )
    	)
          (if (and (member "Cuoi" mode) (not (member "Dinh" mode)))
    	(foreach ent elst_pl
    	  (setq pt (vlax-curve-getPointAtParam ent (vlax-curve-getEndParam ent)))
    	  (setq ang (angle (list 0 0) (vlax-curve-getFirstDeriv ent (vlax-curve-getParamAtPoint ent pt))))
    	  (setq lst_pt (cons (cons ang pt) lst_pt))
    	  )
    	)
          (if (member "Trung diem" mode)
    	(progn
    	  (foreach ent elst_pl
    	    (if (wcmatch (cdr (assoc 0 (entget ent))) "LINE,ARC")
    	      (progn
    		(setq pt (vlax-curve-getPointAtDist ent (* (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent)) 0.5)))
    		(setq ang (angle (list 0 0) (vlax-curve-getFirstDeriv ent (vlax-curve-getParamAtPoint ent pt))))
    		(setq lst_pt (cons (cons ang pt) lst_pt))
    		)
    	      )
    	    (if (wcmatch (cdr (assoc 0 (entget ent))) "*POLYLINE")
    	      (progn
    		(setq lst1 (get_vertex ent))
    		(setq len (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent)))
    		(setq lst_dis (mapcar '(lambda (pt) (vlax-curve-getDistAtPoint ent pt)) lst1))
    		(if (not (equal len (last lst_dis)))
    		  (setq lst_dis (reverse (cons len (cdr (reverse lst_dis)))))
    		  )
    		(setq i 0)
    		(repeat (1- (length lst_dis))
    		  (setq dis (* (+ (nth i lst_dis) (nth (1+ i) lst_dis)) 0.5))
    		  (setq pt (vlax-curve-getPointAtDist ent dis))
    		  (setq ang (angle (list 0 0) (vlax-curve-getFirstDeriv ent (vlax-curve-getParamAtPoint ent pt))))
    		  (setq lst_pt (cons (cons ang pt) lst_pt))
    		  (setq i (1+ i))
    		  )
    		)
    	      )
    	    )
    	  )
    	)
          (if (member "Trong tam" mode)
    	(setq lst_pt (append lst_pt (mapcar '(lambda (x) (cons 0.0 (poly_centroid x))) elst_pl)))
    	)
          (if (member "Giao cat" mode)
    	(while (> (length elst_inters) 1)
    	  (setq ent1 (car elst_inters))
    	  (setq lst (apply 'append (mapcar '(lambda (x) (vla-inters ent1 x acextendnone)) (cdr elst_inters))))
    	  (foreach pt lst (setq lst_pt (cons (cons 0.0 pt) lst_pt)))
    	  (setq elst_inters (cdr elst_inters))
    	  )
    	)
    
          (setq lst_pt (unique lst_pt))
          (foreach lst lst_pt
    	(if (and (setq pt (cdr lst)) (setq ang (car lst)))
    	  (foreach ent elst_copy
    	    (vla-Copy (vlax-ename->vla-object ent))
    	    (setq obj (vlax-ename->vla-object (entlast)))
    	    (vla-Move obj (vlax-3d-point pt_base) (vlax-3d-point pt))
    	    (if (= rotp "Yes") (vla-Rotate obj (vlax-3d-point pt) ang))
    	    )
    	  )
    	)
          )
        )
      (princ)
      )
    
    ;NHAP KEYWORD
    (defun get_key (key default promp / key_fix str1 str2 str3 str4)
      (setq key_fix key)
      (foreach str1 (list " " "_")
        (setq key_fix (mapcar '(lambda (str) (while (vl-string-search str1 str) (setq str (vl-string-subst "" str1 str))) str) key_fix))
        )
      (setq str1 (apply 'strcat (mapcar (function (lambda (x) (strcat x " "))) key_fix)))
      (setq str2 (apply 'strcat (mapcar (function (lambda (x) (strcat x "/"))) key_fix)))
      (setq str1 (substr str1 1 (1- (strlen str1))))
      (setq str2 (substr str2 1 (1- (strlen str2))))
      (if (not (assoc default (mapcar 'list key_fix))) (setq default (car key_fix)))
      (initget str1)
      (setq str3 (strcat "\n" promp " [" str2 "] <" default "> "))
      (if (not (setq str4 (getkword str3)))
        (nth (vl-position default key_fix) key)
        (nth (vl-position str4 key_fix) key)
        )
      )
    
    ;XOA PHAN TU TRUNG
    (defun unique (lst)
      (if lst (cons (car lst) (unique (vl-remove (car lst) (cdr lst)))))
      )
    
    ;LIST BOX
    (defun listbox (lst msg wid hei bit / dch des tmp rtn)
      (if (> (length lst) 1)
        (progn
          (cond
    	((not
    	   (and
    	     (setq tmp (vl-filename-mktemp nil nil ".dcl"))
    	     (setq des (open tmp "w"))
    	     (write-line
    	       (strcat
    		 "listbox:dialog{label=\""
    		 msg
    		 "\";spacer;:list_box{key=\"list\";multiple_select="
    		 (if (= 1 (logand 1 bit))
    		   "true"
    		   "false"
    		 )
    		 (strcat ";width="
    			 (rtos wid 2 0)
    			 ";height="
    			 (rtos hei 2 0)
    			 ";}spacer;ok_cancel;}"
    		 )
    	       )
    	       des
    	     )
    	     (not (close des))
    	     (< 0 (setq dch (load_dialog tmp)))
    	     (new_dialog "listbox" dch)
    	   )
    	 )
    	 (prompt "\nError Loading List Box Dialog.")
    	)
    	(t
    	 (start_list "list")
    	 (foreach itm lst (add_list itm))
    	 (end_list)
    	 (setq rtn (set_tile "list" "0"))
    	 (action_tile "list" "(setq rtn $value)")
    	 (setq rtn
    		(if (= 1 (start_dialog))
    		  (if (= 2 (logand 2 bit))
    		    (read (strcat "(" rtn ")"))
    		    (mapcar '(lambda (x) (nth x lst))
    			    (read (strcat "(" rtn ")"))
    		    )
    		  )
    		)
    	 )
    	)
          )
          (if (< 0 dch)
    	(unload_dialog dch)
          )
          (if (and tmp (setq tmp (findfile tmp)))
    	(vl-file-delete tmp)
          )
          rtn
        )
        lst
        )
      )
    
    ;GET VERTEX
    (defun get_vertex (ent / i lst)
      (setq i 0)
      (repeat (fix (1+ (vlax-curve-getEndParam ent)))
        (setq lst (append lst (list (vlax-curve-getPointAtParam ent i))))
        (setq i (1+ i))
        )
      lst
      )
    
    ;GIAO CAT
    (defun vla-inters (ent1 ent2 mode / lst1 lst2)
      (setq lst1 (vlax-invoke (vlax-ename->vla-object ent1) 'intersectwith (vlax-ename->vla-object ent2)
    	       (cond
    		 ((= mode 0) acextendnone)
    		 ((= mode 1) acextendthisentity)
    		 ((= mode 2) acextendotherentity)
    		 ((= mode 3) acextendboth)
    		 )))
      (repeat (/ (length lst1) 3)
        (setq lst2 (cons (list (car lst1) (cadr lst1) (caddr lst1)) lst2)
    	  lst1 (cdddr lst1)
    	  )
        )
      (reverse lst2)
      )
    
    ;CENTROID
    (defun boundingbox_centroid (ent / minpt maxpt)
      (if
        (and
          (vlax-method-applicable-p (vlax-ename->vla-object ent) 'getboundingbox)
          (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list (vlax-ename->vla-object ent) 'minpt 'maxpt))))
          (setq minpt (vlax-safearray->list minpt))
          (setq maxpt (vlax-safearray->list maxpt))
          )
        (list (* 0.5 (+ (car minpt) (car maxpt))) (* 0.5 (+ (cadr minpt) (cadr maxpt))))
        )
      )
    
    ;POLY CENTROID - LEE MAC
    (defun poly_centroid (e / l)
      (foreach x (setq e (entget e))
        (if	(= 10 (car x))
          (setq l (cons (cdr x) l))
        )
      )
      (
       (lambda (a)
         (if (not (equal 0.0 a 1e-8))
           (trans
    	 (mapcar
    	   '/
    	   (apply
    	     'mapcar
    	     (cons '+
    		   (mapcar
    		     (function
    		       (lambda (a b)
    			 (
    			  (lambda (m)
    			    (mapcar
    			      (function
    				(lambda (c d) (* (+ c d) m))
    			      )
    			      a
    			      b
    			    )
    			  )
    			   (- (* (car a) (cadr b)) (* (car b) (cadr a)))
    			 )
    		       )
    		     )
    		     l
    		     (cons (last l) l)
    		   )
    	     )
    	   )
    	   (list a a)
    	 )
    	 (cdr (assoc 210 e))
    	 0
           )
         )
       )
        (* 3.0
           (apply '+
    	      (mapcar
    		(function
    		  (lambda (a b)
    		    (- (* (car a) (cadr b)) (* (car b) (cadr a)))
    		  )
    		)
    		l
    		(cons (last l) l)
    	      )
           )
        )
      )
    )

     

    • Like 2

  7. Mình đã sửa thành nhiều đối tượng đây nhé:

     

    (defun c:PTLs (/ ent elist wid p1 line elist2 start end r1 r2 r3 r4)
      (defun dtr (d)
        (* pi d (/ 1.0 180.0))
      )
      (command "_.undo" "_g")
    
      (foreach ent1    (vl-remove-if
              'listp
              (mapcar 'cadr (ssnamex (ssget '((0 . "*POLYLINE")))))
            )
    
        (setq elist (entget ent1))
        (setq wid (cdr (assoc 43 elist)))
        (setq p1 ent1)
        (command "_.explode" p1)
    
        (setq line (entlast))
        (setq elist2 (entget line))
        (setq start (cdr (assoc 10 elist2)))
        (setq end (cdr (assoc 11 elist2)))
        (setq r1 (polar start (+ (angle start end) (dtr 270)) (/ wid 2)))
        (setq r2 (polar start (+ (angle start end) (dtr 90)) (/ wid 2)))
        (setq r3 (polar end (+ (angle start end) (dtr 90)) (/ wid 2)))
        (setq r4 (polar end (+ (angle start end) (dtr 270)) (/ wid 2)))
        (command "_.line" r1 r2 r3 r4 "c")
        (entdel line)
      )
    
      (command "_.undo" "_end")
      (princ)
    )

     

×