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

phongtran86

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

    198
  • Đã tham gia

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

  • Ngày trúng

    7

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


  1. Thiếu rau thì bổ sung bát canh chua vậy:

    (defun b_point  (pt1 pt2 pt3 a b / ag1 ag2 phi len bet)
      (setq ag1 (angle pt2 pt1)
            ag2 (angle pt2 pt3)
            phi (- ag2 ag1)
            bet (atan (/ (* a (sin phi)) (+ (* a (cos phi)) b)))
            len (/ a (sin bet)))
      (polar pt2 (+ ag1 bet) len))
    ;;----------------------------
    (defun c:tt  (/ pt-01 pt-02 pt-03)
     (if (and (setq pt-01 (getpoint "\nNhap toa do diem 01:"))
              (setq pt-02 (getpoint "\nNhap toa do diem 02:" pt-01))
              (setq pt-03 (getpoint "\nNhap toa do diem 03:" pt-02)))
      (command "Line" "none" (b_point pt-01 pt-02 pt-03 900 500) pt-02 ""))
     (princ))

    P/s: Thứ tự p1, p2, p3 thuận chiều kim đồng hồ, p2 nằm ở đỉnh.

    đúng yêu cầu em :).


  2. Sao bạn không test??? Pick vào chỗ nào cũng được, miễn là attblk của bạn.

      em test kỹ rồi mà anh. pick vào đâu cũng dc nhưng nó chỉ nhảy giá trị att SL của block. nếu block ko có ATT tag là SL nó k nhảy. anh xem giúp em lisp của lee mac. Vi dụ 1 block có 4 ATT: L1, L2, Lneo, SL. khi ta pick vào block ở vị trí L1 thì giá trị ghi vào L1, pick vào block nhưng ở vị trí L2 thì giá trị L2 nhảy. Ảnh minh họa anh ơi

    CopyText.gif


  3. lisp này số đai chỉ ghi vào att SL của block. Mình muốn nó ghi vào att nào mà mình pick cơ, có thể ATT L1, L2, Lneo....Giống như lisp này http://www.lee-mac.com/copytext.html  Vì mình muốn tự lập vài lisp nữa để ghi thông số chiều dài thanh.... vào bằng lệnh này.

    CopyText.gif


  4. thế bác hướng dẫn em :)

    đây là thống kê thép bằng ứng dụng Hcad. Mình chỉ cần ghi giá trị vào đó, rồi nhấn lệnh tính toán lại là khối lượng cập nhật.

    http://www.mediafire.com/download/qlnnx5c4tmzkfwj/thong_ke_thep.dwg

    Giá trị ghi vào có thể  số lượng, số trong phần quy cách hay bất kỳ chỗ nào trong block giống như lệnh http://www.lee-mac.com/copytext.htmlcủa lee mac này. cập nhật thống kê chắc dùng field đúng k bác


  5. Bác có thể chỉnh giúp khi yêu cầu nhập lớp bảo vê giá trị mặc định là 0 để vẽ móc ngay lớp thép thứ 1. Khi cần vẽ lớp 2 thì mới nhập giá trị cần. Cảm ơn bác.

    (defun c:tt  (/ Make-Line ang bv cdi hbv hcd len msp pd3 po1 po2 po3 po4 pt1 pt2 pt3 pt4 tlv p11 p33)
    ;;;ve pline 
    (defun Make_pline  (listpoint Layer / Lst)
      (setq lst (list '(0 . "LWPOLYLINE")
                      '(100 . "AcDbEntity")
                      '(100 . "AcDbPolyline")
                      (cons 8 layer)
                      (cons 90 (length listpoint))
                      (cons 70 0)))
      (foreach p listpoint (setq lst (append lst (list (cons 10 p)))))
      (entmakex lst))
    ;;;;ham ve pline 
    (defun Make-Line  (p1 p2 lay)
      (entmakex (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2) (cons 8 lay))))
     (vl-load-com)
     (setq msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
           cdi (* (getvar "DIMTXT") (getvar "DIMSCALE")))
     (if (and (setq pt1 (getpoint "\nDiem p1: "))
              (setq pt2 (getpoint "\nDiem p2: "))
              (setq pt3 (getpoint "\nDiem p3: "))
              (setq pt4 (getpoint "\nDiem p4: "))
              (setq hcd (getdist "\nChieu cao dam: "))
    (or	hbv  (setq hbv 0))
    (setq hbv (cond ((getdist (strcat "\nChieu day lop BT bao ve <" (rtos hbv 2 2) ">: "))) (hbv)))
              (setq tlv (getreal "\nTi le ve <Nhap 20 de co ty le 1/20>:")))
      (progn (setq po1 (polar (polar pt3 (* pi 1.0) (* hcd (/ 100 tlv))) (* pi 0.5) (* hbv (/ 100 tlv)))
                   po2 (polar po1 (* pi (/ 30 180.0)) 70)
                   po3 (polar (polar pt4 (* pi 0.0) (* hcd (/ 100 tlv))) (* pi 0.5) (* hbv (/ 100 tlv)))
                   po4 (polar po3 (* pi (/ 150 180.0)) 70)
                   ang (angle pt1 pt2)
                   pd3 (polar pt1 (+ ang (* pi 1.5)) (* cdi 4)))
           (Make_pline (list po2 po1 po3 po4) "CAT-THEP")
            ; (Make-Line po1 po2 "CAT-THEP")
            ; (Make-Line po3 po4 "CAT-THEP")
    
             (setq p11 (inters pt1 pt2 po1 (polar po1 (* pi 1.5) hcd))
                   p33 (inters pt1 pt2 po3 (polar po3 (* pi 1.5) hcd)))
             (mapcar (function (lambda (x y z) (vla-adddimaligned msp x y z)))
                     (mapcar 'vlax-3d-point (list pt1 pt2 p11))
                     (mapcar 'vlax-3d-point (list p11 p33 p33))
                     (mapcar 'vlax-3d-point (list pd3 pd3 pd3)))))
     (princ))
    
    • Vote tăng 1

  6. Nhờ bác thêm vào lisp để nó vẽ đường thẳng từ móc này đến móc kia giùm e với, nó sẽ thành một thanh polyline.

    Cảm ơn bác nhiều.

    (defun c:tt  (/ Make-Line ang bv cdi hbv hcd len msp pd3 po1 po2 po3 po4 pt1 pt2 pt3 pt4 tlv p11 p33)
    ;;;ve pline 
    (defun Make_pline  (listpoint Layer / Lst)
      (setq lst (list '(0 . "LWPOLYLINE")
                      '(100 . "AcDbEntity")
                      '(100 . "AcDbPolyline")
                      (cons 8 layer)
                      (cons 90 (length listpoint))
                      (cons 70 0)))
      (foreach p listpoint (setq lst (append lst (list (cons 10 p)))))
      (entmakex lst))
    ;;;;ham ve pline 
    (defun Make-Line  (p1 p2 lay)
      (entmakex (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2) (cons 8 lay))))
     (vl-load-com)
     (setq msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
           cdi (* (getvar "DIMTXT") (getvar "DIMSCALE")))
     (if (and (setq pt1 (getpoint "\nDiem p1: "))
              (setq pt2 (getpoint "\nDiem p2: "))
              (setq pt3 (getpoint "\nDiem p3: "))
              (setq pt4 (getpoint "\nDiem p4: "))
              (setq hcd (getdist "\nChieu cao dam: "))
              (setq hbv (getdist "\nChieu day bt bao ve: "))
              (setq tlv (getreal "\nTi le ve <Nhap 20 de co ty le 1/20>:")))
      (progn (setq po1 (polar (polar pt3 (* pi 1.0) (* hcd (/ 100 tlv))) (* pi 0.5) (* hbv (/ 100 tlv)))
                   po2 (polar po1 (* pi (/ 30 180.0)) 70)
                   po3 (polar (polar pt4 (* pi 0.0) (* hcd (/ 100 tlv))) (* pi 0.5) (* hbv (/ 100 tlv)))
                   po4 (polar po3 (* pi (/ 150 180.0)) 70)
                   ang (angle pt1 pt2)
                   pd3 (polar pt1 (+ ang (* pi 1.5)) (* cdi 4)))
           (Make_pline (list po2 po1 po3 po4) "CAT-THEP")
            ; (Make-Line po1 po2 "CAT-THEP")
            ; (Make-Line po3 po4 "CAT-THEP")
    
             (setq p11 (inters pt1 pt2 po1 (polar po1 (* pi 1.5) hcd))
                   p33 (inters pt1 pt2 po3 (polar po3 (* pi 1.5) hcd)))
             (mapcar (function (lambda (x y z) (vla-adddimaligned msp x y z)))
                     (mapcar 'vlax-3d-point (list pt1 pt2 p11))
                     (mapcar 'vlax-3d-point (list p11 p33 p33))
                     (mapcar 'vlax-3d-point (list pd3 pd3 pd3)))))
     (princ))
    

    Hỗ trợ bác quốc mạnh để bác tập trung giúp em lisp số 3. Bạn thử xem dc chưa

    • Vote tăng 2

  7. 1. Với hàm ssget mình chưa làm được, không biết có cách nào không??? Nó không giống như getpoint ở lisp trước.

    2. Bạn tự làm được mà! Chỉ việc thay toàn bộ USERR2 thành USERR4 là ok.

    ok anh. thế là tốt với em lắm rồi anh ạ :). Một lỗi nhỏ lisp vẽ cắt momen. khi dầm 2 nhịp chiều cao khác nhau, dim cột bị chéo. :D

    dc anh chỉnh giúp em với. pick ngược từ phải qua trái thì dim cột bị nhầm :p13177786_1063774453645679_61909515103968

    • Vote tăng 1

  8.  

    Theo "Nghị Quyết" của Topic, Lisp 2 ra đời: :D

    (defun c:tt  (/ thuc_hien dkd kcd kwo ss)
     (defun thuc_hien  (/ ent i len sld str)
      (or dkd (setq dkd (getvar 'USERI5)))
      (or kcd (setq kcd (getvar 'USERR2)))
      (repeat (setq i (sslength ss))
       (setq ent (ssname ss (setq i (1- i)))
             len (cdr (assoc 42 (entget ent)))
             sld (1+ (fix (/ len kcd)))
             str (strcat "<>\\X" (itoa sld) "~" (itoa dkd) "a" (rtos kcd 2 0)))
       (vla-put-TextOverride (vlax-ename->vla-object ent) str)))
     (or (> (getvar 'USERI5) 0) (setvar 'USERI5 6))
     (or (> (getvar 'USERR2) 0) (setvar 'USERR2 150))
     (vl-load-com)
     (if (setq ss (ssget '((0 . "DIMENSION"))))
      (progn (setq kwo t)
             (while kwo
              (initget "T K")
              (setq kwo (getkword
                         (strcat "\nThep dai \U+00D8" (itoa (getvar 'USERI5)) " /Khoang cach a" (rtos (getvar 'USERR2) 2 0) " <T or K or Enter to Override>:")))
              (cond ((eq kwo "T")
                     (initget 6)
                     (setq dkd (cond ((getint (strcat "\nDuong kinh thep dai \U+00D8 <" (itoa (getvar 'USERI5)) ">:")))
                                     ((getvar 'USERI5))))
                     (setvar 'USERI5 dkd))
                    ((eq kwo "K")
                     (initget 6)
                     (setq kcd (cond ((getreal (strcat "\nKhoang cach thep dai a <" (rtos (getvar 'USERR2) 2 0) ">:")))
                                     ((getvar 'USERR2))))
                     (setvar 'USERR2 kcd))
                    (t (setq kwo nil))))
             (thuc_hien)))
     (princ))

    anh chỉnh chút xíu cho em.

    1. khi gợi chọn dim ấy thì mình có thể nhấn T để chỉnh đường kính thép đai, K để chỉnh khoảng cách. k ấn j chọn luôn dim thì nó lấy giá trị cũ của T,K chứ k phải chọn dim xong mới hiện gợi ý chỉnh T, K.

    2. Mà hình như biến lưu hệ thống K anh để là USERR2 là biến lưu hệ thống lớp btong bảo vệ của lisp vẽ mômen dầm. nên nó bị thay đổi lớp bảo vệ, khi vẽ lệnh kia. anh setq kcd là USERR4 <khoang cách đai nhịp> :D hoặc làm sao 2 cái này k ảnh hưởng đến nhau dc ko. Thế thì tốt


  9. Hớ hớ... Phải thế chứ...! Biết sửa thì nên tự sửa cho phù hợp ý của mình, ai lại cứ ngồi chờ người khác ... :D​.

    - Layer của thép đai: trong lisp đã có hàm make layer: (create-layer  name color lineWeight)

    - Vẽ thép đai: (Make_pline  listpoint Layer) => Thay layer đã make ở trên vào Layer trong thủ tục này là ok.

     

    (defun kcach_dau (mm-am len fac / del l-0)

    (if (eq mm-am t)

    (progn (setq l-0 (/ len 4)

    del (rem l-0 50))

    (if (> del 0)

    (setq l-0 (- l-0 del (/ -50 fac)))))

    (progn (setq l-0 (/ (* 4 len) 6)

    del (rem l-0 (/ 50 fac)))

    (if (> del 0)

    (setq l-0 (- l-0 del)

    l-0 (/ (- len l-0) 2)

    ))))

    l-0)

     

    cái này em sửa được rồi. hàm kcach_dau em mạn phép sửa. hihi vì nếu sửa nội dung trc thì nó bị phần 4/6 nó là bội số 4*50=200. Muốn làm với sửa lắm chứ, nhưng năng lực hạn chế anh ạ

    Bác giúp em 2 lisp còn lại nhé

    
    
    • Vote tăng 1

  10. lisp số 1: em muốn cái thép gia cường mô men dương là số chẵn bội số 50, chứ ko phải k cách mép chẵn, vì mép chẵn thì cái chiều dài này lẻ. :P. cho dải đai vào 1 layer thepdai cho màu vàng in nhạt hơn...

    lisp số 2 em nghĩ chắc k vấn đề.

    lisp số 3 là gõ lệnh:

    -chọn dim cần thống kê số đai, k liên quan đến từng nhịp j cả, k liên quan đến đường kính đai. vì thường dầm sẽ là 1 loại đường kính. (chọn thủ công để lựa những đai cùng chiều cao dầm bằng mắt)

    -ghi nội dung số đai vào 1 att block. LEE-mac he he

    lisp 1 em mạn phép sửa đoạn momen dương anh thành:

    ;; Momen duong

    (setq

    kcd (kcach_dau nil kc 1)

    kcd (/ (- kc (* 4 kcd)) 2)

    pd1 (polar pt1 ang kcd)

    pd2 (polar pt2 (+ ang (* pi 1.0)) kcd)

    pd3 (polar pt1 (+ ang (* pi 1.5)) (* cdim 4))

    pcd pd3)  để giữa nó chẵn số. k phải sửa trong function kcach_dau.

     

    lisp 2: em dựa bài này http://www.cadviet.com/forum/topic/161775-lisp-ta-nh-sa-l-a-ng-ai-va-ghi-ra-tha-nh-text/ nhưng link lisp die mất rồi.

    lisp 3: bác cố gắng giúp em

    • Vote tăng 1

  11. - Xem bài này, mình bắt đầu có hiện tượng bị hoảng loạn rồi... :D

    - Thống kê đai để tổng quát, tức phải từng nhịp, đai có thể cùng đường kính nhưng kích thước có thể khác nhau (Vì dầm có thể không đều nhịp, chiều cao dầm khác nhau...).

    lisp số 1: em muốn cái thép gia cường mô men dương là số chẵn bội số 50, chứ ko phải k cách mép chẵn, vì mép chẵn thì cái chiều dài này lẻ. :p. cho dải đai vào 1 layer thepdai cho màu vàng in nhạt hơn...

    lisp số 2 em nghĩ chắc k vấn đề.

    lisp số 3 là gõ lệnh:

    -chọn dim cần thống kê số đai, k liên quan đến từng nhịp j cả, k liên quan đến đường kính đai. vì thường dầm sẽ là 1 loại đường kính. (chọn thủ công để lựa những đai cùng chiều cao dầm bằng mắt)

    -ghi nội dung số đai vào 1 att block. LEE-mac he he


  12. b2HgAau.png

    Bác viết giùm mình cái code nó đơn giản hơn của thớt:

    1. Đánh lệnh

    2. Pick điểm 1, điểm 2, điểm 3, điểm 4.

    3. Nhập chiều cao dầm

    4. Nhập lớp bảo vệ

    Sẽ được kết quả như trong hình. Chỗ khoanh mây là kích thước của điểm cần vẽ chứ không vẽ ra.

    Chân thành cảm ơn.

    2. Pick điểm 1, điểm 2, điểm 3, điểm 4. thì k còn là vẽ tự động nữa. lisp tự tính điểm cắt dựa vào 2 điểm pick thôi, trên là 1/4 mép trong, dưới là 1/6.

    các ý khác bác quốc mạnh 04 tt đã làm rồi. 

    -Điểm dấu móc bác  nên để 70 góc dốc 30 độ như @790312 thì đẹp (k quan trọng) ''em tìm số góc 45 độ với 75 để sửa k thấy :p"

    - về điểm cắt thì bác để trên 1/4 làm tròn đến 50 là ok. dưới để cắt dưới 1/6 nếu nhịp lẻ thì thép cắt momen dương bị lẻ.13177166_1063087023714422_72486718080253

     

    -Ý bài trên của em là 3 lisp khác nhau:

    +Lisp 1: vẽ thép với dải đai như bác là làm thành công, bỏ phần ghi số đai từng nhịp xuất ra màn hình đi (điển chèn thống kê đai ấy)

    +Lisp 2: Một lisp tách từ lisp trên vẽ momen trên: chọn dim, thông số phi<6>/khoảng cách</150> thì trong dim có thêm thông số về số lượng đai và khoảng cách :3000\X15~6a200. Dim này có thể là dim bình thường hoặc dim đã qua sửa kiểu "3000\X15~6a200". cái này phòng trường hợp nhịp dầm thay đổi, co kéo số đai k nhảy, k phải chia lại số đai thủ công, chọn dc nhiều dim 1 lúc. :p

    +Lisp 3: cộng số lượng các đai. gõ lệnh, chọn những dim mà kích thước kiểu: "3000\X15~6a200" "3000\X17~6a200"... thì kết quả chỉ cần ra 15+17=32 thì xuất kq 32 ra màn hình. pick điểm chọn ghi text số 32. (đai dâm toàn nhà sẽ cùng 1 loại đường kính, k cần phân định rõ cho thuật toán đơn giản), hoặc có thể xuất kq 32 đấy vào 1 đối tượng ATTribute trong block thì càng tốt. (các chương trình thống kê thép mỗi số hiệu thép là 1 block kiểu này) Mình cũng cần thuật toán copy 1 giá trị đã tính toán ra rồi, giờ muốn ghi nó vào  1 phần tử ATT của block chứa nhiều ATT.

    http://www.lee-mac.com/copytext.htmlkiểu như lệnh này của lee mac. cơ mà giá trị text mình tính ra trong hàm rồi chứ k phải chọn text :P


  13. Không hiểu vì sao mà mình thường phải trả lời câu này:

    => Download bị lỗi thì dùng copy, paste... Chán...ạok.

     khá tổng quát, bác vẽ cả phần phi thép rồi khoảng cách, rải cả thép đai. quá cả mong đợi. 

    Bác chỉnh em chút xíu nữa:

    -Bác gán thêm dim giữa 2 cột, phần phía trên và phần dưới (điểm cuối của pick lần n với điểm đầu lần n+1)

    -Đai dầm bác chỉnh cách mép cột 50 dc k. vẽ nó bị trùng với nét mép cột.

    Phần dim của anh có cả thép đai trong đấy rất hay, nhưng như thế k dùng lisp công text để ra số thép đai dc (thống kê)

    ĐƯợc voi đòi tiên nhờ Bác viết 1 lisp +tổng số đai kiểu này dc k. :p

    Một lisp tách từ lisp trên vẽ momen trên: chọn dim, thông số phi<6>/khoảng cách</150> thì trong dim có thêm thông số về số lượng đai và khoảng cách :3000\X15~6a200. voi lai font họ vnsimli.shx, vnsimple.shx đều gõ %%C để ra phi dc. :D

    Một cái máy gặt thực sự thay cho cái liềm. hihi


  14. (defun C:tacht (/ ss tong text point giatri)
    (vl-load-com)
    (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))
    (prompt "\nChon doi tuong Text.")
    (setq ss (ssget '((0 . "TEXT")))
    lst (ss2ent ss)
    lst (vl-sort lst '(lambda (e1 e2) (< (cadr (assoc 10 (entget e1))) (cadr (assoc 10 (entget e2))))))) 
    (setq tong 0)
    (setq chuoi "")
    (foreach enxt lst
    (setq giatri (cdr (assoc 1 (entget enxt))))
    (setq text (substr giatri 1 (- (vl-string-search "C" giatri) 2)))
    (setq chuoi (strcat chuoi "+" text))
    (setq tong (+ (atof text) tong))
    )
    (setq chuoi (substr chuoi 2 (- (strlen chuoi) 1)))
    (setq point (getpoint "\n Chon diem ghi dien tich: "))
    (setq dientext (strcat chuoi " = " (rtos tong 2 0)))
    (command "TEXT" point 80 0 dientext)
    (princ) 
    )
    

    cảm ơn bác. lisp tacht trên vẫn còn mà. em xin lisp http://www.cadviet.c...6960_lamthu.lsp mà. bị die rồi. 

    Tiện bác sửa giúp em theo ý:

    Nhờ các bác giúp với, vẫn với lisp trên nhưng mà khác chút xíu: k phải như "lisp sẽ hỏi đường kính cốt đai là bao nhiêu, mình gõ 6, sau đó"

    mà là lisp hiển thị gợi ý trong dòng lệnh chính: (pick điểm ghi text hoặc (Duongkinhdai<6>  :). Nếu gõ D: gõ đường kính---> trở lại pick text. Nếu k thì pick vị trí text bình thường.

    Tổng quát hơn: (pick điểm ghi text hoặc chỉnh (Duongkinhdai<6>/ Kcdai <150>  :) Nếu gõ D: gõ đường kính . Vẫn hiển thị gợi ý:

    (pick điểm ghi text hoặc chỉnh (Duongkinhdai<6>/ Kcdai <150>  :)  gõ K nếu muốn thay đổi khoảng cách. k thì pick điểm ghi text bình thường.

    Tổng cả lisp cho vào vòng lặp, để khi gõ lệnh nếu D với K không đổi ta chi cần chọn đoạn dim (hoặc nhập bề rộng đoạn rải cốt đai) pick điểm ghi, rồi lại chọn đoạn dim- pick điểm ghi  :) Giá trị K,D lưu lại từ lần gần nhất thay đổi.  :)

    Cảm ơn bác nhiều


  15. Theo bài 1:

    (defun c:tt  (/ modelSpace lay bv cd pt1 temp create-layer tiep_theo_qm kcach_dau Make-Line laythep)
     (defun kcach_dau  (mm-am len fac / del l-0)
      (if (eq mm-am t)
       (progn (setq l-0 (/ len 4)
                    del (rem l-0 50))
              (if (> del 0)
               (setq l-0 (- l-0 del (/ -50 fac)))))
       (progn (setq l-0 (/ len 6)
                    del (rem l-0 (/ 50 fac)))
              (if (> del 0)
               (setq l-0 (- l-0 del)))))
      l-0)
     (defun create-layer  (name color lineWeight)
      (entmakex (list '(0 . "LAYER")
                      (cons 100 "AcDbSymbolTableRecord")
                      (cons 100 "AcDbLayerTableRecord")
                      (cons 2 name)
                      (cons 70 0)
                      (cons 62 color)
                      (cons 6 "Continuous")
                      (cons 370 (fix (* 100 lineWeight))))))
     (defun Make-Line  (p1 p2 lay)
      (entmakex (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2) (cons 8 lay))))
     ;;-------------------
     (defun tiep_theo_qm  (/ cdim pt2 kc pd1 pd2 pd3 pa1 pa2 pa3 ptt)
      (setq cdim (* (getvar "DIMTXT") (getvar "DIMSCALE")))
      (setq pt2 (getpoint "\nNhap toa do diem cuoi duoi dam:" pt1))
      (setq kc (distance pt1 pt2))
      ;; Momen duong
      (setq pd1 (polar pt1 (* pi 0) (kcach_dau nil kc 1))
            pd2 (polar pt2 (* pi 1) (kcach_dau nil kc 1))
            pd3 (polar pt1 (* pi 1.5) (* cdim 4)))
      (setvar "CLAYER" "DIM")
      (mapcar (function (lambda (x y z) (vla-adddimaligned msp x y z)))
              (mapcar 'vlax-3d-point (list pt1 pd1 pd2))
              (mapcar 'vlax-3d-point (list pd1 pd2 pt2))
              (mapcar 'vlax-3d-point (list pd3 pd3 pd3)))
      (Make-Line (setq ptt (polar pd1 (* pi 0.5) bv)) (polar ptt (* pi 0.25) bv) laythep)
      (Make-Line (setq ptt (polar pd2 (* pi 0.5) bv)) (polar ptt (* pi 0.75) bv) laythep)
      ;; Momen am
      (setq pt1 (polar pt1 (* pi 0.5) cd)
            pt2 (polar pt2 (* pi 0.5) cd)
            pa1 (polar pt1 (* pi 0) (kcach_dau t kc 1))
            pa2 (polar pt2 (* pi 1) (kcach_dau t kc 1))
            pa3 (polar pt1 (* pi 0.5) (* cdim 4)))
      (mapcar (function (lambda (x y z) (vla-adddimaligned msp x y z)))
              (mapcar 'vlax-3d-point (list pt1 pa1 pa2))
              (mapcar 'vlax-3d-point (list pa1 pa2 pt2))
              (mapcar 'vlax-3d-point (list pa3 pa3 pa3)))
      (Make-Line (setq ptt (polar pa1 (* pi 1.5) bv)) (polar ptt (* pi 1.25) bv) laythep)
      (Make-Line (setq ptt (polar pa2 (* pi 1.5) bv)) (polar ptt (* pi 1.75) bv) laythep)
      (setvar "CLAYER" lay))
     ;; MAIN
     (vl-load-com)
     (setq msp     (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
           lay     (getvar "clayer")
           laythep "THEPDOC")
     (create-layer laythep 1 0.4)
     (create-layer "DIM" 8 -3)
     (or (and cd (or (= (type cd) 'int) (= (type cd) 'real))) (setq cd 400))
     (or (and bv (or (= (type bv) 'int) (= (type bv) 'real))) (setq bv 20))
     (setq temp "T")
     (while (= temp "T")
      (initget 0 "Cao Bao")
      (setq pt1 (getpoint
                 (strcat "\nCaodam <" (rtos cd 2 0) ">/Baove <" (rtos bv 2 0) ">. Nhap toa do diem dau duoi dam: ")))
      (cond ((= pt1 "Cao")
             (setq cd (cond ((getdist (strcat "\nChieu cao dam <" (rtos cd 2 0) ">:")))
                            (cd))))
            ((= pt1 "Bao")
             (setq bv (cond ((getdist (strcat "\nChieu day lop betong bao ve <" (rtos bv 2 0) ">:")))
                            (bv))))
            ((= pt1 nil) (setq temp nil))
            (t (tiep_theo_qm))))
     (princ))
     

     

     

    Cái đó là có dim trước, rồi chia dim khác với topic này.

    like. Mai em test lisp bác.:). Code bác viết rành mạch, đẹp thế. Nhiều hàm em chưa bik bao giờ :p
×