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

tien2005

Thành viên
  • Số lượng nội dung

    512
  • Đã tham gia

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

  • Ngày trúng

    59

Bài đăng được đăng bởi tien2005


  1. (defun c:DoLayers ()
      (mapcar 'MkLay
              '( "_Center"   "_Dim" "_Hatch"  "_Hiden"   "_Steel" "_Stirrup"  "_Text")  ; Name [Str]
              '(   9       1      8      2       3    6       4  )  ; Colours [Int]
              '("CENTER"  nil    nil  "HIDDEN"   nil   nil  nil )  ; LineType [Str]
              '( "013"   "013"  "013"  "015"    "050" "040"    nil )  ; LineWeight [Str] 0.18 = "018"
              '(   T       T      T      T        T     T      T  ) ; Plottable (T or nil)
    	  '( nil   nil  nil  nil    "Thep chiu luc" "Thep dai"    nil )  ; Description [Str]
    	  )
      (princ)
      )
    
      (defun MkLay	(Nme Col lTyp lWgt Plt des / lays lay)
        (vl-load-com)
        (setq lays (vla-get-layers
    		 (vla-get-ActiveDocument
    		   (vlax-get-acad-object)
    		 )
    	       )
    	  lay  (cond ((tblsearch "LAYER" Nme)
    		      (vla-item lays Nme)
    		     )
    		     (t (vla-add lays Nme))
    	       )
        )
        (and Col (vla-put-Color lay Col))
        (and lTyp
    	 (or (tblsearch "LTYPE" lTyp)
    	     (vla-load
    	       (vla-get-Linetypes
    		 (vla-get-ActiveDocument
    		   (vlax-get-acad-object)
    		 )
    	       )
    	       lTyp
    	       (if (zerop (getvar 'measurement)) "acad.lin" "acadiso.lin")
    	     )
    	 )
    	 (vla-put-Linetype lay lTyp)
        )
        (and lWgt
    	 (vl-catch-all-apply 'vla-put-LineWeight (list  lay (eval (read (strcat "acLnWt" lWgt)))))
        )
        (and (not Plt) (vla-put-Plottable lay :vlax-false))
        (and des (/= "" des) (vla-put-Description lay des))
      )

    Bạn khai báo chi tiết cho layer mới sẽ được tạo bên trong c:DoLayers nhé

    • Like 1

  2. @Htn02 offset trong/ngoài, trái/phải là do người vẽ và định nghĩa của cad. lisp sau là của @ketxu thì phải, mình sửa lại chút thôi

    ;======== OFFSET VE 2 PHIA ====================
    (defun c:oo( / offlst #cayer)
      (or #d (setq #d 1))
      (setq #d (cond ((getdist (strcat "\nKhoang cach Offset < " (vl-princ-to-string #d) " > :")))(#d)))
      (princ "\n Chon doi tuong :")
      (if (ssget (list (cons 0 "Ellipse,Lwpolyline,Spline,Line,Xline,Circle,Arc,Pline")))
        (PROGN
          (vlax-for x (vla-get-activeselectionset(vla-get-activedocument(vlax-get-acad-object)))
    	(vl-every '(lambda (d / o)
    		     (if (not (vl-catch-all-error-p
    				(setq o (vl-catch-all-apply 'vlax-invoke (list x 'Offset d)))
    				)
    			      )
    		       (setq offlst (cons (car o) offlst))
    		       )
    		     )
    		  ;(list #d (- #d))
    		  (list #d )
    		  )
    	)
          (SETQ #cayer (getvar "clayer"))
          
          (mapcar '(lambda (x) (vla-put-layer x #cayer)
    		 (vla-put-color x 256)
    		 )
    	      offlst)
          )
        )
      (PRINC)
      )

     


  3. 19 giờ trước, xuandat268 đã nói:

    bạn có thể share lại lips này được không

     của Bạn đay nhé 

    (defun c:imf () ;;;Insert Multi Files by Nguyen Hoanh ( bo tat ca ban ve vao 1 file rieng, roi nhan lenh, chon ban ve dau tien )
      (setq pathname (vl-filename-directory
                       (getfiled "Hay chon file dwg bat ky thuoc thu muc" "" "dwg" 0)
                       )
            filelist (vl-sort (vl-directory-files pathname "*.dwg") '<)
            p        (getpoint "\nDiem chen: ")
            xht      (car p)
            yht      (cadr p)
            )
      (setq oldos (getvar "osmode"))
      (setvar "osmode" 0)
      (foreach filename filelist
        (command "-insert"
                 (strcat pathname "/" filename)
                 (list xht yht)
                 1.0
                 1.0
                 0.0
                 )
        (vla-getboundingbox
          (vlax-ename->vla-object (entlast))
          'p1
          'p2
          )
        (setq p1     (vlax-safearray->list p1)
              p2     (vlax-safearray->list p2)
              xht    (+ xht (abs (car (mapcar '- p2 p1))) 1000 )
              blname (cdr (assoc 2 (entget (entlast))))
              )
        (command ".explode" (entlast) "")
        (command "-purge" "Block" blname "N")
        )
      (setvar "osmode" oldos)
      (princ)
      )
    
    (defun c:exf () ;;;EXtract Files by Nguyen Hoanh
      (defun filenamevalid (str)
        (vl-list->string
          (vl-remove-if
            '(lambda (x) (member x (vl-string->list "\\/:?>|")))
            (vl-string->list str)
            )
          )
        )
      (defun getboundingbox (ent / p1 p2)
        (vla-getboundingbox (vlax-ename->vla-object ent) 'p1 'p2)
        (list (setq p1 (vlax-safearray->list p1))
              (setq p2 (vlax-safearray->list p2))
              )
        )
      (defun ss2ent (ss / sodt index lstent)
        (setq sodt  (if ss
                      (sslength ss)
                      0
                      )
              index 0
              )
        (repeat sodt
          (setq ent    (ssname ss index)
                index  (1+ index)
                lstent (cons ent lstent)
                )
          )
        (reverse lstent)
        )
      (defun dxf (ent code) (cdr (assoc code (entget ent))))
      (defun gettag (ent / entbl lst)
        (setq entbl ent)
        (while (and (setq entbl (entnext entbl))
                    (= (dxf entbl 0) "ATTRIB")
                    )
          (setq lst (append lst (list (cons (dxf entbl 2) (dxf entbl 1)))))
          )
        lst
        )
      (setq entbl  (car (entsel "\nHay pick vao block khung ten"))
            blname (dxf entbl 2)
            taglst (gettag entbl)
            index  0
            )
      (princ "\nCac tag trong block:")
      (foreach pp taglst
        (princ (strcat "\n" (itoa index) ": " (car pp)))
        (setq index (1+ index))
        )
      (textscr)
      (setq
        tag (car
              (nth (getint "\nHay nhan 0,1,2... de chon tag: ") taglst)
              )
        )
      (graphscr)
      (command ".zoom" "e")
      (setq oldos (getvar "osmode"))
      (setvar "osmode" 0)
      (setq ss  (ssget "x" (list (cons 0 "INSERT") (cons 2 blname)))
            lst (ss2ent ss)
            lst (mapcar '(lambda (e)
                           (append (list e (cdr (assoc tag (gettag e))))
                                   (getboundingbox e)
                                   )
                           )
                        lst
                        )
            )
      (foreach pp lst
        (setq e  (nth 0 pp)
              f  (strcat (getvar "dwgprefix")
                         (filenamevalid (nth 1 pp))
                         ".dwg"
                         )
              p1 (nth 2 pp)
              p2 (nth 3 pp)
              ss (ssget "_w" p1 p2)
              ss (ssadd e ss)
              )
        (command ".wblock" f)
        (if (setq fh (open f "r"))
          (progn (close fh) (command "y"))
          )
        (command "" p1 ss "")
        (command ".oops")
        )
      (setvar "osmode" oldos)
      (command ".zoom" "p")
      (princ)
      )

     

    • Like 1

  4. 5 giờ trước, enscap đã nói:

    Mình tìm được lisp trên 1 web  lisp này thay đổi kiểu dim 

    Nhưng không có phần chọn dim, chỉ hiện lên các dim hiện có.

    Vậy nhờ các bạn biết về lisp xem giúp và thêm phần chọn kiểu dim để thay đội .

    xin chân thành cám ơn !

    (defun c:CHDM (/ sclst dms dmlst dcl_id wri)
     (setq dmlst '()
          obj (vlax-get-acad-object)
          doc (vla-get-activedocument obj)
          dms (vla-get-dimstyles doc))
    (vlax-for x dms (setq dmlst (cons (vla-get-name x) dmlst)))
    (setq dcl_id (vl-filename-mktemp nil nil ".dcl")
          wri (open dcl_id "w"))
      (foreach x '(
               "dimsty : dialog"
               "{label = \"DimStyle List\";"
               ":list_box {key = \"dmstyle\";" "multiple_select = false; height=10;}"
               "ok_cancel;"
               "}"
               )
      (write-line x wri))
      (setq wri (close wri))
    (< 0 (setq dcl-load (load_dialog dcl_id))
    (if (not (new_dialog "dimsty" dcl-load))(exit)))
    (start_list "dmstyle")(mapcar 'add_list dmlst)(end_list)
    (action_tile "dmstyle" "(setq sclst (get_tile \"dmstyle\"))")
    (action_tile "accept" "(done_dialog)(setq clk t)")
    (action_tile "cancel" "(done_dialog)(setq clk nil)")
    (start_dialog)    
    (unload_dialog dcl-load)
    (if clk
      (if sclst
        (progn
        (setq secstl (nth (atoi sclst) dmlst))
        (vla-put-activedimstyle doc (vla-item (vla-get-Dimstyles doc) secstl)))))
    (princ)) 

    lisp trên của bạn giống như chức năng đã có trên cad image.png.0b80217d5d2ff89e1ce1e97292220939.png 

    thêm phần chọn kiểu dim để thay đội: chưa rõ ý này. Cần thiết thì đưa hình minh hoạ hoặc file cad mô tả cụ thể

    image.png


  5. Vào lúc 16/10/2024 tại 16:37, huyennd đã nói:

    Bản vẽ em đang sắp xếp phía trên để đánh số thứ tự anh ạ. Dùng lisp của anh in thì lại lấy phía dưới để căn in, anh có thể chỉnh sửa lại lisp in không theo căn trên dưới được không anh? em cám ơn

    image.png

    Chọn chế độ "select order" để in. Xem hướng dẫn ở bài 1


  6. Vào lúc 3/8/2024 tại 16:19, quanghuy0812 đã nói:

    Thanks bạn đã chia sẻ lisp.

    Mình có cái muốn hỏi là Lisp này không nhận nét in trong cùng folder File Cad muốn in đúng ko bác? Do mình thấy mục Plotstyle chỉ hiện nét in trong thư mục mặc định nét in của Cad

    trong mục Plotstyle Bạn chọn ADD Plotstyle rồi chỉ đến thư mục chứa plotstyle của Bạn thì lisp sẽ copy các plotstyle có trong thư mục vào thư mục mặc định của cad, đồng thời cũng hiện trong danh sách chọn của lisp


  7. 2 giờ trước, limfx đã nói:

    Em tìm ra phương án rồi ạ: Lấy 2 điểm trên đối tượng, kiểm tra khoảng cách đến đường màu tím, nếu bằng nhau thì đường đó song song!

     

    12 phút trước, limfx đã nói:

    Cẩm ơn a tannguyen291 và amateurday: Thêm kiểm tra góc giữa 2 đường nữa là OK. Thanks!

     

    trên polyline tính góc phức tạp hơn. Có thể kiểm tra  thêm khoảng cách: p1p3 = p2p4 và p1p2 = p3p4


  8. 2 giờ trước, amateurday đã nói:

    Các bác ạ, tình hình là bản vẽ thường xuyên copy qua lại, dẫn đến việc nhiều nét trùng và lệch nhau tí tẹo (phải zoom 1000x mới thấy).

    Khi dùng lisp tính tổng chiều dài thì trùng tè le.

    Do đó, nhờ các bác giúp cho công cụ xóa trùng, xóa gần, hoặc giúp đánh dấu vị trí trùng để mò xóa bằng tay (chứ cứ quét đối tượng rồi thấy Properties > 1 rồi xóa thì phải dò từng chỗ mệt quá).

    Ví dụ như file kèm là chỉ có 100 đường thôi. Em đã thử Overkill bó tay.

    Doi tuong canh nhau.dwg

     

    Bạn tìm hiểu lệnh overkill

    • Vote tăng 1

  9. 3 giờ trước, duy782006 đã nói:

    Trong thực tế bài toán chia đoạn tường rào theo đường cong là có thiệt. Nhưng mình thì rải đuổi 1 đầu, thiếu đủ anh cuối chịu tuỳ thực tế chứ ít chơi cả 2 đầu chịu lắm, và cũng hiếm khi không đủ lại lấy bên đường thẳng qua vì như vậy mất chút đất của ranh thẳng chủ đầu tư sẽ bắt đền đấy.

     

    @duy782006 thực tế làm hàng rào theo ranh đất là không có vid ranh đất là các đoạn thẳng, chia hàng rào thì phải tính thêm khe lún (khe co dãn) giữa các phân đoạn rào

     

     

    Vào lúc 24/4/2024 tại 16:40, thuyen mai đã nói:

    Em chào các bác ạ!

    Em đang cần tìm một lisp chia góc thành nhiều đoạn theo chiều dài cho trước (theo hình như bên dưới).

    Các bác có thể giúp em viết lisp để xử lý bài toán này không ạ?

    Em không biết gì về Lisp cả nên phải đi nhờ em cũng ngại lắm.

    Rất mong được các bác giúp đỡ. Em cảm ơn nhiều ạ!

     

    image.png.34e2203de5e0af278b513acb623de357.png

     

    @thuyen mai trong video trên của mình chỉ cần nhập các số liệu: 3 điểm xác định góc, chiều dài đoạn, góc lệch giữa các đoạn liền kề ( hoặc nhập số phân đoạn ). Cách làm của Bạn là vẽ cung tròn rồi chia đoạn trên cung, bánh kính cung tròn để vẽ đã đúng chưa, đầu vào không đúng thì kết quả ra không đúng

     

    @All làm cách nào để đưa video từ youtube vào cadviet mà không phải là đường link

×