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

quan08

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

    67
  • Đã tham gia

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

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


  1. Mình sửa và bổ xung cho bạn rồi này. Chúc bạn như ý.

    ;; free lisp from cadviet.com
    
    (DEFUN C:gct ()
    (SETQ DK1 (GETVAR "USERR3"))
    (IF (= DK1 0)
        (PROGN
         (SETQ STR "1")
         (SETVAR "USERR3" 1)
        )    
        (SETQ STR (RTOS DK1))
    )
    (SETQ PRPT (STRCAT "\nSize <" STR ">:"))
    (SETQ DK1 (GETREAL PRPT))
    (IF (= DK1 NIL)
        (SETQ DK1 (GETVAR "USERR3"))
        (SETVAR "USERR3" DK1)
    )
    (setq dk (* DK1 50))
    (INITGET 7)
    (SETQ PTD (GETPOINT "\nFrom point:"))
    (INITGET 7)
    (SETQ PTC (GETPOINT PTD "\nTo point:"))
    (SETQ GOCX (ANGLE PTD PTC))
    (SETQ GOCY (+ GOCX (/ PI 2)))
    (setq v (rtos dk))
    (setq t (distance ptd ptc))
    (setq r (/ t 2))
    (SETQ PT1 (POLAR  PTc  0   (* 33 DK)))
    (SETQ o (POLAR  PT1  0   (* 5.2 DK)))
    (setq h (substr v 1 1))
    (setq y (substr v 2 3))
    (setq l (distance ptc pt1))
    (setq pt3 (polar ptc 0 (/ l 1.85)))
    (setq pt4 (polar pt3 (/ pi 2) (* 4 DK)))
    (setq pt5 (polar ptd (- gocx (/ pi 2)) r))
    (setq pt6 (polar ptd (+ gocx (/ pi 2)) r))
    (setq pt7 (polar ptd (+ gocx  pi) r))
    (setq pt8 (polar ptd  gocx   100))
    (command "osnap"  "")
    (command "layer" "m" "ghichu" "c" "163" """")
    (COMMAND "COLOR" "84" "")
    (COMMAND "STYLE" "T_THEP"  "romans.shx,vn1.shx" "" "" "" "" "" "" )
    (command "text" "j" "m" pt4 (* 5 DK) 0)
    (command "%%c10a150" )
    (setq sua (entlast))
    (if (= (tblsearch "block" "ghithep_t") nil)
    (progn
    (COMMAND "STYLE" "VnAvant"  ".VnAvant" "" "" "" "" "")
    (command "attdef" "" 1 1 1 "j" "m" o (* 5 50) 0)
    (setq ss (ssadd))
    (setq ss (ssadd (entlast) ss))
    (COMMAND "COLOR" "4" "")
    (command "circle" o (* 5.2 50)"")
    (setq ss (ssadd (entlast) ss))
    (command "block" "ghithep_t" o ss "")
    (command "insert" "ghithep_t" o DK1 DK1 "" "1")
    )
    (command "insert" "ghithep_t" o DK1 DK1 "" "1")
    )
    (initget 1 "TR T C")
    (setq w (getkword "\nBan muon dung: [TRong/duong Tron/duong Cheo]: "))
    (if (= (strcase w) "T") 
    (progn
    (COMMAND "COLOR" "150" "")
    (setvar "plinewid" 0)
    (COMMAND "PLINE" pt8 ptc pt1 "")
    (command "circle" ptd 100 "")
    )
    )
    (if (= (strcase w) "C")
    (progn
    (COMMAND "COLOR" "150" "")
    (setvar "plinewid" 0)
    (COMMAND "PLINE" PTD ptc pt1 "")
    (setq pg1 (polar PTD (- pi (/ pi 4)) 100))
    (setq pg2 (polar PTD (- (* pi 2) (/ pi 4)) 100))
    (setvar "plinewid" 20)
    (command "pline" pg1 pg2 "")
    )
    )
    (if (= (strcase w) "TR")
    (progn
    (COMMAND "COLOR" "150" "")
    (setvar "plinewid" 0)
    (COMMAND "PLINE" PTD ptc pt1 "")
    )
    )
    (COMMAND "COLOR" "BYLAYER" "")
    (command "osnap" "End,Mid,Cen,Quad,Int,Perp,Tan,Near,App,Int,Ext,Par"  )
    (command "ddedit" sua pause)
    )

    Lisp rất hay,nhưng bác ơi khi thực hiện lệnh có dấu gạch chéo xong rồi thực hiện lệnh khác thì ok nhưng khi vẽ lệnh pline thì nó sẽ gán chiều dày của pline này là 20 giống trong lisp.Mong bác sửa lisp này sao cho không ảnh hưởng đến pline.Cảm ơn các bác rất nhiều.


  2. Thực ra chỉ cần chọn 1 nhóm text là đủ. Với mỗi phần tử trong nhóm Text được chọn đó,Lisp sẽ chọn anh text kế bên và "xử" luôn.

     

    Làm theo cách của bạn Tú thì lâu, cách của bác Bình thì khá hơn vì mỗi một text phải duyệt qua toàn bộ text kế bên

    và cách của Tue_NV là tốc độ nhanh nhất. :undecided:

    Nhưng không thấy lisp nối text của bác TUE_NV đâu cả.Thanks


  3. Thí dụ mình có 1 lisp đổi tên thành acad.lisp chép vào Express thì khi mở cad lên nó tự động LOAD mà không cần vào Contents để Add nhưng khi dùng cad 2011 thì không được,bác nào biết phải đổi tên lisp thành gì để nó tự Load mà không cần vào Contents để Add không.Thanks


  4. Cái này bạn Nhập Bán kính bo có 1 lần rồi sử dụng cho các lần sau mà.

    Nếu bạn thích thì đây :

    (defun c:fr()
    (setvar "FILLETRAD" 50)
    (command "fillet" pause)
    )

    Bác Tue_NV ơi bác sửa lại làm sao khi dùng fr thì bo bán kính 50 nhưng khi dùng fillet thì góc đó mặc định theo cad.Tại vì dùng fr thì bo bán kính 50 nhưng khi dùng fillet thì nó lại bo theo fr.Cảm ơn bác.


  5. Bạn thay dòng (command "text" "j" "mc" pt1 (* 400 bk) pt10 "A" "") bằng (command "attdef" "" "A" "A" "A" "j" "mc" pt1 (* 400 bk) "")

    Mình sửa cho bạn như thế này bạn xem được chưa

    ;; free lisp from cadviet.com
    
    (defun C:TTT ( / vt pt1 pt2 pt3 pt4 pt5 pt6 pt7 pt8 pt9 pt10 pt11)
    (setq vt (ssadd))
    (setq bk (getvar "USERR3"))
    (if (= bk 0)
     (progn
       (setq cont "1")
       (setvar "USERR3" 1)
       )
    (setq cont (rtos bk))
    )
    (setq pt1 (getpoint "\n Nhap diem dat:"))
    (command "layer" "m" "S01. BOUNDARY LINE" "c" "7" """")
    (command "osnap"  "")
    (COMMAND "COLOR" "7" "")
    (command "circle" pt1 500)
    (setq vt (ssadd (entlast) vt))
    (setq pt2 (polar pt1 0 500))
    (setq pt3 (polar pt1 (/ pi 1) 500))
    (setq pt4 (polar pt1 0 750))
    (setq pt5 (polar pt1 (/ pi 1) 750))
    (setq pt6 (polar pt1 (- 0 (/ pi 2)) 500))
    (setq pt7 (polar pt1 (- 0 (/ pi 2)) 750))
    (setq pt8 (polar pt1 (/ pi 2) 500))
    (setq pt9 (polar pt1 (/ pi 2) 750))
    (setq pt10 (polar pt1 0 500))
    (setq pt11 (polar pt1 (/ pi 4) 750))
    (COMMAND "COLOR" "7" "")
    (command "line" pt2 pt4 "")
    (setq vt (ssadd (entlast) vt))
    (command "line" pt6 pt7 "")
    (setq vt (ssadd (entlast) vt))
    (command "line" pt3 pt5 "")
    (setq vt (ssadd (entlast) vt))
    (command "line" pt8 pt9 "")
    (setq vt (ssadd (entlast) vt))
    (setq dk (strcat "\n Size:<"cont">"))
    (setq bk (getreal dk))
    (if (= bk nil)
    (progn
     (setq bk (getvar "USERR3"))
    )
     (setvar "USERR3" bk)
     )
    (command "layer" "m" "S08. TEXT" "c" "3" """")
    (COMMAND "COLOR" "3" "")
    (COMMAND "STYLE" "XKC"  "VHELVCN.TTF" "" "" "" "" "")
    (command "attdef" "" "A" "A" "A" "j" "mc" pt1 (* 400 bk) "")
    (setq vt (ssadd (entlast) vt))
    (if (= (tblsearch "block" "ghichu") nil)
    (command "block" "ghichu" pt1 vt "")
    )
    (if (/= (tblsearch "block" "ghichu") nil)
    (command "block" "ghichu" "y" pt1 vt "")
    )
    (command "insert" "ghichu" pt1 bk bk "0" "A")
    (COMMAND "COLOR" "BYLAYER" "")
    (command "osnap" "End,Mid,Cen,Quad,Int,Perp,Tan,Near,App,Int,Ext,Par" )
    (command "move" (entlast) "" pt1)
    )
    (princ)
    

    Mới mở cad lên thí sử dụng lần đầu không thấy đối tượng sau khi move,làm lần 2 mới được.Mong bác xem lại giùm.Thanks


  6. Chào bạn quan08,

    Mình chưa rõ ý bạn muốn hỏi gì vì thựa tế khi xem cái lisp của bạn mình thấy có nhiều chỗ chưa rõ ý đồ của bạn. Cái block ghi thep của bạn đã được tạo ra xong thật tình mình thấy nó chưa được hợp lý lắm.

    Do vậy nếu bạn hỏi về cách tạo thì bạn đã làm được rồi, còn biết chỉ cái chi. Còn hỏi về cái block ấy thì đâu có biết bạn muốn nó ra sao mà góp ý.

    Hề hề hề,

    Hỏi về cấu trúc lisp thì có nhẽ phải hiểu ý định của bạn mới góp ý được. Tất cả ca1cl code bạn viết đều đúng nên lisp mới chạy được, có vài chỗ chưa hợp lý theo thiển ý của mình , song không rõ ý đồ của bạn nên cũng không thể góp ý chi bạn ạ. Chỉ có thể nói chung là bạn nên tham khảo thêm các code đã có trên diễn đàn để chỉnh code của bạn cho nó hợp lý và gọn gàng hơn mà thôi.

    Cái chính là bạn đã viết được cái lisp theo đúng ý đồ của bạn là đáng mừng rồi.

    Chúc mừng sự thành công của bạn...

    Lisp vẽ hình tròn và chèn text vào hình tròn e đã hiểu,nhưng ý e là viết thêm dòng code nào để khi chèn text vào hình tròn

    thì hình tròn này và text sẽ là block ATT.Mong bác chỉ giúp.Thanks

    (defun C:TTT ()
    (setq bk (getvar "USERR3"))
    (if (= bk 0)
     (progn
       (setq cont "1")
       (setvar "USERR3" 1)
       )
    (setq cont (rtos bk))
    )
    (setq pt1 (getpoint "\n Nhap diem dat:"))
    (command "layer" "m" "S01. BOUNDARY LINE" "c" "7" """")
    (command "osnap"  "")
    (COMMAND "COLOR" "7" "")
    (command "circle" pt1 500 "")
    (setq pt2 (polar pt1 0 500))
    (setq pt3 (polar pt1 (/ pi 1) 500))
    (setq pt4 (polar pt1 0 750))
    (setq pt5 (polar pt1 (/ pi 1) 750))
    (setq pt6 (polar pt1 (- 0 (/ pi 2)) 500))
    (setq pt7 (polar pt1 (- 0 (/ pi 2)) 750))
    (setq pt8 (polar pt1 (/ pi 2) 500))
    (setq pt9 (polar pt1 (/ pi 2) 750))
    (setq pt10 (polar pt1 0 500))
    (setq pt11 (polar pt1 (/ pi 4) 750))
    (COMMAND "COLOR" "7" "")
    (command "line" pt2 pt4 "")
    (command "line" pt6 pt7 "")
    (command "line" pt3 pt5 "")
    (command "line" pt8 pt9 "")
    (setq dk (strcat "\n Size:<"cont">"))
    (setq bk (getreal dk))
    (if (= bk nil)
    (progn
     (setq bk (getvar "USERR3"))
    )
     (setvar "USERR3" bk)
     )
    (command "scale" pt4 pt5 pt7 pt9 pt11"" pt1 bk"")
    (command "layer" "m" "S08. TEXT" "c" "3" """")
    (COMMAND "COLOR" "3" "")
    (COMMAND "STYLE" "XKC"  "VHELVCN.TTF" "" "" "" "" "")
    (command "text" "j" "mc" pt1 (* 400 bk) pt10 "A" "") 
    (COMMAND "COLOR" "BYLAYER" "")
    (command "osnap" "End,Mid,Cen,Quad,Int,Perp,Tan,Near,App,Int,Ext,Par" )
    (command "move")
    )
    (princ)
    


  7. Chào bạn quan08,

    Mình chưa rõ ý bạn muốn hỏi gì vì thựa tế khi xem cái lisp của bạn mình thấy có nhiều chỗ chưa rõ ý đồ của bạn. Cái block ghi thep của bạn đã được tạo ra xong thật tình mình thấy nó chưa được hợp lý lắm.

    Do vậy nếu bạn hỏi về cách tạo thì bạn đã làm được rồi, còn biết chỉ cái chi. Còn hỏi về cái block ấy thì đâu có biết bạn muốn nó ra sao mà góp ý.

    Hề hề hề,

    Hỏi về cấu trúc lisp thì có nhẽ phải hiểu ý định của bạn mới góp ý được. Tất cả ca1cl code bạn viết đều đúng nên lisp mới chạy được, có vài chỗ chưa hợp lý theo thiển ý của mình , song không rõ ý đồ của bạn nên cũng không thể góp ý chi bạn ạ. Chỉ có thể nói chung là bạn nên tham khảo thêm các code đã có trên diễn đàn để chỉnh code của bạn cho nó hợp lý và gọn gàng hơn mà thôi.

    Cái chính là bạn đã viết được cái lisp theo đúng ý đồ của bạn là đáng mừng rồi.

    Chúc mừng sự thành công của bạn...

    Code này chỉ vẽ được hình tròn và số bên trong nhưng đoạn code tạo cho nó thành block ATT vẫn chưa đúng.Mong bác chỉ chỗ sai và sửa lại giùm.Thanks.


  8. Chào bạn quan08,

    Vì sao bạn phải dùng lisp để tạo block thuộc tính mà không dùng CAD??? Nó không những chả nhanh hơn mà có khi còn rối hơn đó....

    Việc sử dụng các tham số trong lệnh command bạn nên tìm hiểu kỹ trước khi xài nó vào lisp bạn nhé, Chỉ cần dùng sai trật tự thì lisp sẽ không hiểu đâu bạn ạ. Hãy thận trọng khi xài cái thằng này trong lisp bạn ạ.

    Chúc bạn vui.

    Mình đang tìm hiểu về lisp vẽ hình bằng lisp thì mình đã hiểu nhưng vẽ hình bằng lisp rồi viết thêm lệnh để tự động thành Block ATT thì mình chưa biết nên hỏi các bác chỉ giùm trong đoạn lisp dưới đây.Thanks.

    http://www.cadviet.com/upfiles/3/ttttt.lsp


  9. Hôm qua mình mới gộp lại cho bạn nguyentuyen nên chưa test thử. Mình sửa lại cho bạn đây.

    ;; free lisp from cadviet.com
    
    (defun c:dstt ()
    (vl-load-com)
    (setq ss (ssget '((0 . "TEXT")))
    tp (getstring "\nBat dau tu: Trai/Phai: ")
    lst (acet-ss-to-list ss)
    lst (reverse lst))
    (if (= (strcase tp) "T")
    (setq lst (vl-sort lst
    '(lambda (e1 e2)
    (<
    (cadr (assoc 10 (entget e1)))
    (cadr (assoc 10 (entget e2)))
    )
    )
    )
    )
    )
    (if (= (strcase tp) "P")
    (setq lst (vl-sort lst
    '(lambda (e1 e2)
    (>
    (cadr (assoc 10 (entget e1)))
    (cadr (assoc 10 (entget e2)))
    )
    )
    )
    )
    )
    (setq i 0)
    (while (< i (length lst))
       (setq
    thay (itoa (1+ i))
    stt (nth i lst)
    )
    (entmod (subst (cons 1 thay) (assoc 1 (entget stt)) (entget stt)))
    (setq i (1+ i))
    )
    )
    

    Cảm ơn sự giúp đỡ của bạn nhưng nó vẫn chưa đúng

    thí dụ mình có:

    1 1 1 1 1

    1 1 1 1 1

    lisp bạn viết thí dụ cho trường hợp đánh từ trái qua phải thì:

    1 3 5 7 9

    2 4 6 8 10

    ý mình muốn là như thế này:

    1 4 6 8 10

    2 3 5 7 9

    Mong bạn sửa giùm mình.


  10. Mình gộp và rút ngắn cho bạn đây.

    (defun c:dstt ()
    (vl-load-com)
    (setq ss (ssget '((0 . "TEXT")))
    tp (getstring "\nBat dau tu: Trai/Phai: ")
    lst (acet-ss-to-list ss)
    lst (reverse lst)
    lst (vl-sort lst
    '(lambda (e1 e2)
    (if (= (strcase tp) "T")
    (<
    (cadr (assoc 10 (entget e1)))
    (cadr (assoc 10 (entget e2)))
    )
    )
    (if (= (strcase tp) "P")
    (>
    (cadr (assoc 10 (entget e1)))
    (cadr (assoc 10 (entget e2)))
    )
    )
    )
    )
    )
    (setq i 0 n 1)
    (while (< i (sslength ss))
       (setq
    thay (itoa n)
    stt (nth i lst)
    )
    (moddxf 1 thay stt)
    (setq i (1+ i))
    (setq n (1+ n))
    )
    )
    
    (defun moddxf (dxf chdxf ss /) 
    (entmod (subst (cons dxf chdxf) (assoc dxf (entget ss)) (entget ss)))
    )
    

    Nhưng vẫn chưa đánh đúng bạn ah.mình gửi lại file.Mong bạn sửa giùm.thanks

    http://www.cadviet.com/upfiles/3/drawing1_29_1.dwg

×