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

SoftvnBin

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

    58
  • Đã tham gia

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

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


  1. Lisp gộp 2 lệnh LAYOFF và LAYON thành 1 lệnh.

    (defun c:1()
    (cond
     ((or (not n) (= n 1))
      (c:LAYOFF)
      (setq n 2))
     ((= n 2)
      (c:LAYON)
      (setq n 1))))
    

     

    Từ lisp nhờ chỉnh sửa trên, em cũng xin ké tý, nhu cầu của em mong muốn nhờ các bác cũng na ná như trên, cụ thể như sau:

    1. Em đã có sẵn lisp với các lệnh thực thi tương ứng là: n1, n2, n3, n4, n5

    2. Nhờ các bác viết 1 lisp (ví dụ lệnh: a1)

    3. Sau khi load các lisp với các lệnh n1, n2, n3, n4, n5, a1 xong

    4. Gọi lệnh a1 thì lisp sẽ tự động thực hiện lệnh n1

    5. Thực hiện xong lệnh n1 sẽ hiện bảng thông báo "Done to n1, space to continue, esc to stop"

    6. Nếu nhấn nút space thì lisp sẽ tự động thực hiện tiếp lệnh n2, nhấn nút esc thì lisp sẽ tự động kết thức lệnh

    7. Thực hiện xong lệnh n2 sẽ hiện bảng thông báo "Done to n1, space to continue, esc to stop"

    8. Nếu nhấn nút space thì lisp sẽ tự động thực hiện tiếp lệnh n2, nhấn nút esc thì lisp sẽ tự động kết thức lệnh

    9. Tiếp tục như thế đến hết lệnh n5 (nếu thực hiện đến n5 thì lisp tự động kết thúc lệnh và hiện lên bảng thông báo "good luck")

    10. Nhấn space để hoàn thành.

     

    Xin cảm ơn các bác trước!


  2. Hề hề hề,

    Đêm có tí đêm , ngày có tí ngày chớ bộ.

    Đây là cái tí đêm hôm qua cho bạn nè:

    ..........................................

    Hy vọng đúng ý bạn.

    Riêng cái vụ khối lượng thì không thể có đơn vị là kg/m được nên mình đã tự sửa thành kg. Nếu bạn không thích thì tự sửa lại nhé.

    Không biết nói lời cảm ơn bạn thế nào, từ đáy lòng mình chúc bạn cùng toàn thể gia đình lời cảm ơn chân thành nhất, đưa điện thoại lên đây thì không tiện, yahoo thì muộn mất, có cách nào để biết khi nào bạn có dịp ghé qua Vĩnh Phúc không nhỉ?


  3. Hề hề hề,

    1. Bạn có muốn tự tay mình chỉnh sửa cái lisp cũ thành cái bạn cần hay không???

    2. Nều bạn muốn mình sẽ giúp bạn làm thử coi sao.

    3. Bạn hãy gửi bản vẽ có cái bảng thống kê tổng hợp của bạn lên để mình có thể check.

    4. Tại sao cột ghi chú và cột tên vùng lại có nội dung giống nhau??? Vậy có phải là thừa không???

    5. Nội dung text bắt buộc phải là tiếng việt có dấu ư?? Cái này mình chưa rành vì lisp không hiểu tiếng Việt.

    Cảm ơn Bình đã quan tâm, mình xin trả lời bạn như sau:

    1. Mình rất muốn nhưng dạo này đang bận quả hoàn công, quyết toán (xong chắc phải 1,5 tháng nữa) mà giữa năm thì thanh tra chịu khó đi lắm :(, hẹn bạn xong vụ công trình riêng này đã nhé (kiếm bát gạo xấu nuôi bồ đã)

    2. Oke, mình se gửi (bản vẽ không chính xác lắm = thuyết minh :) )

    3. Hai cột này có nội dung giống nhau vì mình rất chi là lười :) nếu cần ghi chú thì ed là Oke không phải nối bảng và căn chỉnh text, nếu không thì để trống, nếu không cần và bản vẽ chật quá thì ETR, F là xong (phá bao giờ cũng nhanh hơn làm mà :) )

    4. Nội dung text lấy Text Style hiện hành, bảng mình sẽ lập auto bằng TABLE (TB) mặc định của Autocad thì việc tiếng việt có dấu mình nghĩ sẽ làm được phải không bạn ?

    http://www.cadviet.com/upfiles/3/17200_cadviet_s_c_w.dwg


  4. Hề hề hề,

    Mình giúp bạn lần này đưa vấn đề bạn hỏi về cùng topic gốc. Lần sau bạn nên rút kinh nghiệm để diễ đàn đỡ rối rắm.

    Bạn dùng thử cái này xem đã ưng ý chưa nhé.

    
    (defun c:ddt(/ lacol ladin laos tl h tl1 cao1 k tdt ss pt p1 p2 p3 p4 p5 p6 p7 p8
                           pa pt1 pt2 e ep p9 p10 p11 p12 p13 et dtcon )
     (setvar "cmdecho" 0)
     (setq lacol (getvar "CEColor"))
     (setq ladin (getvar "dimzin"))
     (setq laos (getvar "osmode"))  
     (if (not tl) (setq tl 1))
     (if (not h) (setq h 1))
     (setq tl1 (getreal (strcat "\nty le ban ve < 1/" (rtos tl 2 0) " >: 1/"))
    caot1 (getreal (strcat "\nCao text < " (rtos h 2 0) " >: ")))
     (if tl1 (setq tl tl1))
     (if caot1 (setq h caot1))
     (command "undo" "be")
     (setq  k 0
    tdt 0)
     (setq ss (ssadd))
    
    (setvar "dimzin" 0)
    (setvar "OSMODE" 0)
    (setq PT (getpoint "\nChon diem xuat bang thong ke dien tich (mep trai):"))
    (setq  P1 (list (+ (car PT)(* 6 h)) (cadr PT))
    P2 (list (+ (car PT)(* 22 h)) (cadr PT))
    P3 (list (car PT) (- (cadr PT)(* 3 h)))
    P4 (list (car P1) (cadr P3))
    P5 (list (car P2) (cadr P3))
    P6 (list (+ (car PT)(* 11 h)) (+ (cadr PT)(* 2 h)))
    P7 (list (+ (car PT)(* 3 h)) (- (cadr PT)(* 1.5 h)))
    P8 (list (+ (car PT)(* 14 h)) (- (cadr PT)(* 1.5 h)))
    );setq
    (command  "pline" PT P2 P5 P3 "C"
    "pline" P1 P4 ""
    "text" "m" P6 (* 1.2 h) 0 "Bang thong ke dien tich"
    "text" "m" P7 h 0 "STT"
    "text" "m" P8 h 0 "Dien tich (mm2)"
    );command
    (setq PA  (getstring "\n Ban chon phuong an chon doi tuong < 1 or 2 > : "))
    (if (= pa "1")
       (setq pt1 (getpoint "\n Chon mien tinh dien tich : "))
       (setq ep (car (setq e (entsel "\n Chon doi tuong la polyline kin")))
                 pt2 (cadr e)  )
    )
     (while (or (/= pt1 nil) (/= ep nil) )
    (setq k (+ 1 k))
                     (if pt1
    (command "TEXT" "m" pt1 (* 1 h) 0 (rtos k 2 0))
                     )
                     (if ep
                     (command "TEXT" "m" pt2 (* 1 h) 0 (rtos k 2 0))
                     )
    (setq  PT (list (car P3) (cadr P3))
    P1 (list (+ (car PT)(* 6 h)) (cadr PT))
    P2 (list (+ (car PT)(* 22 h)) (cadr PT))
    P3 (list (car PT) (- (cadr PT)(* 3 h)))
    P4 (list (car P1) (cadr P3))
    P5 (list (car P2) (cadr P3))
    P7 (list (+ (car PT)(* 3 h)) (- (cadr PT)(* 1.5 h)))
    P8 (list (+ (car PT)(* 14 h)) (- (cadr PT)(* 1.5 h)))
    P9 (list (car PT) (- (cadr P3)(* 3 h)))
    P10 (list (car P1) (cadr P9))
    P11 (list (car P2) (cadr P9))
    P12 (list (car P7) (- (cadr P3)(* 1.5 h)))
    P13 (list (car P8) (cadr P12))
    );setq
                     (if  pt1
                         (progn
           (command "CECOLOR" 4 "-boundary" pt1 "" )
           (setvar "CECOLOR" lacol)
           (setq et (entlast))
           (ssadd et ss)
           (command "area" "e" "last")
                         )
                     )
                     (if ep
                         (command "area" "o" ep)
                     )
    ;;;;;;(setq et (entlast))
    ;;;;;;(ssadd et ss)
    (setq dtcon (* (getvar "AREA") tl tl))
    (setq tdt (+ dtcon tdt))
    (command "erase" ss "")
    
    (command "pline" PT P2 P5 P3 "C"
    "pline" P1 P4 ""
    "text" "m" P7 h 0 (rtos k 2 0)
    "text" "m" P8 h 0 (rtos dtcon 2 2))
                     (if pt1
    (setq pt1 (getpoint "\n chon mien tinh dien tich tiep theo hoac enter de ket thuc lenh..."))
                     )
                     (if ep
                         (setq ep (car (setq e (entsel "\n Chon polyline tiep theo hoạc enter de ket thuc lenh ..."))) pt2 (cadr e)  )
                     )
    );while
    (setq ss nil)
    (setvar "DIMZIN" ladin)
    (command  "pline" P3 P9 P11 P5 "C"
    "pline" P10 P4 ""
    "text" "m" P12 h 0 "Tong"
    "text" "m" P13 h 0 (rtos tdt 2 2)
    );command
    (command "undo" "e")
    (setvar "OSMODE" laos)
    (setvar "cmdecho" 1)
    (princ)
    )
    

    Chúc bạn vui......

     

    Mình lại làm phiền bạn nhé, nhờ bạn giúp mình sửa như sau:

     

     

    1. Nhập tên lệnh: AAA

    2. Nhập tỷ lệ bản vẽ <1000, 100, 10, 1>: 1000 (sẽ gợi nhớ số này cho lần thực hiện tiếp)

    3. Nhập đơn vị xuất <m, dm, cm, mm>: m (tương ứng với 1000 ở trên) (sẽ gợi nhớ số này cho lần thực hiện tiếp)

    4. Nhập trọng lượng riêng <2500>: 2500 (sẽ gợi nhớ số này cho lần thực hiện tiếp)

    5. Pick vị trí đặt bảng <đỉnh mép trái>:

    6. Chọn kiểu <1: Pick miền, 2: Pick đường bao>:

    7. Chọn vùng tính toán:

     

    Kết quả sẽ cho ra như sau:

    17200_gui_caviet_2.jpg


  5. <p></p>

    Hề hề hề,

    Bạn nói làm mình buồn quá. Vậy sao gọi là lisp bị lỗi mà phải gọi là nó chưa đúng ý bạn chớ. Mình không phải là bạn nên làm sao có thể hiểu đúng hoàn toàn ý của bạn qua mấy lời trong bài post được.

    Bạn hãy thử làm mấy việc sau để chỉnh lại cái lisp đó xem nó đã đúng ý bạn chưa nhé.

    1/- Mở lisp ra tìm tới đoạn code hàm con (defun nsl1...) Sửa đoạn :

     

     

    (if (not ktdoantaluy1)

    (setq ktdoantaluy1 250 tg (getreal (strcat "\nChieu dai doan ngan<" (rtos ktdoantaluy1 2 2) ">:")))

     

    )

    thành:

     

     

    (if (not ktdoantaluy1)

    (setq ktdoantaluy1 250 tg (getreal (strcat "\nChieu dai doan ngan<" (rtos ktdoantaluy1 2 2) ">:")))

    (setq tg (getreal (strcat "\nChieu dai doan ngan<" (rtos ktdoantaluy1 2 2) ">:")))

    )

     

    2/- Với các biến ktdoantaluy2, khoangcachtl, sodoanngan bạn cũng sửa tương tự như trên với lưu ý đổi tên biến cho phù hợp.

     

    3/- Tiếp tục tìm xuống đoạn code của hàm chính VTL1. Copy dòng code

    (nsl1)

     

    Dán dòng này vào ngay phía dưới dòng code :

    (setq ep (entsel "\nChon doi tuong ve ta luy..."))

     

    Đồng thời xóa bỏ cả hai dòng code (nsl1) cũ có trong hàm chính

     

    4/- Tiếp tục tìm trong hàm chính VTL1 tới dòng code:

    (command "block" blname (list 0.0 0.0 0.0) ss "" )

     

    Sửa nó thành dòng code:

    (command "block" blname (list 0.0 0.0 0.0) ss "" "oops")

     

    5/- Lưu lại file và test thử coi.

     

    Về yêu cầu cuối cùng của bạn, mình không hiểu được vì sao phải pick 3 điểm vì mỗi pline chỉ có một chiều nhất định. Nếu bạn thấy pick 2 điểm là đủ thì bạn có thể tham khảo code mình đã sửa cho bạn hotanphi. Nếu vẫn bắt buộc phải là 3 điểm thì bạn hãy tạo một pline mới qua 3 điểm đó và rải taluy trên pline vừa vẽ là OK. (Bạn lưu ý rằng : mỗi pline đều có điểm đâu và điểm cuối xác định, vì thế yêu cầu của bạn chọn 3 điểm trên pline kín sẽ có khả năng xảy ra là theo chiều bạn chọn điểm đầu và cuôi của pline nằm tọt vào trong đó và sẽ khó mà rải taluy.)

     

    @ Bạn Hotanphi:

    Yêu cầu 1 của bạn hãy tham khảo ở trên đây.

    Yêu cầu 2 của bạn trong lisp đã có giải quyết rồi bằng cách lựa chọn Change khi lisp hỏi. Lisp không phân biệt phải hay trái mà phân biệt theo chiều của polyline. Vì thế bạn cứ rải bình thường, nếu thấy đúng chiều rồi thì Ok còn nếu chưa thì change là được

    Mình đã làm bạn buồn, xin lỗi bạn nhé, mình đã thay thế -> các vấn đề oke hết, duy chỉ còn vấn đề Block nữa thôi bạn ạ

    Bạn giúp mình nốt nhé:

    như thế này ạ:

     

     

    Chon doi tuong ve ta luy...

    Chieu dai doan ngan<250.00>:2.5

     

    Chieu dai doan dai<500.00>:5

     

    Khoang cach giua cac doan<200.00>:2

     

    So doan ngan trong 1 doan dai<1>:

    Undo/Change <enter for exit>: c

    Undo/Change <enter for exit>:

     

    Nhap ten block ban muon: duong 1

     

    Sau khi nhập xong thì pick không thấy đóng Block "duong 1" mà chỉ khi dùng lệnh BE = BEDIT thì hiện ra như hình sau (có block "duong 1" nhưng Edit trong lệnh BE đó không có tác dụng khi close Block Editor)

    Giúp mình nốt nhé!

    17200_hinh_block.jpg

    Cảm ơn bạn trước!

    Lisp mình đã chỉnh theo lời bạn đây à!

    http://www.cadviet.com/upfiles/3/17200_vtl1.lsp


  6. Hề hề hề,

    Không phải là không được nhưng mình không làm vì nếu ngay cả cái việc đọc và chép code này mà bạn cũng không muốn làm thì không nên dùng lisp nữa đâu. Bởi vì lisp trên diễn đàn này chỉ sử dụng cho những mục tiêu nhất định mà chủ thớt đã đặt ra. Vì vậy nếu bạn không muốn hiểu về nó thì đừng nên dùng vì có ngày mang vạ đấy. Còn nếu muốn dùng thì phải hiểu chút chút về nó.

    Mình đã chỉ cho bạn chỗ cần sửa và cách sửa mà bạn cũng không muốn đụng tay đụng chân vào để làm và hiểu thì ..... hãy chờ đó, may ra có bác nào đủ nhiệt tình hơn sẽ giúp bạn nhé.

    Cảm ơn PhamThanBinh Ctrl + F, + H, +G bản thân word cũng có, hãy tận dụng hết sử dụng có thể bạnBienxanh_19 nhé


  7. Hề hề hề,

    1/- Đã sửa

    2/- Đã sửa

    3/- Đã sửa

    4/- Đã sửa

    5/- Đã sửa.

    6.1/- Không sửa. Nếu bạn muốn vậy hãy nhét lisp này vào file vlx.

    6.2 a/- Đã sửa

    6.2 b/- Không sửa vì lisp này sử dụng vẽ nét taluy vuông góc với đường nối hai điểm chân taluy chứ không phải vuông góc với đường rải ta luy. Nếu bạn muốn vậy thì cần làm lisp theo giải thuật khác.

    Nếu mình đoán không sai thì lisp này là của bác Duy. Mạn phép bác chỉnh sửa một chút cho bạn SoftvnBin xài thử

     

    Đây là cái đã sửa, bạn dùng thử nhé và cho ý kiến để mình hoàn thiện thêm.

    
    
    ;;;;;;;;;vtl;;;;;;;;;;;;;;;;
    ;Ve ta luy.lenh VTL1
    (defun nsl ()
    (if (/= scale nil)
       (progn
    	(setq thongbao (strcat "Ty le ban ve ?, <1/" (itoa scale) ">:"))
    	(if (not (setq scaletmp (getint thongbao)))
               (setq scaletmp scale)
    	)
       )
       (progn
    	(setq thongbao "Ty le ban ve ? <1/1000>:")
    	(if (not (setq scaletmp (getint thongbao)))
    			(setq scaletmp 1000)
    	)
       )
    )
    
    (setq scale scaletmp)
    
    (setq Defaultdist (* (* scale 2) 0.002))
    (if (setq tg (getreal (strcat "\nKhoang cach ky hieu ta luy <" (rtos Defaultdist 2 2) ">:")))
      	(setq Defaultdist tg)
    )
    
    (setq chieutaluy1 1 sodoan 0)
    )
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    (defun nsl1 ()
    (if (not ktdoantaluy1)
       (setq ktdoantaluy1 250  tg (getreal (strcat "\nChieu dai doan ngan<" (rtos ktdoantaluy1 2 2) ">:")))
    )
    (if tg
       (setq ktdoantaluy1 tg tg nil)
    )
    (if (not ktdoantaluy2)
       (setq ktdoantaluy2 500 tg (getreal (strcat "\nChieu dai doan dai<" (rtos ktdoantaluy2 2 2) ">:")))
    )
    (if tg
       (setq ktdoantaluy2 tg tg nil)
    )
    (if (not khoangcachtl)
       (setq khoangcachtl 200 tg (getreal (strcat "\nKhoang cach giua cac doan<" (rtos khoangcachtl 2 2) ">:")))
    )
    (if tg
       (setq khoangcachtl tg tg nil)
    )
    (if (not sodoanngan)
       (setq sodoanngan 1 tg (getint (strcat "\nSo doan ngan trong 1 doan dai<" (rtos sodoanngan 2 0) ">:")))
    )
    (if tg
       (setq sodoanngan tg tg nil)
    )
    
    )
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    (Defun PlMake (Plist) ; Create polyline entities
    (entmake '((0 . "POLYLINE")))
    (setq n (length Plist)
    ic 0
    )
    (while (< ic n)
    (entmake (list (cons 0 "VERTEX") (cons 10 (nth ic Plist))))
    (setq ic (1+ ic)
    )
    )
    (entmake '((0 . "SEQEND")))
    
    )
    
    
    ;;;----------------------------------------------------------------
    (defun ve1doantaluy (p1 p2 / pvt diemcu ktdoantaluy ketthuc)
    (setq pvt (+ (angle p1 p2) (* (/ pi 2) chieutaluy)))
    ;;;;(setq ketthuc 1)
    (if (< sodoan sodoanngan)
    (progn
    (setq ktdoantaluy ktdoantaluy1)
    (setq sodoan (1+ sodoan))
    )
    (progn
    (setq ktdoantaluy ktdoantaluy2)
    (setq sodoan 0)
    )
    )
    (setq p2 (polar p1 pvt ktdoantaluy))
    (plmake (list p1 p2))
    (setq dem (1+ dem))
    )
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    (Defun xddsd (com epl kc / e0 e p dsd)
    (setq e0 (entlast))
    (while e0
    (setq e e0)
    (setq e0 (entnext e0))
    )
    (command com epl kc)
    (setq e (entnext e))
    (while e
    (setq p (cdr (assoc 10 (entget e))))
    (if p
    (setq dsd (cons p dsd))
    )
    (setq e (entnext e))
    )
    (command "_.Undo" 1)
    (setq dsd dsd)
    )
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; ve ta luy cho 1 doi tuong
    (Defun vetaluy (ep / le e ketthuc them dsd thutu)
    (setq dem 0)
    (setq sodoan 0)
    (setq ss (ssadd))
    (setq e (entget (car ep)))
    (if (or (= (cdr (assoc 0 e)) "LWPOLYLINE")
    (= (cdr (assoc 0 e)) "POLYLINE")
    (= (cdr (assoc 0 e)) "SPLINE")
    (= (cdr (assoc 0 e)) "LINE")
    (= (cdr (assoc 0 e)) "ARC")
    (= (cdr (assoc 0 e)) "CIRCLE")
    )
    
    (setq ketthuc 1)
    (prompt "\nDoi tuong duoc chon khong hop le")
    )
    (if ketthuc
    (progn
    (setq thutu 0)
    (setq dsd (xddsd "_.Measure" ep khoangcachtl))
    (setq dsd (append dsd (list (vlax-curve-getstartpoint (car ep)))))
    (setq p1 (car dsd))
    (repeat (1- (length dsd))
    (setq thutu (1+ thutu))
    (setq p2 (nth thutu dsd))
    (ve1doantaluy p1 p2)
    (setq p1 p2)
    (setq ss (ssadd (entlast) ss))
    )
    )
    )
    (setq dem dem)
    )
    
    ;;;==================================================
    (Defun C:VTL1 (/ ep chon lai solan chon ss tg)
    (vl-load-com)
    (setvar "cmdecho" 0)
    (setvar "blipmode" 0)
    (command "undo" "g")
    ;;;;(nsl)
    
    (setq ep 1)
    (while ep
      	(setq solan 0  chieutaluy 1)
      	(setq ep (entsel "\nChon doi tuong ve ta luy..."))
      	(if ep
               (progn
          			(nsl1)
          			(setq solan (vetaluy ep))
          			(initget "Undo Change")
          			(while
                               (setq chon (getkword "Undo/Change <enter for exit>: "))
                               (if (= chon "Undo")
                                   (command "_.Undo" solan)
                               )
                               (if (= chon "Change")
                                   (progn
                                           (nsl1)
                                           (setq chieutaluy -1)
                                           (command "_.Undo" solan)
                                           (setq solan (vetaluy ep))
                                   )
                    			)
                    			(initget "Undo Change")
                       )
                       (setq blname (getstring t "\n Nhap ten block ban muon: "))
                       (if (/= blname "")
                           (command "block" blname (list 0.0 0.0 0.0) ss "")
                       )
                       (setq ep nil)
    			)
    	)
    )
    (command "undo" "e")
    (princ)
    )
    

     

    Hề hề hề,

    Cách dùng lisp này vẫn u như kỵ, chỉ lưu ý khi lisp yêu cầu nhập tên block, nếu bạn không muốn tạo block thì chỉ cần nhấn enter để bỏ qua.

    Chúc bạn vui.

    Cảm ơn bác PhamThanhBinh đã tận tình giúp đỡ, tuy nhiên sau khi test thì em thấy có lỗi như sau (lỗi một phần do em không diễn tả đúng ý mình (văn lùn quá :D ).

    Em xin giả trình lại như sau:

     

    Command: vtl1

     

    Chon doi tuong ve ta luy...

    Chieu dai doan ngan<250>:100 (250 là số liệu mặc định khi thực hiện lệnh VTL1 lần đầu tiên, 100 là số liệu nhập vào, lần thứ 2 khi thực hiện lệnh VTL1 thì sẽ chuyển thành Chieu dai doan ngan<100>:… 100 là số liệu lần cận kề dưới nó.

     

    Chieu dai doan dai<500>:200 (Tương tự như trên)

     

    Khoang cach giua cac doan<200>:100 (Tương tự như trên)

     

    So doan ngan trong 1 doan dai<1>:2 (Tương tự như trên)

    Undo/Change <enter for exit>:

     

    Nhap ten block ban muon: mai duong 1

     

     

    1. Lưu số liệu lần nhập trước (được giải trình như trên và dưới đây)

    Khi thực hiện lệnh VTL1 lần 1 thì hỏi các thông số nhập vào

    Khi thực hiện lệnh VTL1 lần 2, lần 3… thì vẫn hỏi các thông số nhập vào, nhưng cho số gợi nhớ các thông số đã nhập lần gần nhất.

    Ví dụ: thực hiện lệnh VTL1 lần thứ nhất -> Khoang cach giua cac doan<200>:100, thì khi thực hiện lệnh VTL1 lần thứ hai sẽ nhớ -> Khoang cach giua cac doan<100>:150 (150 là số liệu mới nhập vào lần 2, 100 là số liệu lần nhập cận kề dưới nó (trong trường họp này chính là lần đầu tiên). Khi thực hiện lệnh VTL1 lần thứ ba sẽ nhớ số liệu nhập lần cận kề dưới nó (ở đây sẽ là Khoang cach giua cac doan<150>:.…. .)

     

    2. Sau khi kết thúc lệnh bằng Enter (Undo/Change <enter for exit>) thì tự đóng block đối tượng vừa sinh ra với tên block cho nhập mới vào (với layer hiện hành)

    (Khi nhập tên Block xong thì toàn bộ mái taluy vừa rải biến mất :) )

    3. Kết thúc bằng Enter không thực hiện tiếp lệnh VTL1

    (đã Oke!)

    4. Khắc phục nill khi kết thúc lệnh Enter

    (đã Oke!)

    5. Khi thực hiện lệnh [ Undo/Change <enter for exit>: *Cancel* ] để thay đổi phía rải taluy, không hỏi lại các tham số nữa mà thực hiện luôn

    (đã Oke!)

    6. Khắc phục không đổi lệnh VLT1 thành lệnh khác được (giả sử thành lệnh VTL) (em thấy các lisp khác đổi lệnh được thông qua ký tự C:LLL thành tên lệnh mong muốn)

    (đã Oke!)

    7. Bác xem giúp em luôn chọn đối tượng rải -> chọn đoạn rải (thuộc đối tượng rải) -> từ điểm pick 1 đến điểm pick 2 đến điểm Pick 3 thì sẽ chỉ rải trong đoạn từ điểm pick 1 đến điểm pick 3 (theo chiều từ pick 1 đến pick 2 đến pick 3 (để khắc phục chiều rải trong hình kín) không ạ, em chân thành cảm ơn!


  8. Hề hề hề,

    1/- Đã sửa

    2/- Đã sửa

    3/- Đã sửa

    4/- Đã sửa

    5/- Đã sửa.

    6.1/- Không sửa. Nếu bạn muốn vậy hãy nhét lisp này vào file vlx.

    6.2 a/- Đã sửa

    6.2 b/- Không sửa vì lisp này sử dụng vẽ nét taluy vuông góc với đường nối hai điểm chân taluy chứ không phải vuông góc với đường rải ta luy. Nếu bạn muốn vậy thì cần làm lisp theo giải thuật khác.

    Nếu mình đoán không sai thì lisp này là của bác Duy. Mạn phép bác chỉnh sửa một chút cho bạn SoftvnBin xài thử

     

    Đây là cái đã sửa, bạn dùng thử nhé và cho ý kiến để mình hoàn thiện thêm.

    
    ;;;;;;;;;vtl;;;;;;;;;;;;;;;;
    ;Ve ta luy.lenh VTL1
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    (defun nsl1 ()
    (if (not ktdoantaluy1)
       (setq ktdoantaluy1 250  tg (getreal (strcat "\nChieu dai doan ngan<" (rtos ktdoantaluy1 2 2) ">:")))
    )
    (if tg
       (setq ktdoantaluy1 tg)
    )
    (if (not ktdoantaluy2)
       (setq ktdoantaluy2 500 tg (getreal (strcat "\nChieu dai doan dai<" (rtos ktdoantaluy2 2 2) ">:")))
    )
    (if tg
       (setq ktdoantaluy2 tg)
    )
    (if (not khoangcachtl)
       (setq khoangcachtl 200 tg (getreal (strcat "\nKhoang cach giua cac doan<" (rtos khoangcachtl 2 2) ">:")))
    )
    (if tg
       (setq khoangcachtl tg)
    )
    (if (not sodoanngan)
       (setq sodoanngan 1 tg (getint (strcat "\nSo doan ngan trong 1 doan dai<" (rtos sodoanngan 2 0) ">:")))
    )
    (if tg
       (setq sodoanngan tg)
    )
    
    )
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    (Defun PlMake (Plist) ; Create polyline entities
    (entmake '((0 . "POLYLINE")))
    (setq n (length Plist)
    ic 0
    )
    (while (< ic n)
    (entmake (list (cons 0 "VERTEX") (cons 10 (nth ic Plist))))
    (setq ic (1+ ic)
    )
    )
    (entmake '((0 . "SEQEND")))
    
    )
    
    
    ;;;----------------------------------------------------------------
    (defun ve1doantaluy (p1 p2 / pvt diemcu ktdoantaluy ketthuc)
    (setq pvt (+ (angle p1 p2) (* (/ pi 2) chieutaluy)))
    ;;;;(setq ketthuc 1)
    (if (< sodoan sodoanngan)
    (progn
    (setq ktdoantaluy ktdoantaluy1)
    (setq sodoan (1+ sodoan))
    )
    (progn
    (setq ktdoantaluy ktdoantaluy2)
    (setq sodoan 0)
    )
    )
    (setq p2 (polar p1 pvt ktdoantaluy))
    (plmake (list p1 p2))
    (setq dem (1+ dem))
    )
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    (Defun xddsd (com epl kc / e0 e p dsd)
    (setq e0 (entlast))
    (while e0
    (setq e e0)
    (setq e0 (entnext e0))
    )
    (command com epl kc)
    (setq e (entnext e))
    (while e
    (setq p (cdr (assoc 10 (entget e))))
    (if p
    (setq dsd (cons p dsd))
    )
    (setq e (entnext e))
    )
    (command "_.Undo" 1)
    (setq dsd dsd)
    )
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; ve ta luy cho 1 doi tuong
    (Defun vetaluy (ep / le e ketthuc them dsd thutu)
    (setq dem 0)
    ;;;(setq sodoan 0)
    (setq ss (ssadd))
    (setq e (entget (car ep)))
    (if (or (= (cdr (assoc 0 e)) "LWPOLYLINE")
    (= (cdr (assoc 0 e)) "POLYLINE")
    (= (cdr (assoc 0 e)) "SPLINE")
    (= (cdr (assoc 0 e)) "LINE")
    (= (cdr (assoc 0 e)) "ARC")
    (= (cdr (assoc 0 e)) "CIRCLE")
    )
    
    (setq ketthuc 1)
    (prompt "\nDoi tuong duoc chon khong hop le")
    )
    (if ketthuc
    (progn
    (setq thutu 0)
    (setq dsd (xddsd "_.Measure" ep khoangcachtl))
    (setq dsd (append dsd (list (vlax-curve-getstartpoint (car ep)))))
    (setq p1 (car dsd))
    (repeat (1- (length dsd))
    (setq thutu (1+ thutu))
    (setq p2 (nth thutu dsd))
    (ve1doantaluy p1 p2)
    (setq p1 p2)
    (setq ss (ssadd (entlast) ss))
    )
    )
    )
    (setq dem dem)
    )
    
    ;;;==================================================
    (Defun C:VTL1 (/ ep chon lai solan chon ss tg)
    (vl-load-com)
    (setvar "cmdecho" 0)
    (setvar "blipmode" 0)
    (command "undo" "g")
    ;;;;(nsl)
    
    (setq ep 1)
    (while ep
      	(setq solan 0  chieutaluy 1)
      	(setq ep (entsel "\nChon doi tuong ve ta luy..."))
      	(if ep
               (progn
                  	(nsl1)
                  	(setq solan (vetaluy ep))
                  	(initget "Undo Change")
                  	(while
                               (setq chon (getkword "Undo/Change <enter for exit>: "))
                               (if (= chon "Undo")
                                   (command "_.Undo" solan)
                               )
                               (if (= chon "Change")
                                   (progn
                                           (nsl1)
                                           (setq chieutaluy -1)
                                           (command "_.Undo" solan)
                                           (setq solan (vetaluy ep))
                                   )
                            	)
                            	(initget "Undo Change")
                       )
                       (setq blname (getstring t "\n Nhap ten block ban muon: "))
                       (if (/= blname "")
                           (command "block" blname (list 0.0 0.0 0.0) ss "")
                       )
                       (setq ep nil)
            	)
        	)
    )
    (command "undo" "e")
    (princ)
    )
    

     

    Hề hề hề,

    Cách dùng lisp này vẫn u như kỵ, chỉ lưu ý khi lisp yêu cầu nhập tên block, nếu bạn không muốn tạo block thì chỉ cần nhấn enter để bỏ qua.

    Chúc bạn vui.

    Cảm ơn phamthanhbinh đã giúp mình, nhưng bị lỗi, bạn xem giúp mình nhé:

     

    Command: vtl1

     

    Chon doi tuong ve ta luy...

    Chieu dai doan ngan<250.00>:25

    Chieu dai doan dai<500.00>:50

    Khoang cach giua cac doan<200.00>:20

    So doan ngan trong 1 doan dai<1>:

    ; error: bad argument type: numberp: nil

     

    Khi thuc hien lai lenh

     

    Command: vtl1

    Chon doi tuong ve ta luy...; error: bad argument type: numberp: nil


  9. Đây là lisp tôi sưu tầm và chỉnh sửa lại chút ít, có thể rải taluy cho các loại line, pline, spline, arc, circle ...

    (Mới dừng ở việc vẽ taluy cho 1 đường, phần vẽ mái taluy giữa 2 đường tôi chưa sửa xong)

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;vtl;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    (defun nsl () 
    (if (/= scale nil)
       (progn
         (setq thongbao (strcat "Ty le ban ve ?, <1/" (itoa scale) ">:"))
         (if (not (setq scaletmp (getint thongbao)))
            (setq scaletmp scale)
         )
       )
       (progn
         (setq thongbao "Ty le ban ve ? <1/1000>:")
         (if (not (setq scaletmp (getint thongbao)))
             (setq scaletmp 1000)
         )
      )
    )
    (setq scale scaletmp)
    (setq Defaultdist (* (* scale 2) 0.002))
    (if (setq tg (getreal (strcat "\nKhoang cach ky hieu ta luy <" (rtos Defaultdist 2 2) ">:" ))) 
        (setq Defaultdist tg)
    )
    (setq	chieutaluy1 	1	sodoan 0  )
    )
    ;;;;;;;;;;;;;;;;;;;;;;;;;;
    (defun nsl1 ()
    (setq ktdoantaluy1 2    tg (getreal (strcat "\nChieu dai doan ngan<"  (rtos ktdoantaluy1 2 2)  ">:" ))  )
    (if tg 
      (setq ktdoantaluy1 tg)
    )
    (setq ktdoantaluy2 6    tg (getreal (strcat "\nChieu dai doan dai<" (rtos ktdoantaluy2 2 2) ">:" ))  )
    (if tg
       (setq ktdoantaluy2 tg)
    )
    (setq khoangcachtl 2    tg (getreal (strcat "\nKhoang cach giua cac doan<"  (rtos khoangcachtl 2 2)  ">:"  ))  )
    (if tg
       (setq khoangcachtl tg)
    )
    (setq sodoanngan 3    tg (getint (strcat "\nSo doan ngan trong 1 doan dai<" (rtos sodoanngan 2 0)  ">:"  ))  )
    (if tg 
       (setq sodoanngan tg)
    )
    )
    (Defun PlMake (Plist)			;  Create polyline entities
    (entmake '((0 . "POLYLINE")))
    (setq	n  (length Plist)	ic 0  )
    (while (< ic n)
       (entmake (list (cons 0 "VERTEX") (cons 10 (nth ic Plist)))) 
       (setq ic (1+ ic))
    )
    (entmake '((0 . "SEQEND")))
    )
    ;;;----------------------------------------------------------------
    (defun ve1doantaluy (p1 p2 / pvt diemcu ktdoantaluy ketthuc)
     (setq pvt (+ (angle p1 p2) (* (/ pi 2) chieutaluy)))
     (setq ketthuc 1)
     (if (< sodoan sodoanngan)
       (progn
         (setq ktdoantaluy ktdoantaluy1)
         (setq sodoan (1+ sodoan))
       )
       (progn
         (setq ktdoantaluy ktdoantaluy2)
         (setq sodoan 0)
       )
    )
    (setq p2 (polar p1 pvt ktdoantaluy))
    (plmake (list p1 p2))
    (setq dem (1+ dem))
    )
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;
    (Defun xddsd (com epl kc / e0 e p dsd)
     (setq e0 (entlast))
     (while e0
       (setq e e0)
       (setq e0 (entnext e0))
     )
     (command com epl kc)
     (setq e (entnext e))
     (while e
       (setq p (cdr (assoc 10 (entget e))))
       (if	p
         (setq dsd (cons p dsd))
       )
       (setq e (entnext e))
     )
     (command "_.Undo" 1)
     (setq dsd dsd)
    )				   
    ;;; ve ta luy cho 1 doi tuong
    (Defun vetaluy (ep / le e ketthuc them dsd thutu)
     (setq dem 0)
     (setq e (entget (car ep)))
     (if (or (= (cdr (assoc 0 e)) "LWPOLYLINE") (= (cdr (assoc 0 e)) "POLYLINE") (= (cdr (assoc 0 e)) "SPLINE") (= (cdr (assoc 0 e)) "LINE")
              (= (cdr (assoc 0 e)) "ARC") (= (cdr (assoc 0 e)) "CIRCLE") )
         (setq ketthuc 1)
         (prompt "\nDoi tuong duoc chon khong hop le")
     )
     (if ketthuc
       (progn
         (setq thutu 0)
         (setq dsd (xddsd "_.Measure" ep khoangcachtl))
         (setq p1 (car dsd))
         (repeat (1- (length dsd))
             (setq thutu (1+ thutu))
             (setq p2 (nth thutu dsd))
             (ve1doantaluy p1 p2)
             (setq p1 p2)
         )
       )
     )
     (setq dem dem)
    )
    ;;;==================================================
    (Defun C:vtl1 (/ ep chon lai solan chon)
     (setvar "cmdecho" 0)
     (setvar "blipmode" 0)
     (command "undo" "g")
     (nsl)
     (setq ep 1)
     (while ep
       (setq solan	0  	chieutaluy 1    )
       (setq ep (entsel "\nChon doi tuong ve ta luy..."))
       (if	ep
         (progn
           (nsl1)
           (setq solan (vetaluy ep))
           (initget "Undo Change")
           (while  	(setq chon (getkword "Undo/Change <enter for exit>: "))
                (if (= chon "Undo")
                    (command "_.Undo" solan)
                )
                (if (= chon "Change")
                    (progn
                       (nsl1)
                       (setq chieutaluy -1)
                       (command "_.Undo" solan)
                       (setq solan (vetaluy ep))
                    )
                )
                (initget "Undo Change")
            )
         )
       )
    )
    (command "undo" "e")
    )
    

    Nhờ các bác chỉnh sửa lại lisp giúp em các vấn đề sau:

     

    1. Lưu số liệu lần nhập trước

    2. Sau khi kết thúc lệnh bằng Enter (Undo/Change <enter for exit>) thì tự đóng block đối tượng vừa sinh ra với tên block cho nhập mới vào (với layer hiện hành)

    3. Kết thúc bằng Enter không thực hiện tiếp lệnh VTL1

    4. Khắc phục nill khi kết thúc lệnh Enter

    5. Khi thực hiện lệnh [ Undo/Change <enter for exit>: *Cancel* ] để thay đổi phía rải taluy, không hỏi lại các tham số nữa mà thực hiện luôn

    6. Khắc phục không đổi lệnh VLT1 thành lệnh khác được (giả sử thành lệnh VTL) (em thấy các lisp khác đổi lệnh được thông qua ký tự C:LLL thành tên lệnh mong muốn)

    6. Khắc phụ lỗi không rải taluy hết đường và không vuông góc với đường như hình:17200_17200_hinh.jpg


  10. Có 1 số tùy chọn ở đây

    Specify next point or [Arc/Halfwidth/Length/Undo/Width]: w

    Không nên làm vậy bạn à. Mất 1 số tùy chọn rồi

     

    Nếu ko thích làm như trên, bạn có thể làm vầy :

    Set biến plinewid bằng 35 chẳng hạn

     

    Command: plinewid

    Enter new value for PLINEWID <0.0000>: 35

    Sau đó vẽ Pline thì độ rộng của nó là 35

     

    Cảm ơn TueNV, biết là mất một số tùy chọn nhưng mình vẫn muốn như thế,giúp mình nhé!!!


  11. Nhờ các bro thay dòng lệnh WSpecify next point or [Arc/Halfwidth/Length/Undo/Width]: w bằng 1 lisp (tức là khi đánh lệnh PL và pick vào 1 điểm thì nó tự hiểu là mình đã chọn W chỉ cần nhập 35 -> enter -> 35

    F2 nó dư lày ạ:

     

    Command: pl PLINE

    Specify start point:

    Current line-width is 35

    Specify next point or [Arc/Halfwidth/Length/Undo/Width]: w

    Specify starting width <35>: 35

     

    Specify ending width <35>: 35

     

    Cảm ơn các bro trước ạ!!!


  12. Cho em spam câu này nhé : hi

    :)))) Sau một hồi , bác Ketxu viết xong cho bác này chưa. mà đã thấy bác ấy yêu rồi kìa... :)hì hì hì

    Dạ cho em hỏi tý, bác SoftvnBin là boy hay girl đấy ạ.

    Dạ. Em xin trính trình UBND phường (thấy thiên hạ võ lâm bảo: trình bày lên phường mà :) ) rằng thì mà là: Em là boy đã có nơi có chốn ạ :), em còn trẻ lắm ạ, mới 32 tuổi ạ :) , em trình độ văn hóa 12/12 ạ, trình độ chuyên môn kỹ sư thủy lợi ạ, nghề nghiệp hiện tại: xây dựng gia đình và dân dụng ạ, còn gì nữa không ạ? à, rằng thì mà là anh cứ nghỉ để hỏi đi ạ, còn em giờ em xin về để nghỉ câu trả lời trước ạ, chân thành cảm ơn anh đã có lúc nghỉ em là girl ạ, thật ra nếu em mà là Girl thì anh chỉ còn da bọc xương thôi, hé hé.

     

     

    P/S: Chân thành cảm ơn bác Ketxu, học hoài vẫn dốt (chí khí ghê) đã tạo điều kiện giúp đỡ, gia đình xin chân thành cảm ơn!!!


  13.  

    Éc éc ...

     

    [/font][/color]

     

    Thật ra quan trọng là ý tưởng nghỉ ra thôi.

    Còn khi đã có ý tưởng thì ai biết lisp ít ít thôi cũng sẽ viết được.

    Nhiều người viết, trong đó có 1 người free thì sẽ bạc ... thui.

     

    Thật ra mình nói đùa vậy thôi Ketxu à (đừng giận nhé :) ), chứ 50k thì ý nghĩa gì đâu, nói ra khéo ai đó lại bảo mình khít răng :) , Mình ở Vĩnh Phúc, nếu Ketxu hoặc ai đó đến VĨnh Phúc mình mời nhiệt tình một bựa nhậu ra trò ấy chứ, tất nhiên rượu vào sẽ có cafe + karaoke đi kèm là hiển nhiên, hehe (nói đến làm mình lại khoái :angry2: )

    yahoo: vjps_noob_pros@yahoo.com

    Vậy thật lòng nhờ Ketxu viết giúp mình nhé, Ketxu :)

     

    Có số điện thoại 09...134.568 gọi và nhắn tin cho số 09....399.773 vào hồi 10h16' ngày ............. :)

    à há, anh đã về rồi à :)


  14. Thật ra mình nói đùa vậy thôi Ketxu à (đừng giận nhé :) ), chứ 50k thì ý nghĩa gì đâu, nói ra khéo ai đó lại bảo mình khít răng :) , Mình ở Vĩnh Phúc, nếu Ketxu hoặc ai đó đến VĨnh Phúc mình mời nhiệt tình một bựa nhậu ra trò ấy chứ, tất nhiên rượu vào sẽ có cafe + karaoke đi kèm là hiển nhiên, hehe (nói đến làm mình lại khoái :angry2: )

    yahoo: vjps_noob_pros@yahoo.com

    Vậy thật lòng nhờ Ketxu viết giúp mình nhé, Ketxu :)


  15. Đã liên hệ với tác giả, tác giả đang hẹn (thấy tác giả đi công tác suốt từ tháng 12/2011 đến giờ vẫn chưa về, thật lá ái mộ :) )

    Đợi chờ thật là sốt ruột :) => chọn phương án liên hệ với Ketxu trước

    Đặt vấn đề với Ketxu: 50k tiền xăng xe nhá Ketxu (chuyển = đô nhá :) ) hay thẻ game, thẻ điện thoại nhảy

    • Vote tăng 1
×