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

Nguyen Hoanh

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

    4246
  • Đã tham gia

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

  • Ngày trúng

    260

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


  1. 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

  2. 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)

     


  3. 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

  4. 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)
    )

     


  5. Vào lúc 22/11/2020 tại 00:22, Linhphuquy đã nói:

    Xin chào các anh chị, hiện em đang có hơn 15 các biểu đồ trên excel. Anh chị có cách nào giúp em để có thể xuất các đồ thị ấy sang cad mà em có thể chỉnh sửa không ạ. Em xin cảm ơn ạ

    Bạn sinh ra một cột chứa tọa độ dạng bên excel

    123.45,789.01

    234.56,145.32

    342.23,657.34

    Rồi copy các cell cột này.

     

    Rồi dùng lệnh Pline của acad, khi acad hỏi specify points, bạn paste (Ctrl+V)


  6. Nếu bạn dùng AutoCAD và bị một lỗi nào đó khó chịu nhưng không rõ nguyên do.

     

    Bạn muốn khôi phục lại cấu hình (Reset AutoCAD Settings to Default)? bạn làm như sau:

    1- Nhấn tổ hợp phím [Windows]+R

    2- Paste dòng sau đây vào "C:\Program Files\Autodesk\AutoCAD 2020\AdMigrator.exe" /reset /product ACAD /language "en-US"

     

    Lưu ý:

    - Sửa chữ 2020 về phiên bản của bạn, ví dụ là 2018 nếu AutoCAD của bạn phiên bản 2018.

    - Copy cả dấu "

     

    • Like 1

  7. 23 giờ trước, DNcouples đã nói:

    Em cũng có nhu cầu như bác chủ thớt ạ, mà sao chủ đề này dừng từ 2016 rồi :((

    Dừng vì vấn đề đã được giải quyết rồi mà bạn:

     

    Bạn dùng lệnh xref để chèn file này vào file kia.

    Sau đó dùng bind để biến file kia thành block.

    Dùng explode để phá block.

    Với cách này thì bạn sẽ giữ được block layer, text style,... của file góc ban đầu

    • Like 1

  8. Bạn dùng đường kích thước trên layout là sẽ giống với Solidworks và Inventor.

    Cách làm:

    1- Hình bạn vẫn vẽ trong Model,

    2- Bên layout, bạn chọn một viewport để cân chỉnh hình,

    3- Vẫn bên layout, bạn chọn lệnh PSpace để chuyển về không gian giấy.

    4- Đánh kích thước bên layout.

     

    Khi bạn zoom to, nhỏ viewport, thì đường kích thước sẽ không thay đổi giá trị.

     

    • Like 1

  9. Công ty TNHH CONSID tuyển các vị trí công việc:

    - Kiến trúc sư 2 năm kinh nghiệm trở lên

    - Thực tập sinh là sinh viên chuyên ngành kiến trúc năm thứ 4 trở lên.

     

    Click vào đây để nộp hồ sơ ứng tuyển

     

    Quan điểm của CONSID
    Trong suốt quá trình phát triển, CONSID mong muốn những người tốt nhất tham gia vào công ty của chúng tôi. Nếu bạn quan tâm đến việc tham gia CONSID hãy đăng ký.

    Chúng tôi biết rằng sự thành công trong sự nghiệp của mọi người là nền tảng cho sự thành công của CONSID vì vậy CONSID rất coi trọng sự phát triển nghề nghiệp của các cá nhân. CONSID phát triển người của mình thành các nhân sự toàn diện bằng cách tập trung vào đào tạo và trau dồi kiến thức kỹ thuật sắc bén, mang lại nhiều kinh nghiệm và cơ hội phát triển.

    Văn hóa của CONSID là cởi mở, hợp tác và năng động và CONSID chào đón những tài năng tốt nhất từ khắp mọi miền tổ quốc. Các nhân sự của CONSID phối hợp làm việc với nhau để mang lại giá trị cho các dự án bằng sự tập trung cao độ. Niềm đam mê về nghề nghiệp của tập thể CONSID mang lại giá trị cho khách hàng là cốt lõi cho sự thành công của CONSID.

    Chuyên môn của bạn
    Chúng tôi cần tuyển dụng nhân sự cho các vị trí Kiến trúc vì thế cần ứng viên Tốt nghiệp Cao đẳng hoặc Đại học ngành Xây dựng hoặc Kiến trúc

    Bạn nên có kỹ năng
    Để gia nhập CONSID, bạn cần có: Tinh thần kỷ luật công việc đặc biệt cao; Ham thích học hỏi, có khả năng học hỏi các vấn đề mới; Khát khao phát triển nghề nghiệp.

    Ngoài ra, bạn cần biết sử dụng tốt một trong các phần mềm: AutoCAD, 3DS Max/Vray/Corona, Sketchup, Lumion, Vray… Sử dụng được tiếng Anh hoặc tiếng Hàn là một lợi thế.

    Các phúc lợi dành cho bạn
    BHXH, BHYT, BHTN theo quy định pháp luật
    Được tham gia học các khóa học ngắn hạn để nâng cao nghề nghiệp
    Được làm việc trong tổ chức chuyên nghiệp về thiết kế, có khả năng phát triển nghề nghiệp.
    Lương thỏa thuận, tương xứng với nỗ lực của bạn.

    Bạn sẽ làm gì
    Tùy theo khả năng và nỗ lực của bạn, bạn sẽ được phân công làm chủ nhiệm dự án, Chủ trì thiết kế kiến trúc, thiết kế kiến trúc, triển khai bản vẽ kỹ thuật kiến trúc hoặc xây dựng mô hình 3d ý tưởng các phương án.

    Làm việc từ thứ Hai đến thứ Bảy.

     

    Click vào đây để nộp hồ sơ ứng tuyển

×