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

namnhim

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

    71
  • Đã tham gia

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

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


  1. tình hình như này, mình coppy giường ở thư viện, dùng xong rồi copy tiếp cái cửa, ctrl V thì nó vẫn ra cái giường, bây giờ phải làm thế nào?

    Lý do có thể cái Block giường và cửa trùng tên nên đã copy cái giường sang bản vẽ rồi, giờ muốn copy cái cửa nữa sang bản vẽ thì nó vần hiểu là cái Block giường. bạn thử EXPLODE nó ra và đặt lại tên khác xem có được không.


  2. Bạn dùng thử cái này xem có đúng ý không. Trước khi quét vùng cần Boundary thì cần tắt bớt 1 số Layer đối tượng bên trong thửa như là nhà hoặc ao và chỉ để đối tượng là thửa đất thôi nhé!

    (defun c:BN (/ boun_lst cnt i ov sec ss time vl)
    (command "-layer" "n" "BOUNDARY" "l" "CONTINUOUS" "BOUNDARY" "c" 4 "BOUNDARY" "")
       (command "-layer" "s" "BOUNDARY" "")
      (vl-load-com)
      (command "_.undo" "_begin")  
      (if (setq ss (ssget '((0 . "LINE"))))
        (progn
          (setq vl '("DELOBJ" "CMDECHO") ; Sys Var list
    	    ov (mapcar 'getvar vl))  ; Get Old values
          (setq time (getvar "millisecs"))
          (mapcar 'setvar vl '( 1 0))
          (setq ss (break_SSLine ss))
          (command "region" ss "")
          (if (setq ss (ssget "x" '((0 . "region"))))
    	(progn
    	  (setq i 0)
    	  (while (< i (sslength ss))
    	    (if (> (sslength ss) 50)
    	      (princ (strcat "Objects Convert " (itoa i) "\r"))  )
    	    (command "explode" (ssname ss i))
    	    (command "pedit" "l" "" "j" (ssget "p") "" "")
    	    (setq boun_lst (cons (entlast) boun_lst))
    	    (setq i (1+ i))    )
    	  (setq boun_lst(moveAreaMax boun_lst))
    	  (setq sec (/ (- (getvar "MILLISECS") time) 1000.0)  )
    	  (if (>(setq cnt (length boun_lst))0)
    	    (princ (strcat "\nTao duoc " (itoa cnt)
    			   " duong bao voi Th/gian = "(rtos sec 2 2) " s."))
    	    (princ (strcat "\nSorry! Khong tao duoc duong bao!")))  ))
          (mapcar 'setvar vl ov)))
      (command "_.undo" "_end")
      (princ))
    
    (defun moveAreaMax (lst / area otmp tmp)
      (setq	tmp 0
    	otmp nil)
      (foreach e lst
        (if (> (setq area (vla-get-area (vlax-ename->vla-object e))) tmp)
          (setq tmp area
    	    otmp e)) )
      (if otmp
        (progn
          (entdel otmp)
          (vl-remove otmp lst)  )  ))
    
    (defun break_SSLine (ss / ds ent intpts lastentindatabase lst masterlist oc sslst)
      (defun ssget->vla-list (ss / i ename allobj)
        (setq i -1)
        (while (setq  ename (ssname ss (setq i (1+ i))))
          (setq allobj (cons (vlax-ename->vla-object ename) allobj))       )
        allobj  )
    
      (defun list->3pair (old / new)
        (while (setq new (cons (list (car old) (cadr old) (caddr old)) new)
                     old (cdddr old)))
        (reverse new)  )
      
      (defun get_interpts (obj1 obj2 / iplist)
        (if (not (vl-catch-all-error-p
    	       (setq iplist (vl-catch-all-apply
                                'vlax-safearray->list
                                (list
                                  (vlax-variant-value
                                    (vla-intersectwith obj1 obj2 acextendnone) ))))))
        iplist  ))
      
    ;;====================================
    ;;  CAB - get last entity in datatbase
    (defun GetLastEnt ( / ename result )
      (if (setq result (entlast))
        (while (setq ename (entnext result))
          (setq result ename)    )  )
      result)
    
    (defun GetNewSS (ename / new)
      (setq new (ssadd))
      (cond
        ((null ename) (alert "Ename nil"))
        ((eq 'ENAME (type ename))
          (while (setq ename (entnext ename))
            (if (entget ename) (ssadd ename new)) )    )
        ((alert "Ename wrong type."))  )
      new)
    
    (defun break_line (ent brkptlst / pt1 pt2  x)
      (if brkptlst
        (progn
          (setq brkptlst (mapcar '(lambda(x) (list x (vlax-curve-getdistatparam ent
    						   ;; ver 2.0 fix
    						   (cond ((vlax-curve-getparamatpoint ent x))
    							 ((vlax-curve-getparamatpoint ent
    							    (vlax-curve-getclosestpointto ent x))))))
    				) brkptlst))
          ;; sort primary list on distance
          (setq brkptlst (vl-sort brkptlst '(lambda (a1 a2) (< (cadr a1) (cadr a2)))))
          (setq pt1 (car(car brkptlst)))
          (foreach e (cdr brkptlst)
    	(setq pt2 (car e))
    	(entmake (list '(0 . "LINE")(cons 10 pt1)(cons 11 pt2) ))
    	(setq pt1 pt2)
    	(and *BrkVerbose* (princ (setq *brkcnt* (1+ *brkcnt*))) (princ "\r"))	)      ) ))
      
      ;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      ;;         S T A R T  S U B R O U T I N E   H E R E              
      ;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      (setq LastEntInDatabase (GetLastEnt))
      (if ss
        (progn
          (setq oc 0
                ssLst (ssget->vla-list ss))
          (if (> (length ssLst) 22) (setq *BrkVerbose* t) )
          (and *BrkVerbose*
    	   (princ (strcat "Objects to be Checked: "
    			  (rtos (* 0.5(length ssLst)(length ssLst))2 0) "\n")))
          ;;  CREATE a list of entity & it's break points
          (foreach obj ssLst
            (setq lst nil)
    	;; check for break pts with other objects in ss2brkwith
    	(foreach intobj (vl-remove obj ssLst)
    	  (if (and (not (equal obj intobj))
    		   (setq intpts (get_interpts obj intobj)))
    	    (setq lst (append (list->3pair intpts) lst)) )  )
    	(if lst
    	  (setq masterlist (cons (cons (vlax-vla-object->ename obj) lst) masterlist)) ) )
          
          (and *BrkVerbose* (princ "\nBreaking Objects.\n"))
          (setq *brkcnt* 0) ; break counter
          (if masterlist
            (foreach obj2brk masterlist
              (break_line (car obj2brk) (cdr obj2brk)) ) ) ) )
    ;;==============================================================
       (and (zerop *brkcnt*) (princ "\nNone to be broken."))
       (setq *BrkVerbose* nil)
      (GetNewSS LastEntInDatabase) ; return list of enames of new objects
    )
    

  3. Bạn dùng cái này xem có đúng ý không

     

    (defun c:lktd ( )
    (command "undo" "be")
      (if (null dolora)(setq dolora "4"))
    (Setq temp T)
    (While temp
    (setq a (strcat "\nKhoang cach dim hien hanh la (" dolora ") /<Diem dau tien>: "))
    (Initget "k K")
    (setq str (getpoint a))
    (Cond
      ((= str "k") (setq dolora (getstring (strcat"\nKhoang cach dim voi line <" dolora "> :"))))
      ((= str "K") (setq dolora (getstring (strcat"\nKhoang cach dim voi line <" dolora "> :"))))
       (Progn
      (Setq a str)
       (setq temp nil)
      )
    )
    )
     
    (setq b (getpoint a"\nChon diem tiep theo: "))
    (setq luubatdiem (getvar "osmode"))
      (setvar "osmode" 0)
     (setq doclora (atof dolora))
     (setq gocxeo(angle a B))
     (setq daiab (distance a B))
     (setq c (polar a gocxeo (/ daiab 2)))
     (setq d (polar c (+ gocxeo (/ pi 2)) doclora))
    (command "DIMALIGNED" a b d)
    (cond
    ((> gocxeo (/ pi 2)) (command ".rotate" "last" "" c 180))
    )
    (setvar "osmode" luubatdiem)
    (command "undo" "end")
     (Princ)
    )

  4. cảm ơn anh đã có lời khuyên, thực sự là em cũng rất muốn học nếu có thời gian và nhất định trong thời gian tới em sẽ tham ra!

    - anh ơi, đoạn này nó có vấn đề gì không mà em load lên nó báo lỗi này  ; error: malformed string on input        anh ạ:

     "r" (/ (* 180 (angle (setq p3 (getpoint "\n Nhap diem dau tren pline tim duong")) (setq p4 (getpoint p3 "\n Nhap diem dinh huong thu hai tren pline tim duong)))) pi)


  5. vấn đề đã được giải quyết đơn giản và hiệu quả hơn rồi anh ạ,

    có 1 chút nữa em muốn hỏi "r" 50 thì ok, nhưng muốn R quay theo mình chọn như dòng nhắc "nhap diem goc tren ben trai cua dong text" => "nhap diem goc duoi ben phai dong text" thì không được anh nhỉ

     

    anh ơi, nếu bỏ góc quay  "R" 50 mà chỉ để "R" và pick điểm đầu và cuối của của đoạn thẳng làm hướng cho text song song được không


  6.  Có lẽ là rất khó có thể làm được rồi!  

    vậy có lẽ phải làm thêm thao tác gọi Text nhưng nhờ các anh thêm và sửa giúp em:

    - Đoạn hỏi ở đây thì mặc định là R không hỏi lại:

    Specify opposite corner or [Height/Justify/Line spacing/Rotation/Style/Width]: R

    - Đến đoạn nhập Mtext: ..... thì phải Enter 2 lần, sửa như thế nào để Enter 1 lần là được(đoạn nhập Text mình có thể viết sẵn 1 đoạn text bất kỳ được không các anh nhỉ?)

     

    (DEFUN C:TD5()
    (setvar "CMDECHO" 0.000)
    (prompt "\nChon cac duong muon chuyen: ")
       (setq tl (getvar "textstyle"))
       (COMMAND "-LAYER" "m" "Tim duong" "color" 3 "" "")(PRINC)
       (SETQ A (SSGET))
       (COMMAND"CHPROP" A PAUSE "c" "3" "la" "Tim duong" "lt" "acad_iso10w100" "s" "0.15" "")(princ)   
       (command "-style" "TEXT" "Times New Roman" "1.1" "1" "0" "n" "n" )
       (command "-layer" "m" "Text""c" "White" "" "")
    (command "-Mtext")  (princ))


  7. [Yêu cầu] nhờ sửa thêm phần gọi Block text và cho nó song song đoạn thẳng

    em xin lỗi vì giải thích không rõ ràng!

    * mục đích cuối cùng của em là khi em vẽ được tim đường rồi, giờ em muốn dùng 1 lệnh để vừa chuyển layer + chuyển nét tim đường (vấn đề này đã thực hiện được rồi) chỉ có phần nhập tên đường thì đã có cho chữ chạy song song với đoạn thẳng nhưng vì nó là nhập dưới dòng command nên em không thực hiện được với kiểu Unicode phông Times New Roman. bởi vậy em muốn có cách nào đó để thêm vào lisp TD5 phần gọi 1 Mtext được tạo sẵn để khi thực hiện các bước chuyển layer + chuyển nét tim đường xong => sẽ gọi 1 text cho nó song song và có thể sửa được vidu như Mtext!

    cảm ơn anh về sự giúp đỡ nhiệt tình của anh!


  8. cảm ơn anh, cái lisp trên chạy tốt anh ạ, nhưng nó chỉ chạy với điều kiện riêng để gọi block, sửa text và quay chữ thôi, còn phần chuyển layer và nét tim đường thì phải làm riêng! anh có thể bổ sung giúp em cái phần của anh vào cái lisp này được không ạ!

    (DEFUN C:TD5(/ cnt enam ent pnt s1 tot v1 val)(setvar "CMDECHO" 0.000)
    (prompt "\nChon cac duong muon chuyen: ")
       (setq tl (getvar "textstyle"))
       (COMMAND "-LAYER" "m" "Tim duong" "color" 3 "" "")(PRINC)
       (SETQ A (SSGET))
       ("CHPROP" A PAUSE "c" "3" "la" "Tim duong" "lt" "acad_iso10w100" "s" "0.15" "")(princ)
       (command "insert" "D:\\Dowload\\62465_ten_duong.dwg" (getpoint "\n Chon diem bat ky tren ban ve") 1 1 0)
      (command "textstyle" tl)(princ))
    

  9. namnhim, on 04 Apr 2013 - 12:22, said:snapback.png

    các bác ơi cho em hỏi 1 tí, nếu dùng cái lisp này muốn cho thêm đoạn gọi 1 Mtext được tạo sẵn trong support để:

    - khi gõ lệnh => chọn đoạn thẳng => chọn điểm đầu và điểm cuối => hiện lên cái Mtext mẫu có sẵn đó song song với đoạn thẳng và lúc đó ta có thể sửa tên đường tùy ý được không các bác nhỉ?

    ==================================

    - Ý của em là muốn sau khi thực hiện TD5 thì nó chuyển Layer và nét tim đường thì được rồi còn phần nhập tên đường vì nó dùng cho nhập dưới dòng commond nên không nhập được chữ có dấu với font Unicode, bởi vậy em muốn nó thêm chức năng gọi 1 file Text được tạo sẵn và lưu trong support ra đ song song với tim đường rồi ta sửa tên đường thôi!

    - lisp của anh Binh em dùng được với điều kiện nó đã có chữ sẵn trong bản vẽ rồi, còn bản vẽ mới chưa có chữ thì không dùng được anh ạ! cảm ơn anh. anh có thể giúp em thêm cái phần nội dung màu đỏ ở trên không ạ?


  10. các bác ơi cho em hỏi 1 tí, nếu dùng cái lisp này muốn cho thêm đoạn gọi 1 Mtext được tạo sẵn trong support để:

    - khi gõ lệnh => chọn đoạn thẳng => chọn điểm đầu và điểm cuối => hiện lên cái Mtext mẫu có sẵn đó song song với đoạn thẳng và lúc đó ta có thể sửa tên đường tùy ý được không các bác nhỉ?

     

    - Ý của em là muốn sau khi thực hiện TD5 thì nó chuyển Layer và nét tim đường thì được rồi còn phần nhập tên đường vì nó dùng cho nhập dưới dòng commond nên không nhập được chữ có dấu với font Unicode, bởi vậy em muốn nó thêm chức năng gọi 1 file Text được tạo sẵn và lưu trong support ra đ song song với tim đường rồi ta sửa tên đường thôi!

    - lisp của anh Binh em dùng được với điều kiện nó đã có chữ sẵn trong bản vẽ rồi, còn bản vẽ mới chưa có chữ thì không dùng được anh ạ! cảm ơn anh. anh có thể giúp em thêm cái phần nội dung màu đỏ ở trên không ạ?


  11. cảm ơn bác bình! em dùng cái của bác nó báo lỗi sau khi "Chon diem xac dinh huong dat text ; error: bad argument type: fixnump: nil "

     

     

     

    cái em đang dùng khi thực hiện chọn đường muốn chuyển thì nó chuyển cả layer và nét tim đường luôn nhưng text thì ko ghi được, bởi vậy em muốn gọi 1 mtext được tạo sẵn trong suppor và tự sửa tên đường thôi

     


  12. các bác ơi cho em hỏi 1 tí, nếu dùng cái lisp này muốn cho thêm đoạn gọi 1 Mtext được tạo sẵn trong support để:

    - khi gõ lệnh => chọn đoạn thẳng => chọn điểm đầu và điểm cuối => hiện lên cái Mtext mẫu có sẵn đó song song với đoạn thẳng và lúc đó ta có thể sửa tên đường tùy ý được không các bác nhỉ?

     

    (DEFUN C:TD5(/ cnt enam ent pnt s1 tot v1 val)(setvar "CMDECHO" 0.000)
    (prompt "\nChon cac duong muon chuyen: ")
       (setq tl (getvar "textstyle"))
       (COMMAND "-LAYER" "m" "Tim duong" "color" 3 "" "")(PRINC)
       (SETQ A (SSGET))
       ("CHPROP" A PAUSE "c" "3" "la" "Tim duong" "lt" "acad_iso10w100" "s" "0.15" "")(princ)
       (SETQ B (GETPOINT "CHON DIEM : diem dau  -  "))(PRINC)
       (SETQ C (GETPOINT "CHON DIEM : diem cuoi"))
       (command "-style" "TEXT" "Times New Roman" "1.1" "1" "0" "n" "n" )
       (command "-layer" "m" "Text"" "" "" "")
       (command "text" "j" "bl" B C (strcase(getstring T "NHAP TEN DUONG:   ")))
      (command "textstyle" tl)(princ))
    
    

     


  13. các bác ơi cho em hỏi 1 tí, nếu dùng cái lisp này muốn cho thêm đoạn gọi 1 Mtext được tạo sẵn trong support để:

    - khi gõ lệnh => chọn đoạn thẳng => chọn điểm đầu và điểm cuối => hiện lên cái Mtext có sẵn đó song song với đoạn thẳng và lúc đó ta có thể sửa tên đường tùy ý được không các bác nhỉ?

     

     (DEFUN C:TD5(/ cnt enam ent pnt s1 tot v1 val)(setvar "CMDECHO" 0.000)
    (prompt "\nChon cac duong muon chuyen: ")
       (setq tl (getvar "textstyle"))
       (COMMAND "-LAYER" "m" "Tim duong" "color" 3 "" "")(PRINC)
       (SETQ A (SSGET))
       (COMMAND"CHPROP" A PAUSE "c" "3" "la" "Tim duong" "lt" "acad_iso10w100" "s" "0.15" "")(princ)
       (SETQ B (GETPOINT "CHON DIEM : diem dau  -  "))(PRINC)
       (SETQ C (GETPOINT "CHON DIEM : diem cuoi"))
       (command "-style" "TEXT" "Times New Roman" "1.1" "1" "0" "n" "n" )
       (command "-layer" "m" "Text""c" "White" "" "")
       (command "text" "j" "bl" B C (strcase(getstring T "NHAP TEN DUONG:   ")))
      (command "textstyle" tl)(princ))
     

  14. Lisp Trim 2n Lines này bởi 2m Lines khác, mà các Lines này song song với trục X và Y.

    (defun C:HA( / ssd ssb layo lay lst3 lst4 pd pc p i)
    ;Doan Van Ha - CADViet.com - Ngay 10/12/2012
    ;Chuc nang: Trim 2n Lines boi 2m Lines khac. Cac Lines nay // voi truc X va Y.
    (vl-load-com) (command "undo" "be") (setq layo (getvar "clayer"))
    (if
     (and
      (princ "\nChon cac Line lam dao cat...")
      (setq ssd (ssget '((0 . "Line"))))
      (princ "\nChon cac Line bi cat...")
      (setq ssb (ssget '((0 . "Line")))))
     (progn
      (foreach ent1 (vl-remove-if 'listp (mapcar 'cadr (ssnamex ssb)))
       (setq lay (cdr (assoc 8 (entget ent1))))
       (setq lst3 (list (setq pd (cdr (assoc 10 (entget ent1)))) (setq pc (cdr (assoc 11 (entget ent1))))))
       (foreach ent2 (vl-remove-if 'listp (mapcar 'cadr (ssnamex ssd)))
    (if (setq p (car (acet-geom-intersectwith ent1 ent2 0)))
         (setq lst3 (cons p lst3))))
       (if (equal (cadr pd) (cadr pc) 1E-8)
    (setq lst4 (cons (list lay (vl-sort lst3 '(lambda (p1 p2) (> (car p1) (car p2))))) lst4))
    (setq lst4 (cons (list lay (vl-sort lst3 '(lambda (p1 p2) (> (cadr p1) (cadr p2))))) lst4)))
       (vla-delete (vlax-ename->vla-object ent1)))
      (foreach lst (reverse lst4)
       (setq i 0)
       (repeat (/ (length (cadr lst)) 2)
    (setvar "clayer" (car lst))
    (entmake (list (cons 0 "LINE") (cons 10 (nth i (cadr lst))) (cons 11 (nth (1+ i) (cadr lst)))))
    (setq i (+ i 2))))))
    (setvar "clayer" layo) (command "undo" "end") (princ))
    

     

    bác có thể thê m cắt được cả đối tượng là Pline được không ạ!


  15. Nhờ các bác sửa giúp em code dưới đây, để khi gọi lệnh CG thì phần hiển thị nội dung ở dòng command dưới màn hình không hiển thị phần phần đánh dấu màu đỏ bên dưới đây:

    Command: CG

    CHON GOC TRAI-DUOI BAN VEUnknown command "CG". Press F1 for help. (chỗ này nó báo lỗi gì vậy nhỉ?)

    Unknown command "N". Press F1 for help.

    Unknown command "CG". Press F1 for help.

    Unknown command "CG". Press F1 for help.

    Unknown command "N". Press F1 for help.

    Unknown command "CG". Press F1 for help.

    Unknown command "CG". Press F1 for help.

    Unknown command "N". Press F1 for help.

    Unknown command "CG". Press F1 for help.

    Unknown command "CG". Press F1 for help.

    Unknown command "N". Press F1 for help.

    Unknown command "CG". Press F1 for help.

    Unknown command "CG". Press F1 for help.

    Unknown command "N". Press F1 for help.

    Unknown command "CG". Press F1 for help.

    Unknown command "CG". Press F1 for help.

    Unknown command "N". Press F1 for help.

    Unknown command "CG". Press F1 for help.

    Unknown command "CG". Press F1 for help.

    CHON TY LE BAN VE (100 : 200 : 250 : 500 : 1000 : 2000) :200

    nil

     

    (defun C:CG (/ VERSION D V DIEMCHEN TENFILE DUONGDAN LOAIHS MSTL)
     (command "cmdecho" 0)
     (command "osnap" "none")
     (setq DIEMCHEN (getpoint "CHON GOC TRAI-DUOI BAN VE"))
     (chenkhung DIEMCHEN)   ;VE CAC KHUNG TY LE CHUAN DE DINH HUONG
     (setq MSTL
     (getreal
    "\n CHON TY LE BAN VE (100 : 200 : 250 : 500 : 1000 : 2000) :"
     )
     )
    ;XOA CAC KHUNG DINH HUONG
     (repeat 12
    (command "_erase" (ssget "L") "")
     )
    ;CHEN MAU HO SO VAO
     (setq VERSION (getvar "roamablerootprefix"))
     (setq D (strlen VERSION))
     (setq V (substr VERSION (- D 11) 1))
     (setq DUONGDAN (strcat "c:\\program files\\AutoCAD 200"V"\\thu_vien\\"))
     (setq LOAIHS "CapGiay")
     (setq TENFILE (strcat LOAIHS (rtos MSTL 2 0) ".dwg"))
     (ChenBlock DUONGDAN TENFILE DIEMCHEN (/ MSTL 1000))
    ) 	;END DEFUN CG
    
    (defun ChenBlock
      (DUONGDAN TENFILE DIEMCHEN TYLE / TENCHEN)
     (setq TENCHEN (strcat "*" DUONGDAN TENFILE))
     (command "-insert" TENCHEN DIEMCHEN TYLE "0")
     (Command "zoom" "e")
    )
    (defun TaoKhung (TEXT TYLE P1 P2 / TEXT TYLE P1 P2)
     (command "-STYLE" "TEXTTRL" "VNI-AVO" TYLE "1" "0" "N" "N" "N")
     (command "-text" "J" "BL" P2 "0" TEXT "")
     (command "_rectang"
    P1
    P2
    ""
     )
    ) 	;END DEFUN
    (defun ChenKhung (D / P1 P2)
     (command "-layer" "s" "0" "" "")
     (setq P1 (list (+ (car D) 17) (cadr D)))
     (setq P2 (list (car D) (+ (cadr D) 25)))
     (TaoKhung " 	Khung ty le 1/100" 1 P1 P2)
     (setq P1 (list (+ (car D) 34) (cadr D)))
     (setq P2 (list (car D) (+ (cadr D) 45)))
     (TaoKhung " 	Khung ty le 1/200" 2 P1 P2)
     (setq P1 (list (+ (car D) 42) (cadr D)))
     (setq P2 (list (car D) (+ (cadr D) 57)))
     (TaoKhung " 	Khung ty le 1/250" 2.5 P1 P2)
     (setq P1 (list (+ (car D) 84) (cadr D)))
     (setq P2 (list (car D) (+ (cadr D) 112)))
     (TaoKhung " 	Khung ty le 1/500" 5 P1 P2)
     (setq P1 (list (+ (car D) 168) (cadr D)))
     (setq P2 (list (car D) (+ (cadr D) 225)))
     (TaoKhung " 	Khung ty le 1/1000" 10 P1 P2)
     (setq P1 (list (+ (car D) 337) (cadr D)))
     (setq P2 (list (car D) (+ (cadr D) 450)))
     (TaoKhung " 	Khung ty le 1/2000" 20 P1 P2)
     (Command "zoom" "e")
    ) 	; end defun
    


  16. không biết mục đích của bạn có phải tạo thêm các nút trên pline để nắn mềm bình độ không, nếu phải thì mình có đoạn code này có thể giúp bạn được:

    ====================================
    SUA DUONG BINH DO:
    ====================================
    (defun C:SS (/ 	Thoi   chon3  chon  Chon1 ChonC  Chon1  ZC
     	S 	PTD	PTC   PL  PTT DongMucGoc
     	DongMucCuoi   X   Y  Z XT 	YT 	XC
     	YC 	Layer  I   D
    	)
     (command "_layer" "m" "SUA" "c" "2" "" "")
     (command "osmode" 512)
    	;(print "             	! LOAI DUONG DONG MUC PHAI LA POLYLINE MOI SUA DUOC !")
    	;(print "        	! De chuyen sang POLYLINE: dung ARGIC mo file VA EXPORT TO CAD !")
     (setq PTD (getpoint "\nCHON DIEM DAU TIEN XUAT PHAT TU BINH DO"))
     (command "osmode" 0)
     (setq Chon (ssget PTD))
     (setq Chon1 (ssname Chon 0))
     (setq DongMucGoc (entget Chon1))
     (setq Z (last (assoc 10 DongMucGoc)))
     (setq PL '())
     (setq X   (car PTD)
    Y   (cadr PTD)
    PTD (list X Y Z))
     (setq PL (append PL (list PTD)))
     (setq Layer (cdr (assoc 8 DongMucGoc)))
     (setq DongMucGoc
     (subst (cons 8 "SUA") (assoc 8 DongMucGoc) DongMucGoc)  )
     (entmod DongMucGoc)
     (setq Thoi 0)
     (setq PT1 PTD)
     (command "_layer" "m" "PLSUA" "c" "3" "" "")
     (while (= Thoi 0)
    (if (= (setq PTT
    (getpoint
     	"\nCHON DIEM TIEP THEO!!! bam CHUOT PHAI hoac ENTER truoc khi chon diem cuoi cung !!!")) nil)
     	(progn (setq Thoi 1)
    (command "osmode" 512)) 	;end progn
     	(progn
    (setq XT  (car PTT)
      	YT  (cadr PTT)
      	PTT (list XT YT Z))
    (command ".pline" PT1 PTT "")
    (setq PL (append PL (list PTT)))
    (setq PT1 PTT)) 	; end progn
    ) 	; end if
     ) 	; end while
     (setq PTC (getpoint "\nCHON DIEM CUOI CUNG LOI VAO BINH DO"))
     (setq ChonC (ssget PTC))
     (setq ChonC1 (ssname ChonC 0))
     (setq DongMucCuoi (entget ChonC1))
     (setq ZC (last (assoc 10 DongMucCuoi)))
     (if (= ZC Z)
    (setq X   (car PTC)
      Y   (cadr PTC)
      PTC (list X Y ZC))
    (progn
     	(while (/= ZC Z)
    (setq PTC
       	(getpoint
      "\nBAN DA CHON KHONG DUNG DOI TUONG BAN DAU !!! HAY CHON LAI DIEM CUOI CUNG !!!"))
    (setq ChonC (ssget PTC))
    (setq ChonC1 (ssname ChonC 0))
    (setq DongMucCuoi (entget ChonC1))
    (setq ZC (last (assoc 10 DongMucCuoi)))) 	; end while    
     	(setq X (car PTC)
    	Y (cadr PTC)
    	PTC (list X Y ZC))
    ) 	;end progn
     ) 	; end if
     (setq PL (append PL (list PTC)))
     (command ".pline" PT1 PTC "")
     (setq DongMucGoc
     (subst (cons 8 Layer) (assoc 8 DongMucGoc) DongMucGoc)  )
     (entmod DongMucGoc)
     (command "_layer" "m" Layer "c" "" "" "")
     (command "_break" Chon PTD PTC "")
     (setq Chon3 (ssget PTD))
     (foreach PT PL
    (setq C (ssget PT))
    (setq i 0)
    (while (<= i (- (sslength C) 1))
     	(setq D (ssname C i))
     	(if (/= D nil)
    (setq Chon3 (ssadd D Chon3))
     	) 	; end if
     	(setq i (+ i 1))
    ) 	; end while
     ) 	; end for PL
     (command "_select" Chon Chon3 "")
     (setq S (ssget "P"))
     (command "_pedit" "m" S "" "j" "" "")
    (command "-osnap" "End,Mid,Int,Perp")
    (prompt "\nDA NAN BINH DO XONG!")(PRINC))
    


  17. ý của tôi cũng giống như của bác SSG, chi tiết bản vẽ luôn luôn để ở tỷ lệ 1/1, còn khung in bản vẽ thì tùy vào chi tiết bản vẽ vừa khung nào thì cho vào khung đó (VD: tỷ lệ 1/100 hay 1/1000 và mình tạo sẵn các dạng kích thước mẫu, chữ mẫu theo từng tỷ lệ) tuyệt đối không được scale chi tiết bản vẽ!

    gửi bạn 1 số bản vẽ mẫu có Dim và Text phù hợp với từng tỷ lệ của mình và kèm theo 1 đoạn lisp để gọi khung phù hợp với đối tượng mình chọn rồi nhập số tương ứng với tỷ lệ.

    bạn có thể dựa trên file mẫu của mình rồi tự tạo cho mình file mẫu của từng tỷ lệ phù hợp với công việc của bạn và lưu trong Thư Viện là ok (lưu ý tất cả file mẫu trong THU VIEN đều để ở tỷ lệ 1/1000 chỉ khác Dim. sau khi chạy lệnh nó sẽ tự scale về tỷ lệ).

    bạn giải nén và copy toàn bộ thư mục của mình vào c:\program files\AutoCAD 2004\

    http://www.cadviet.com/upfiles/3/62465_vunam.rar

×