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

hatieu

Nhà quảng cáo
  • Số lượng nội dung

    66
  • Đã tham gia

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

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


  1. Đúng là text và mtext thì em làm được còn atttext và text của dim thì em chịu.

    Đây là lisp đưa toàn bộ text về cùng chiều cao h.

    Nhờ các bác hộ em thêm các chức năng đưa mtext, text của dim, attext về cùng chiều cao vào lisp này với.

     (defun C:htext( / ss ss1 e d h)
     (setq h (getreal (strcat "\nNhap chieu cao text :")))      
     (setq ss (ssget '((0 . "TEXT")))
    )
     (while (setq e (ssname ss 0))
       (setq d (entget e)
      d (subst (cons 40 h) (assoc 40 d) d)
      )
       (entmod d)
       (ssdel e ss)
       )
     (princ)
     )
    

    Em cảm ơn trước!

    Em mượn câu của bác ketxu

    (Cái gì biết thì chia sẻ.Đừng sợ người ta cười mình hợm hĩnh.Chỉ e người ta không muốn tiếp thu.

    Cái gì chưa biết thì hỏi.Đừng ngại người ta cười mình dốt.Chỉ sợ mình hoài dốt thật)


  2. Hàm (Reset) -> Bạn chưa tắt chế độ bắt điểm

    (defun reset()

    (setq old_lay (getvar "clayer"))

    (setq old_txt (getvar "textstyle"))

    (setvar "plinewid" 0.0)

    (SETVAR "ORTHOMODE" 1)

    (SETVAR "POLARMODE" 0)

    (command "style" "romanc" "romanc" "0" "" "" "" "" "")

    (setvar "osmode" 15359)

    (setvar "textstyle" "romanc")

    )

    (defun c:hcn (/ *siz* pt dpt siz e1 e2 dx dy w h p0 p1 p2 p3 txt e4 e5 e6 e7 e8 ten1)

    (graphscr)

    (reset)

    ;==============================================================================

    ...........

    Thanksss!!!

    Em làm được rùi (setvar "osmode" 31743) ;tắt truy bắt điểm


  3. (defun dtr (a)
     (* pi (/ a 180.0)))
    ;==============================================================================
    (defun c:hcn (/  *siz* pt dpt siz e1 e2 dx dy w h p0 p1 p2 p3 txt e4 e5 e6 e7 e8 ten1)
    (graphscr)
     (reset)
    ;==============================================================================
    ;(setq siz (cond (siz) (40)))
    ;(setq oldsiz siz)  
    ;(setq siz (getdist(strcat "\nNhap ty le ban ve: <" (rtos oldsiz 2 3) "> :")))
        ;(if (null siz) (setq siz oldsiz))
    
      (or *siz* (setq *siz* (* (getvar "dimtxt")(getvar "dimscale"))))
      (initget 6)
    	  (setq siz (getreal (strcat "\nNhap ty le ban ve <" (rtos *siz*) "> :")))	  
    	  (if siz (setq *siz* siz) (setq siz *siz*))
    
    ;==============================================================================
      (command "layer" "m" "glass" "c" "4" "" "")
      (command "layer" "s" "glass" "")
      (setq pt (getpoint "\nStarting corner:"))
    	(setq dpt (getcorner pt "\nDiagonal corner:"))
      (setq dx (abs (- (car dpt) (car pt))))
    (setq dy (abs (- (cadr dpt) (cadr pt))))
      (setq w (- dx 15))
      (setq h (- dy 15))
      (setq txt (* siz 3))
      (setvar "ltscale" (* siz 2)) 
      (setq p0 (polar pt (dtr 0) (/ dx 2)))
      (setq p1 (polar p0 (dtr 90) (/ dy 4)))
      (setq p2 (polar p1 (dtr 180) txt))
      (setq p3 (polar p1 (dtr 0) txt))
      (command "pline" pt ".x" dpt ".y" pt dpt ".x" pt ".y" dpt "c")
      (setq e1 (entlast))
      (command "offset" 7.5 e1 p1 "")
      (setq e2 (entlast))
      (command "offset" 6 e2 p1 "")
      (setq e7 (entlast))
    	(command "offset" 6 e7 p1 "")
      (setq e8 (entlast))
      (prompt "_.change")
      (command "_.change" e7 e8 "" "p" "c" "8" "lt" "dashed2" "")
      (command "erase" e1 "")
    ;==============================================================================
      (command "layer" "m" "text" "c" "7" "" "")
      (command "layer" "s" "text" "" "")
      (command "layer" "s" "text" "")
      	(command "text" "j" "mr" p2  txt 0 (rtos w 2 1) ) 
      (setq e4 (entlast))
      (command "layer" "s" "text" "")
      (command "text" "j" "ml" p3  txt 0 (rtos h 2 1) )
      (setq e5 (entlast))
      (command "layer" "s" "text" "")
      (command "text" "j" "mc" p1  txt 0 "X" )
      (setq e6 (entlast))
    	(setq ten1 (strcat (rtos w 2 1) " " "X" " " (rtos h 2 1)))
      (if (not(tblsearch "block" ten1) )
    (command "_.BLOCK" ten1 p1 e2 e4 e5 e6 e7 e8 "" "_.INSERT" ten1 p1 1 1 0)
    (progn (command "_.BLOCK" ten1 "y" p1 e2 e4 e5 e6 e7 e8 "" "_.INSERT" ten1 p1 1 1 0)
    (alert "\nDa ghi de len block trung ten")
    )
    )
    (reset1)
    	(princ)
     )
    ;==============================================================================
     (defun reset()
    	(setq old_lay (getvar "clayer"))
    	(setq old_txt (getvar "textstyle"))
    	(setvar "plinewid" 0.0)
    	(SETVAR "ORTHOMODE" 1)
    	(SETVAR "POLARMODE" 0)
    	(command  "style"   "romanc"  "romanc"  "0"	   ""		""		""		""		"")
    	(setvar "osmode" 15359)
    	(setvar "textstyle" "romanc")		
    )
    ;==============================================================================
    (defun reset1()
    	(setvar "osmode" 15359)
    	(setvar "plinewid" 0.0)
    	  (setvar "textstyle" old_txt)
      (command "layer" "s" old_lay "")
    )

    Lisp của em thực hiện vẽ như hình bên dưới

    vi_du_1.jpg

    Nhưng có lúc thực hiện nó lại thành hình như bên dưới không đúng vị trí chèn text

    vi_du_2.jpg

    hoặc

    vi_du_3.jpg

    Không biết là nguyên nhân do đâu lúc thì thực hiện chính xác lúc thì không.Nhờ các bác sửa dùm.


  4. Chào các anh chị,

     

    Em mới tham gia diễn đàn. Em có một tình huống như sau, nhờ anh chị hướng dẫn dùm. Thanks.

     

    Bản vẽ của em đang có khá nhiều Block có tên chứa đoạn text : *Cua phong*

     

    Bây giờ em muốn chuyển hàng loạt các block đó thành tên : *Cua nha ve sinh*

     

    Cho em hỏi lệnh RENAME của AutoCAD có đáp ứng được không? Cú pháp như thế nào? Đã sử dụng các wild-card characters như Help của AutoCAD, nhưng không được.

     

    Hoặc anh chị nào có đoạn Lisp cho em xin với. Xin chân thành cám ơn.

     

    Trong cad có mà

    -Gõ lệnh _rename

    -Tại name object chọn Blocks

    -Tại items chọn tên block mà bạn muốn sửa

    -Tại rename to gõ tên block mới tên cần sửa

    Chứ cần gì lisp


  5. Các bác giúp em với. Mấy cái này học ở trong mấy tài liệu về lisp không có. Mong các bác giúp đỡ.

    Như đoạn lisp của bác Giabach:

    ;; free lisp from cadviet.com
    (defun c:BlkQty (/ blk_id blk_len blk_name blks ent h header_lsp height i j
    	 len0 lst_blk msp pt row ss str tblobj width width1 width2 x y)
    ;;  By : Gia Bach, gia_bach @  www.CadViet.com			;;
    (defun TxtWidth (val h msp / txt minp maxp)
     (setq	txt (vla-AddText msp val (vlax-3d-point '(0 0 0)) h))
     (vla-getBoundingBox txt 'minp 'maxp )
     (vla-Erase txt)
     (-(car(vlax-safearray->list maxp))(car(vlax-safearray->list minp)))  )
    
    (defun GetOrCreateTableStyle (tbl_name / name namelst objtblsty objtblstydic tablst txtsty)
     (setq objTblStyDic (vla-item (vla-get-dictionaries *adoc) "ACAD_TABLESTYLE") )  
     (foreach itm (vlax-for itm objTblStyDic
    	 (setq tabLst (append tabLst (list itm))))
    (if (not
      (vl-catch-all-error-p
    	(setq name (vl-catch-all-apply 'vla-get-Name (list itm)))))
      (setq nameLst (append nameLst (list name)))  )  )
     (if (not (vl-position tbl_name nameLst))
    (vla-addobject objTblStyDic tbl_name "AcDbTableStyle"))
     (setq objTblSty (vla-item objTblStyDic tbl_name)
    TxtSty (variant-value (vla-getvariable *adoc "TextStyle")))
     (mapcar '(lambda (x)(vla-settextstyle objTblSty x TxtSty))
    	  (list acTitleRow acHeaderRow acDataRow) )
     (vla-setvariable *adoc "CTableStyle" tbl_name) )
    
    (defun GetObjectID (obj)
     (if (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))
    (vlax-invoke-method *util 'GetObjectIdString obj :vlax-false )
    (vla-get-Objectid obj)))  
    ;main
     (if (setq ss (ssget (list (cons 0 "INSERT"))))
    (progn
      (vl-load-com)
      (setq i -1 len0 8)
      (while (setq ent (ssname ss (setq i (1+ i))))
    (setq blk_name (cdr (assoc 2 (entget ent))))
    (if (> (setq blk_len (strlen blk_name)) len0)
      (setq str blk_name len0 blk_len) )	
    (if (not (assoc blk_name lst_blk))
      (setq lst_blk (cons (cons blk_name 1) lst_blk))
      (setq lst_blk (subst (cons blk_name (1+ (cdr (assoc blk_name lst_blk))))
    			   (assoc blk_name lst_blk) lst_blk)))		)
      (setq lst_blk (vl-sort lst_blk '(lambda (x y) (< (car x) (car y)) ) ))
      (or *h* (setq *h* (* (getvar "dimtxt")(getvar "dimscale"))))
      (initget 6)
      (setq h (getreal (strcat "\nChieu cao chu <" (rtos *h*) "> :")))	  
      (if h (setq *h* h) (setq h *h*) )
      (or *adoc (setq *adoc (vla-get-ActiveDocument (vlax-get-acad-object))))
      (setq msp (vla-get-modelspace *adoc)
    	*util (vla-get-Utility *adoc)
    	blks (vla-get-blocks *adoc))	  
      (setq width1 (* 2 (TxtWidth "STT" h msp))
    	width (* 2 (TxtWidth "So luong" h msp))
    	height (* 2 h))
      (if str
    (setq width2 (* 1.5 (TxtWidth (strcase str) h msp)))
    (setq width2 width))
      (if (> h 3)
    (setq width (* (fix (/ width 10))10)
    	  width1 (* (fix (/ width1 10))10)
    	  width2 (* (fix (/ width2 10))10)
    	  height (* (fix (/ height 5))5)))
      (GetOrCreateTableStyle "CadViet")
      (setq pt (getpoint "\nDiem dat Bang :")
    	TblObj (vla-addtable msp (vlax-3d-point pt) (+ (length lst_blk) 2) 5 height width))
      (vla-put-regeneratetablesuppressed TblObj :vlax-true)
      (vla-SetColumnWidth TblObj 0 width1)
      (vla-SetColumnWidth TblObj 1 width2)
      (vla-put-vertcellmargin TblObj (* 0.75 h))
      (vla-put-horzcellmargin TblObj (* 0.75 h))
      (mapcar '(lambda (x)(vla-setTextHeight TblObj x h))
    	  (list acTitleRow acHeaderRow acDataRow) )
      (mapcar '(lambda (x)(vla-setAlignment TblObj x 8))
    	  (list acTitleRow acHeaderRow acDataRow))	  
      (vla-MergeCells TblObj 0 0 0 4)
      (vla-setText TblObj 0 0 "Bang thong ke")
      (setq j -1 header_lsp (list "STT" "Ten" "Don vi" "So luong" "Ky hieu")) 
      (repeat (length header_lsp)
    (vla-setText TblObj 1 (setq j (1+ j)) (nth j header_lsp)))
      (setq row 2 i 1)	
      (foreach pt lst_blk
    (setq blk_name (car pt) j -1)
    (mapcar '(lambda (x)(vla-setText TblObj row (setq j (1+ j)) x))
    	(list i blk_name "cai" (cdr pt)))
    (vla-SetBlockTableRecordId TblObj row 4 (GetObjectID (vla-item blks blk_name)) :vlax-true)
    (vla-SetCellAlignment TblObj row 1 7)
    (vla-SetCellAlignment TblObj row 3 9)
    (setq row (1+ row) i (1+ i))	)
      (vla-put-regeneratetablesuppressed TblObj :vlax-false)
      (vlax-release-object TblObj) )  )
     (princ))


  6. Update : Thống kê Block trong bản vẽ.

    Fix : tên Block tiếng Việt .

    tkvt.jpg

    (defun c:BlkQty (/ blk_id blk_len blk_name blks ent h header_lsp height i j
    	 len0 lst_blk msp pt row ss str tblobj width width1 width2 x y)
    ;;  By : Gia Bach, gia_bach @  www.CadViet.com             ;;
    (defun TxtWidth (val h msp / txt minp maxp)
     (setq	txt (vla-AddText msp val (vlax-3d-point '(0 0 0)) h))
     (vla-getBoundingBox txt 'minp 'maxp )
     (vla-Erase txt)
     (-(car(vlax-safearray->list maxp))(car(vlax-safearray->list minp)))  )
    
    (defun GetOrCreateTableStyle (tbl_name / name namelst objtblsty objtblstydic tablst txtsty)
     (setq objTblStyDic (vla-item (vla-get-dictionaries *adoc) "ACAD_TABLESTYLE") )  
     (foreach itm (vlax-for itm objTblStyDic
    	 (setq tabLst (append tabLst (list itm))))
       (if (not
      (vl-catch-all-error-p
        (setq name (vl-catch-all-apply 'vla-get-Name (list itm)))))
         (setq nameLst (append nameLst (list name)))  )  )
     (if (not (vl-position tbl_name nameLst))
       (vla-addobject objTblStyDic tbl_name "AcDbTableStyle"))
     (setq objTblSty (vla-item objTblStyDic tbl_name)
    TxtSty (variant-value (vla-getvariable *adoc "TextStyle")))
     (mapcar '(lambda (x)(vla-settextstyle objTblSty x TxtSty))
          (list acTitleRow acHeaderRow acDataRow) )
     (vla-setvariable *adoc "CTableStyle" tbl_name) )
    
    (defun GetObjectID (obj)
     (if (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))
       (vlax-invoke-method *util 'GetObjectIdString obj :vlax-false )
       (vla-get-Objectid obj)))  
    ;main
     (if (setq ss (ssget (list (cons 0 "INSERT"))))
       (progn
         (vl-load-com)
         (setq i -1 len0 8)
         (while (setq ent (ssname ss (setq i (1+ i))))
    (setq blk_name (cdr (assoc 2 (entget ent))))
    (if (> (setq blk_len (strlen blk_name)) len0)
      (setq str blk_name len0 blk_len) )	
    (if (not (assoc blk_name lst_blk))
      (setq lst_blk (cons (cons blk_name 1) lst_blk))
      (setq lst_blk (subst (cons blk_name (1+ (cdr (assoc blk_name lst_blk))))
    		       (assoc blk_name lst_blk) lst_blk)))	    )
         (setq lst_blk (vl-sort lst_blk '(lambda (x y) (< (car x) (car y)) ) ))
         (or *h* (setq *h* (* (getvar "dimtxt")(getvar "dimscale"))))
         (initget 6)
         (setq h (getreal (strcat "\nChieu cao chu <" (rtos *h*) "> :")))      
         (if h (setq *h* h) (setq h *h*) )
         (or *adoc (setq *adoc (vla-get-ActiveDocument (vlax-get-acad-object))))
         (setq msp (vla-get-modelspace *adoc)
        *util (vla-get-Utility *adoc)
        blks (vla-get-blocks *adoc))      
         (setq width1 (* 2 (TxtWidth "STT" h msp))
        width (* 2 (TxtWidth "So luong" h msp))
        height (* 2 h))
         (if str
    (setq width2 (* 1.5 (TxtWidth (strcase str) h msp)))
    (setq width2 width))
         (if (> h 3)
    (setq width (* (fix (/ width 10))10)
          width1 (* (fix (/ width1 10))10)
          width2 (* (fix (/ width2 10))10)
          height (* (fix (/ height 5))5)))
         (GetOrCreateTableStyle "CadViet")
         (setq pt (getpoint "\nDiem dat Bang :")
        TblObj (vla-addtable msp (vlax-3d-point pt) (+ (length lst_blk) 2) 5 height width))
         (vla-put-regeneratetablesuppressed TblObj :vlax-true)
         (vla-SetColumnWidth TblObj 0 width1)
         (vla-SetColumnWidth TblObj 1 width2)
         (vla-put-vertcellmargin TblObj (* 0.75 h))
         (vla-put-horzcellmargin TblObj (* 0.75 h))
         (mapcar '(lambda (x)(vla-setTextHeight TblObj x h))
          (list acTitleRow acHeaderRow acDataRow) )
         (mapcar '(lambda (x)(vla-setAlignment TblObj x 8))
          (list acTitleRow acHeaderRow acDataRow))      
         (vla-MergeCells TblObj 0 0 0 4)
         (vla-setText TblObj 0 0 "Bang thong ke")
         (setq j -1 header_lsp (list "STT" "Ten" "Don vi" "So luong" "Ky hieu")) 
         (repeat (length header_lsp)
    (vla-setText TblObj 1 (setq j (1+ j)) (nth j header_lsp)))
         (setq row 2 i 1)    
         (foreach pt lst_blk
    (setq blk_name (car pt) j -1)
    (mapcar '(lambda (x)(vla-setText TblObj row (setq j (1+ j)) x))
    	(list i blk_name "cai" (cdr pt)))
    (vla-SetBlockTableRecordId TblObj row 4 (GetObjectID (vla-item blks blk_name)) :vlax-true)
    (vla-SetCellAlignment TblObj row 1 7)
    (vla-SetCellAlignment TblObj row 3 9)
    (setq row (1+ row) i (1+ i))	)
         (vla-put-regeneratetablesuppressed TblObj :vlax-false)
         (vlax-release-object TblObj) )  )
     (princ))
    

     

    Mò mãi mà không ra. Bác Gia Bạnh giúp em tạo cái bảng này bằng lisp của bác được không?

    0000_3.jpg

    Còn đây là file cad của em.

    File cad

     

    Các chỗ khác vẫn bình thường duy chỉ có cột W và H là khác. Block của em có tên là W x H.


  7. Cái này thì được rùi nhưng vẫn chưa đúng ý của em.

    Vì em muốn là lưu giá trị trước đó chứ không phải giá trị cố định:(setq kco 40))

    (defun dtr (a)
     (* pi (/ a 180.0)))
    ;==================================================================
    (defun c:t4 (/ ptc ten txt p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 e1 e2 siz kco  )
    (graphscr)
     (reset)
    ;==================================================================  
      (if (not kco) (setq kco 40))
    (setq siz (getdist(strcat "\nNhap ty le ban ve: <" (rtos kco) "> :")))
    (if (not siz) (setq siz kco) (setq kco siz))
    
      (setq ptc (getpoint "\nDiem chen ten:"))
      (setq ten (strcase (getstring "Enter name glass:")))
      (setq txt (* siz 6))
      (setq p0 (polar ptc (dtr 90) (* txt 1)))
      (setq p1 (polar p0 (dtr 180) (* txt 3)))
      (setq p2 (polar p1 (dtr 270) (* txt 2)))
      (setq p3 (polar p2 (dtr 0) (* txt 6)))
      (setq p4 (polar p3 (dtr 90) (* txt 2)))
      (setq p5 (polar p2 (dtr 0) (/ txt 4)))
      (setq p6 (polar p5 (dtr 270) (/ txt 4)))
      (setq p7 (polar p6 (dtr 0) (* txt 6)))
      (setq p8 (polar p7 (dtr 90) (* txt 2)))
      (setq p9 (polar p8 (dtr 180) (/ txt 4)))
      	(command "pline" p0 p1 p2 p3 p4  "c")
      (setq e1 (entlast))
    (prompt "_.change")
      (command "_.change" e1 "" "p" "c" "3" "")
      (command "pline" p5 p6 p7 p8 p9  "" "" )
      (setq e2 (entlast))
    (prompt "_.change")
      (command "_.change" e2 "" "p" "c" "3" "")
    ;==================================================================
      (command "layer" "m" "text" "c" "7" "" "")
      (command "layer" "s" "text" "" "")
      	(command "text" "j" "m" ptc  txt 0 ten \e) 
    (reset1)
    	(princ)
     )
    ;==================================================================
     (defun reset()
    	(setq old_lay (getvar "clayer"))
    	(setq old_txt (getvar "textstyle"))
    	(setvar "textstyle" "romans")
    	(setvar "osmode" 0)	
    )
    ;==================================================================
    (defun reset1()
    	(setvar "osmode" 15359)
    	(setvar "plinewid" 0.0)
    	  (setvar "textstyle" old_txt)
      (command "layer" "s" old_lay "")
    )


  8. Hề hề hề,

    Tất cả mọi người đều biết qua sâch vở cả, việc vận dụng kiến thức biết được vào giải quyết các vấn đề thực tế là điều duy nhất để chứng tỏ cái sự biết của mình. Biết lắm mà chả vận dụng dược chi thì đó chỉ là cái thư viện di động thôi, và trong thời buổi hiện tại thì loại thư viện này đã hết giá trị lịch sử của nó.

    Hề hề hề. Vậy nên bạn cứ chịu khó thực hành sẽ biến được cái thư viện của bạn thành các giá trị vật chất đáng giá bạn ạ.

    Chúc bạn thành công...

    Thanks bác Bình đã động viên. Đang hứng xem kết quả của mình thế nào.

    Nên em hỏi luôn bác một vấn đề nữa.

    Làm thế nào để lưu giá trị một biến để không phải nhập lại giá trị khi sử dụng lisp lần sau.

    Ví dụ: Em muốn lưu giá trị "siz" để lần sau thực hiên lisp nếu enter thì chấp nhận giá trị trước. Nếu không thì nhập giá trị mới.

    (setq siz (getreal "\nEnter drawing scale:"))


  9. Hề hề Bác bình à!

    Em cũng nghĩ đến việc dùng giá trị tuyệt đối rồi nhưng do bạn mới làm quen với lisp nên đưa ra trường hợp cụ thể trong hình ảnh của bạn đó thôi. Để cho bạn tìm hiểu dần dần không có thì loạn đầu mất.

    Hề hề hề,

    Bác Phamngoctukts ơi,

    Vì lấy giá trị dx và dy nên bác nên có hàm abs phía trước bác ạ.

    Cảm ơn hai bác!!!

    Em làm được rùi hì.

    (setq dx (abs (- (car dpt) (car pt))))
    (setq dy (abs (- (cadr dpt) (cadr pt))))
      (setq w (- dx 15))
      (setq h (- dy 15))

    Các bác à thực sự là nhưng hàm trên em đều biết qua sách vở.Nhưng điều khó khăng nhất là việc vẫn dụng những hàm đó như thế nào là rất khó.

    Thế nên phải qua những ví dụ thực tế thì mới thấu hiểu được nó.


  10. Tương tự như thế, bạn hatieu nên kiểm tra là textstyle có Style "romanc" chưa?

    Vì nếu với 1 bản vẽ mới chưa có Style "romanc" thì Lisp sẽ không chạy được.

    Thể hiện ở dòng code này của bạn :

    (setvar "textstyle" "romanc")

     

    Bạn kiểm tra bản vẽ có Style "romanc" chưa? -> Sử dụng hàm tblsearch

    Nếu có rồi thì (setvar "textstyle" "romanc")

    Nếu chưa có thì phải tạo ra nó và đương nhiên khi tạo ra nó thì nó đã là textstyle hiện hành :)

     

    Vâng nếu bản vẽ mà không có style "romanc" và không có layer "text" thì lisp sẽ không thực hiện

    Nhưng với em trước khi tạo bản vẽ mới thì em đã cho tự động tạo các style và layer cần thiết rùi.

    Cảm ơn bác đã góp ý.


  11. Hihi,Cảm ơn bác Tue đã nhắc nhở e

     

    Bạn thêm hàm kiểm tra này nhé:

     

    (if (not(tblsearch "block" ten) )

    (command "_.BLOCK" ten pt1 e2 e3 e4 e5 e6 ""

    "_.INSERT" ten pt1 1 1 0)

    (alert "\n Da trung ten Block")

    )

    Đoạn này của bác Nguyentuyen6 thì kiểm tra ok rùi nhưng không tạo được block.

    Em muốn nó kiểm tra rùi nếu trùng tên thì vẫn thực hiện lệnh tạo block trùng tên với block đã có.

    Như đoạn (command "-block" ten1 p1 e2 e3 e4 e5 e6 "" "insert" ten1 "y" p1 1 1 0 ) của bác phamngoctukts em thử rùi nhưng vẫn không được.

    Việc em tao block này là nhưng tấm có cùng kích thước thì phải cùng tên để sau này em dùng lệnh thống kê block để thống kê tấm.


  12. Góp ý với bác Bình cùng bạn nguyentuyen va hattieu :

    Nên kiểm tra TenBlock đã có trong bản vẽ chưa đã rồi mới tạo Block?

    Nếu Tên Block đã tồn tại trong bản vẽ thì cả 2 Lísp của bác Bình và bạn nguyen tuyen sẽ.....

     

    Kiểm tra TenBlock đã có trong bản vẽ chưa bằng hàm tblsearch

     

    Cảm ơn ý kiến của bác. Ok nếu dùng hàm đó kiểm tra mà chưa có thì ok.

    Còn nếu mà có rùi thì em muốn nó ghi đè lên block đã có.Vậy thì làm thế nào nhỉ các bác.

    Em mới học lisp nên còn nhiều bỡ ngỡ mong các bác giúp.


  13. Chào bạn hatieu,

    Bạn thử cái này nhé.

    (command "-block" (getstring T "\n Nhap ten block: ") p1 e2 e3 e4 e5 e6 "")

    Ở đây em muốn nhập tên block tự động bằng ten1 (tự động nhập) em dùng hàm strcat để nối chuỗi như bên dưới.

    Và em thêm phần sau "insert" ten1 p1 1 1 0 như của Nguyentuyen6

    (setq ten1 (strcat ten "-" "("(rtos w 2 1) "-" (rtos h 2 1)")"))

    (command "-block" ten1 p1 e2 e3 e4 e5 e6 "" "insert" ten1 p1 1 1 0 )

    Và đây là toàn bộ chương chỉnh em mới sửa xong thấy có vẻ như ổn ổn rùi, các bác xem phần nào chưa được hay lắm nhờ các bác tư vấn.

    (defun dtr (a)
     (* pi (/ a 180.0)))
    ;=====================================================
    (defun c:hcn (/ ptc w h dx dy deta_gap pt1 pt2 pt3 p0 p1 p2 p3 p4 txt siz e1 e2 e3 e4 e5 e6 ten ten1)
    (graphscr)
     (reset)
     (if (= siz nil)
    (setq siz (getreal "\nEnter drawing scale:"))
    )
      (setq ptc (getpoint "\nCorner point:"))
    	(setq dx (getreal "Enter horizontal dimension of box:"))
      	(setq dy (getreal "Enter vertical dimension of box:"))
      (setq ten (strcase (getstring "Enter name glass:")))
      (setq w  (- dx 15 ))
      (setq h  (- dy 15 ))
      	(setq pt1 (polar ptc (dtr 0) dx))
      (setq pt2 (polar pt1 (dtr 90) dy))
      (setq pt3 (polar pt2 (dtr 180) dx))
      (setq p0 (polar ptc (dtr 0) (/ dx 2)))
      (setq p1 (polar p0 (dtr 90) (/ dy 2)))
      (setq p4 (polar p1 (dtr 90) (/ dy 10)))
      (setq p2 (polar p4 (dtr 180) (/ dy 5)))
      (setq p3 (polar p4 (dtr 0) (/ dy 5)))
      (setq txt (* siz 3))
      	(command "pline" ptc pt1 pt2 pt3 "c")
    ;============================================
      (setq e1 (entlast))
    (prompt "_.change")
      (command "_.change" e1 "" "p" "c" "3" "")
      (command "offset" 7.5 e1 pause "")
      (setq e2 (entlast))
      (command "erase" e1 "")
    ;============================================
      (command "layer" "m" "text" "c" "7" "" "")
      (command "layer" "s" "text" "" "")
      	(command "text" "j" "mc" p1  txt 0 ten )
      (setq e3 (entlast))
      (command "layer" "s" "text" "")
      	(command "text" "j" "mc" p2  txt 0 (rtos w 2 1) \e) 
      (setq e4 (entlast))
      (command "layer" "s" "text" "")
      (command "text" "j" "mc" p3  txt 0 (rtos h 2 1) \e)
      (setq e5 (entlast))
      (command "layer" "s" "text" "")
      (command "text" "j" "mc" p4  txt 0 "X" )
      (setq e6 (entlast))
    	(setq ten1 (strcat ten "-" "("(rtos w 2 1) "-" (rtos h 2 1)")"))
      (command "-block" ten1 p1 e2 e3 e4 e5 e6 "" "insert" ten1 p1 1 1 0 ) 
    (reset1)
    	(princ)
     )
    ;-----------------------------------
     (defun reset()
    (setq old_osm (getvar "osmode"))
    	(setq old_lay (getvar "clayer"))
    	(setq old_txt (getvar "textstyle"))
    	(setvar "osmode" 0)
    	(setvar "textstyle" "romanc")		
    )
    ;---------------------------------------
    (defun reset1()
    	(setvar "osmode" old_osm)
    	(setvar "plinewid" 0.0)
    	  (setvar "textstyle" old_txt)
      (command "layer" "s" old_lay "")
    )

    Và kết quả khi thực hiện

    0000_1.jpg


  14. Ok thanks nguyentuyen6. Mình cũng đã nghĩ đến việc dùng hàm rtos nhưng chưa hiểu cấu trúc.Nhưng bây giờ thì mình đã hiểu.

    Bạn giúp mình đoạn này để tạo Block.

    (setq e1 (entlast))
    (prompt "_.change")
      (command "_.change" e1 "" "p" "c" "3" "")
      (command "offset" 7.5 e1 pause "")
      (setq e2 (entlast))
      (command "erase" e1 "")
    ;============================================
      (command "layer" "m" "text" "c" "7" "" "")
      (command "layer" "s" "text" "" "")
      	(command "text" "j" "mc" p1  txt 0 ten )
      (setq e3 (entlast))
      (command "layer" "s" "text" "")
      	(command "text" "j" "mc" p2  txt 0 (rtos w 2 1) \e) 
      (setq e4 (entlast))
      (command "layer" "s" "text" "")
      (command "text" "j" "mc" p3  txt 0 (rtos h 2 1) \e)
      (setq e5 (entlast))
      (command "layer" "s" "text" "")
      (command "text" "j" "mc" p4  txt 0 "X" )
      (setq e6 (entlast))
       (command "block" ?????????????????????????????)

     

    Trong đó: ten1 là tên của block=ten(wxh), p1 là điểm chèn, e2 e3 e4 e5 e6 là các đối tượng chọn để tạo block


  15. Đây là đoạn lisp của em nhờ các bác sửa giúp em. Em không biết làm thế nào để hết số 0 đằng sau dấu phẩy được.

    (defun dtr (a)
     (* pi (/ a 180.0)))
    ;=====================================================
    (defun c:hcn (/ ptc w h dx dy pt1 pt2 pt3 p0 p1 p2 p3 p4 txt siz e1 e2 ten)
    (graphscr)
     (reset)
     (if (= siz nil)
    (setq siz (getreal "\nEnter drawing scale:"))
    )
      (setq ptc (getpoint "\nCorner point:"))
    	(setq dx (getreal "Enter horizontal dimension of box:"))
      	(setq dy (getreal "Enter vertical dimension of box:"))
      (setq ten (strcase (getstring "Enter name glass:")))
      (setq w  (- dx 15 )) ;Sửa giúp em đoạn này
      (setq h  (- dy 15 ));Sửa giúp em đoạn này
      	(setq pt1 (polar ptc (dtr 0) dx))
      (setq pt2 (polar pt1 (dtr 90) dy))
      (setq pt3 (polar pt2 (dtr 180) dx))
      (setq p0 (polar ptc (dtr 0) (/ dx 2)))
      (setq p1 (polar p0 (dtr 90) (/ dy 2)))
      (setq p4 (polar p1 (dtr 90) (/ dy 10)))
      (setq p2 (polar p4 (dtr 180) (/ dy 5)))
      (setq p3 (polar p4 (dtr 0) (/ dy 5)))
      (setq txt (* siz 3))
      	(command "pline" ptc pt1 pt2 pt3 "c")
    ;============================================
      (setq e1 (entlast))
    (prompt "_.change")
      (command "_.change" e1 "" "p" "c" "3" "")
      (command "offset" 7.5 e1 pause "")
      (setq e2 (entlast))
      (command "erase" e1 "")
    ;============================================
      (command "layer" "m" "text" "c" "7" "" "")
      (command "layer" "s" "text" "" "")
      	(command "text" "j" "mc" p1  txt 0 ten )
      (command "layer" "s" "text" "")
      	(command "text" "j" "mc" p2  txt 0 w \e) ;Sửa giúp em đoạn này
      (command "layer" "s" "text" "")
      (command "text" "j" "mc" p3  txt 0 h \e) ;Sửa giúp em đoạn này
      (command "layer" "s" "text" "")
      (command "text" "j" "mc" p4  txt 0 "X" )
    (reset1)
    	(princ)
     )
    ;-----------------------------------
     (defun reset()
    (setq old_osm (getvar "osmode"))
    	(setq old_lay (getvar "clayer"))
    	(setq old_txt (getvar "textstyle"))
    	(setvar "osmode" 0)
    	(setvar "textstyle" "romanc")		
    )
    ;---------------------------------------
    (defun reset1()
    	(setvar "osmode" old_osm)
    	(setvar "plinewid" 0.0)
    	  (setvar "textstyle" old_txt)
      (command "layer" "s" old_lay "")
    )

     

    Đây là kết quả khi thực hiện lệnh lisp này

    0000.jpg


  16. Phù....!!!!Vẽ nhiều composite panel mệt quá, mà vẫn chưa tìm ra giải pháp. Rất mong các bác giúp.

    Đây là em sưu tầm được trên mạng. Nhưng vẫn chưa theo ý của em.Cái khó nhất là chỗ góc lượn. :lol:

    (defun c:ppp (/ e1 a th ir e2 e3 e4 e5 e6 p1 p2 p3 p4 osn ofr oecho oerr)
     (vl-load-com)
    
     (setq oerr *error*)
     (defun *error* (msg)
    (princ "\n ERROR! 
    ")
    (setvar "filletrad" ofr)
    (setvar "cmdecho" oecho)
    (setvar "osmode" osn)
    (setq *error* oerr)
    (command)
    (princ)
     )
    
     (princ "\n Draw Face Of Panel Profile : ")
     (command "._pline")
     (while (= 1 (getvar "CMDACTIVE"))
    (command PAUSE)
     )
     (setq	e1 (entlast)
    a  (getpoint "\n Pick A Point On The Interior Side Of The Panel : ")
    th (/ (getdist "\n Input The Panel Thickness: ") 2)
    ir (+ th 0.03125)
    osn (getvar "osmode")
    ofr (getvar "filletrad")
    oecho (getvar "cmdecho")
     )
     (setvar "filletrad" (+ th 0.03125))
     (setvar "osmode" 8)
     (setvar "cmdecho" 0)
     (command "offset" th e1 a "")
     (setq e2 (entlast))
     (command "erase" e1 "")
     (command "fillet" "p" "l")
     (princ "\n Pick A Point On The Exterior Side Of The Panel: ")
     (command "offset" th e2 pause "")
     (setq e3 (entlast))
     (princ "\n Pick A Point On The Interior Side Of The Panel: ")
     (command "offset" th e2 pause "")
     (setq e4 (entlast))
     (command "erase" e2 "")
     (setq p1 (vlax-curve-getStartPoint e3)
    p2 (vlax-curve-getStartPoint e4)
    p3 (vlax-curve-getEndPoint e3)
    p4 (vlax-curve-getEndPoint e4))
     (command "line" p1 p2 "")
     (setq e5 (entlast))
     (command "line" p3 p4 "")
     (setq e6 (entlast))
     (command "pedit" e3 "j" e4 e5 e6 "" "")
     (setvar "osmode" osn)
     (setvar "filletrad" ofr)
     (setvar "cmdecho" oecho)
    
     (princ)
    )

     

    Em muốn thực hiện vẽ được như theo bản vẽ bên dưới.

    File Composite panel.dwg

     

    1_20.jpg

    2_11.jpg

×