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

bach1212

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

    193
  • Đã tham gia

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

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


  1. Ít nhất thì hàm dưới đây bạn đã viết sai cú pháp:

    (command "text" "j" "mc" a1 "0" td "" )

    - Số 0 thì ghi là 0, cớ sao lại ghi là "0" ?

    - Chú ý hàm (command "text"...) trong 2 trường hợp h=0 và h/=0 thì cách viết khác nhau nhé!

    Mấy dòng đó là vẫn của lisp gốc đó bác Doan Van Ha ah.Bình thường chưa thêm code, lisp vẫn chạy ngon.

    Em chỉ sửa thêm mấy dòng code theo hướng dẫn ở bước 1,2,3 của bác phamthanhbinh ở bài #4 để lisp chạy theo ý muốn thui ah


  2. Hề hề hề,

    Mình quên bổ sung tham số kcach này vào trong các hàm ghi text. Bạn bổ sung nhé. Tỷ dụ (command "TEXT" diem3 "" "" noidung) sẽ thành (command "TEXT" diem3 kcach "" noidung) và với điều kiện là text style hiện hành có chiều cao text là 0.

    Em thêm như này đúng chưa ah?

    ;-----------------Lap bang thong ke ga ----------------------------
    ; Free lisp code from CADViet  - edit by Mathan
    (defun C:LBHG (/ TX TY kcach)
    (setq diem (getpoint "\Chon vi tri lap bang... "))
    (setq kcach (getreal "\n Nhap chieu cao text trong bang: "))
    (prompt "\nBan can pick tung text theo thu tu Ten ho ga; cao do day va cao do dinh ga: ")
    (setq dem 1 sdt 1)
    (setq ss null)
    (while (/= ss nil)
    (if (= dem 1)
    (progn
    (setq ss (car (entsel "\nDS> Ten ho ga: ")))
    (setq noidung (cdr (assoc 1 (entget ss))))
    (setq diem1 (list (car diem) (- (cadr diem) (* sdt kcach))))
    (command "TEXT" diem1 kcach "" "" noidung)
    ))
    (if (= dem 2)
    (progn
    (setq ss (car (entsel "\nDS> Cao do dinh H1: ")))
    (setq noidung (cdr (assoc 1 (entget ss))))
    (setq diem2 (list (+ (* 2 kcach) (car diem)) (- (cadr diem) (* (- sdt 1) kcach))))
    (command "TEXT" diem2 kcach "" "" noidung)
    ))
    (if (= dem 3)
    (progn
    (setq ss (car (entsel "\nDS> Cao do day H2: ")))
    (setq noidung (cdr (assoc 1 (entget ss))))
    (setq diem3 (list (+ (* 4 kcach) (car diem)) (- (cadr diem) (* (- sdt 2) kcach))))
      (command "TEXT" diem3 kcach "" "" noidung)
      (setq dem 0)
    ))
    (setq dem (+ 1 dem))
    (setq sdt (+ 1 sdt))
    (princ)
    )
    )
    

     

    Nhưng test lại nó không lập được bảng mà báo lỗi thế này:

    Ban can pick tung text theo thu tu Ten ho ga; cao do day va cao do dinh ga:

    DS> Ten ho ga: Unknown command "LBHG". Press F1 for help.

    Unknown command "G16B". Press F1 for help.

     

    DS> Cao do dinh H1: Unknown command "LBHG". Press F1 for help.

    Unknown command "6.05". Press F1 for help.

     

    DS> Cao do day H2: Unknown command "LBHG". Press F1 for help.

    Unknown command "4.48". Press F1 for help.


  3. Hờ hờ, cám ơn bác đã cho em thấy nhiều em chân dài đến thế, nổ hết cả đom đóm mắt.

    Em sửa đoạn lisp để có thể chỉnh chiều cao text theo hướng dẫn được thế này:

    bang
    : Ha Van Khanh 3/2003
    ;
    ; * Chuong trinh duoc lap bang ngon ngu AUTOLISP.
    ; ------------------------------------------------------------------------------
    (vmon)
    (defun C:bang (/ 1x 1y a1 2x 2y a2 3x 3y a3 b p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14  p15 p16x p16y p16 p17x p17y p17)
    (setvar "cmdecho" 0) 
    (initget 7)
    (setq osm (getvar "osmode" ))
    (setvar "osmode" 0)
    (command "-Style" "hoatbif" "hoatbif " "2.5" "" "" "" "" "")
    (styleset)
    (command "-Layer" "n" "Text" "c" "4" "Text" "")
    (setq ht (getreal "\n Nhap chieu cao text ban muon: "))
     (setq p1 (getpoint "\nChän diÓm dÆt b¶ng thèng kª :"))
     (setq S (getint "\nSè ®iÓm cÇn tÝnh to¹ ®é :"))
    (setq p2 (polar p1 (/ (* Pi 3) 2) (+ 16 (* 8 S))))
    (setq p3 (polar p2 0 91))
    (setq p4 (polar p1 0 91))
    (setq p5 (polar p1 0 21))
    (setq p6 (polar p2 0 21))
    (setq p7 (polar p5 0 35))
    (setq p8 (polar p6 0 35))
    (setq p9 (polar p5 (/ (* Pi 3) 2) 8))
    (setq p10 (polar p4 (/ (* Pi 3) 2) 8))
    (setq p12 (polar p9 0 35))
    (setq p11 (polar p9 0 -10.5))
    (setq p13 (polar p1 (/ (* Pi 3) 2) 16))
    (setq p14 (polar p4 (/ (* Pi 3) 2) 16))
    (setq p15 (polar p7 (/ (* pi 3 ) 2) 4))
    (setq p16x (/ (+ (car p5) (car p7)) 2))
    (setq p16y (/ (+ (cadr p9) (cadr p13)) 2))
    (setq p17x (/ (+ (car p4) (car p7)) 2))
    (setq p17y (/ (+ (cadr p9) (cadr p13)) 2))
    (setq p16 (list p16x p16y))
    (setq p17 (list p17x p17y))
    (command "Plinewid" "0.5")
    (command "Pline" p1 p2 p3 p4 p1 "")
    (command "Line" p5 p6 "")
    (command "Line" p12 p8 "")
    (command "Line" p9 p10 "")
    (command "Line" p13 p14 "")
    (command "Array" "l" "" "Rec" S "1" "-8")
    (command "text" "j" "mc"  p11 ht "0"  "Tªn nót"  )
    (command "text" "j" "mc"  p15 ht "0"  "To¹ ®é" )
    (command "text" "j" "mc"  p16 ht "0"  "X" )
    (command "text" "j" "mc"  p17 ht "0"  "Y" )
    (setvar "osmode" 1)
    ;-------------------------------------------------
    ; PhÇn sö lý ch÷
    (setq b 0)
    (while (< b s )
    (setq b (+ b 1))
    (setq td (getstring "\NhËp tªn ®iÓm lÊy to¹ dé : "))
    (if (or (= td "") (= td " "))
    (setq td (cdr (assoc 1 (entget (car (entsel "\n Chon text san co tren ban ve"))))))
    )
    (setq tp (getpoint "\Chän ®iÓm : "))
    (setq tx (rtos (car tp) 2 4 ))
    (setq ty (rtos (cadr tp) 2 4 ))
    (setq 1x (/ (+ (car p1) (car p5)) 2))
    (setq 1y (- (- (cadr p11) 4) (* 8 B)))
    (setq a1 (list 1x 1y))
    (setq 2x (/ (+ (car p5) (car p7)) 2))
    (setq 2y (- (cadr p16) (* 8 B)))
    (setq a2 (list 2x 2y))
    (setq 3x (/ (+(car p7) (car p4)) 2))
    (setq 3y (- (cadr p17) (* 8 B)))
    (setq a3 (list 3x 3y))
    (command "text" "j" "mc"  a1  "0"  td "" )
    (command "text" "j" "mc"  a3  "0"  tx "" )
    (command "text" "j" "mc"  a2  "0"  ty "" )
    )
    )
    (defun styleset (/ stl h)
    (setq stl (getvar "textstyle")
    h (getvar "textsize"))
    (if (/= h 0) (command "style" stl "" 0 "" "" "" "" ""))
    )
    
    

    Bác xem giúp em xem lỗi ở đâu mà khi đến bước chọn tên điểm, chọn điểm xong lại ra tiếp thông báo như thế này:

    ; error: Function cancelled

    Specify height <2.00>:

    Mà nó không tiếp tục lệnh để chọn điểm tiếp được luôn, bác nhỉ.

    File cad để test: http://www.cadviet.com/upfiles/3/40304_binh_do_tnm_3.rar


  4. Hề hề hề,

    1/- Cần gì thì hãy post bản vẽ lên.

    2/- Ai cấm bạn thêm vào rồi sau khi add vào Excel lại xóa đi, bản vẽ vẫn gin.

    3/- Bạn cần cách chi, mình có nhiều cách nên chả biết chọn cách chi cho phù hợp với sự khó tính của bạn.

    Hic, cho em sory 2 bác phamthanhbinh ketxu nhé vì không post bản vẽ lên.

    File bản vẽ của em đây ah:

    http://www.cadviet.c...nh_do_tnm_2.rar

    Em hứa sẽ bắt đầu học lisp để có thể.....lại được chào hỏi các bác nhiều hơn. :D. Hic, mấy câu lệnh với code để viết lisp là e dốt lém ah.

    Yêu cầu em nêu ra vẫn là: không cần thêm bớt gì nữa cũng như không phải thao tác trên excel nữa bác ah, mà dùng lisp để thao tác trực tiếp trên cad để cho ra được tổng của các số sau chữ L trong chuỗi text có dạng: D600,L40


  5. hề hề hề,

    bạn thử bổ sung các dòng code sau:

     

    (if (or (= td "") (= td " "))

    (setq td (cdr (assoc 1 (entget (car (entsel "\n Chon text san co tren ban ve"))))))

    )

    vào dưới dòng code:

    (setq td (getstring "\NhËp tªn ®iÓm lÊy to¹ dé : "))

    xem sao nhé.

    Hề hề hề.

    Hề hề, được rùi bạn ah. Thanh hiu nhé.

    Vậy cho thêm lựa chọn chiều cao text trong bảng làm thế nào bạn nhỉ?

    Có 1 bất cập nữa mình thấy thế này: lisp này hiện tại đưa ra yêu cầu nhập trước số điểm cần tính tọa độ rùi lập thành 1 bảng với số hàng tương ứng. Nhiều lúc chưa biết cần lấy bao nhiêu điểm cứ đánh đại con số vài chục. Đến lúc chọn xong chỉ được vài điểm không hết bảng, lại phải cắt bảng đi. Hoặc lúc chọn con số bé quá, mà sau lại pick nhiều điểm hơn thì những điểm vượt quá không tạo vào bảng được.

    Vậy bạn có cách để cái bảng này lập theo kiểu chọn điểm tới đâu vẽ tới đó, không bị thừa hay thiếu hàng nữa không?

    Hjj


  6. Hề hề hề,

    Cách thì nhiều lắm nhưng bạn ưng cách chi???

    Đây là một cách mà bạn có thể ứng dụng ngay cái lisp của bác DoanVanHa là chỉ cần bạn thêm một dấu phẩy vào sau ký tự L rồi chạy lisp là nó sẽ xuất cái số 30 thành một cột nằm sau cột chứa ký tự L. Rồi tùy bạn muốn chém hay mổ nó thế nào cũng được.

    Hề hề hề.

    Dấu phẩy chỉ được phép trước chữ L thui mà bạn. Đó là cách ghi chú của bản vẽ rồi, không được sửa.

    Mình cần kết quả có thể thể hiện ngay trên bản vẽ cad như đã yêu cầu, mà không cần mất các thao tác lưu ra excel rùi lại mở excel lên cộng vào mới biết kết quả được.

    Hề hề, bạn có cách rùi thì làm giúp mình như yêu cầu đi mà.


  7. Tôi nhớ là đã viết giùm bạn nào đó cái y/c này rồi nhưng bây giờ mò đường link không ra nên đành post lên lại cho bạn vậy.
     ;Doan Van Ha - CADViet.com. Xuat Text, Mtext, Dimension ra file. (defun C:HA( / lst fn fw index x y z txt) (princ "\nChon cac Text/Mtext/Dimension can xuat ra file...") (setq lst (acet-ss-to-list (ssget '((0 . "*TEXT,DIMENSION")))) fn (getfiled "Chon file de save" "" "csv" 1) fw (open fn "w") index 0 x 1 y 1 z 1) (repeat (length lst) (cond ((= (cdr (assoc 0 (entget (nth index lst)))) "TEXT") (setq txt (strcat (cdr (assoc 1 (entget (nth index lst)))) "," "text" (itoa x)) x (1+ x))) ((= (cdr (assoc 0 (entget (nth index lst)))) "MTEXT") (setq txt (strcat (cdr (assoc 1 (entget (nth index lst)))) "," "mtext" (itoa y)) y (1+ y))) ((= (cdr (assoc 0 (entget (nth index lst)))) "DIMENSION") (if (= (cdr (assoc 1 (entget (nth index lst)))) "") (setq txt (strcat (rtos (cdr (assoc 42 (entget (nth index lst))))) "," "dim" (itoa z)) z (1+ z)) (setq txt (strcat (cdr (assoc 1 (entget (nth index lst)))) "," "dim" (itoa z)) z (1+ z))))) (princ (strcat txt "\n") fw) (setq index (1+ index))) (close fw)) 

    Lisp của bạn rất tuyệt

    Mình thử dùng "ha" cho các text có nội dung như này: D400,L30. Nó là đường kính cống tròn và chiều dài của nó.Cũng xuất ra được excel gồm 2 cột là 2 text D400 và L30

    Bạn có cách nào lọc được các số 30 sau chữ L rồi tính tổng của chúng => kết quả vừa hiện trên dòng command vừa có lựa chọn thay vào 1 text có sẵn trên bản vẽ luôn không?

    Giúp mình với. Mình cần lấy tổng chiều dài của nhiều đoạn cống đã được ghi chú như thế mà không phải cộng tay từng đoạn một.Thanks trước nhé


  8. Mình không có nhiều thời gian lắm nên lisp chưa được hoàn chỉnh tuyệt đối.

    Nhưng bạn chứ dùng thử, có ý kiến gì báo lại mình sẽ khắc phục.

    Khi nào có nhiều thời gian hơn, mình sẽ sửa nó 1 cách hoàn thiện

    (lisp này còn nông dân lắm)

    Sau khi lisp lập ra 1 bảng trong cad, bạn có thể dùng c2e.lsp trên cadviet có để chuyển sang excel bạn nhé

    Mọi code lisp được lấy từ Cadviet - tôi chỉ là người xào nấu một chút thôi

    
    ;-----------------Lap bang thong ke ga ----------------------------
    ; Free lisp code from CADViet  - edit by Mathan
    (defun C:LBHG (/ TX TY kcach)
    (setq diem (getpoint "\Chon vi tri lap bang... "))
    (setq kcach (getreal "\Khoang cach cac text trong bang... "))
    (prompt "\nBan can pick tung text theo thu tu Ten ho ga; cao do day va cao do dinh ga: ")
    (setq dem 1 sdt 1)
    (setq ss null)
    (while (/= ss nil)
    (if (= dem 1)
    (progn
    (setq ss (car (entsel "\nDS> Ten ho ga: ")))
    (setq noidung (cdr (assoc 1 (entget ss))))
    (setq diem1 (list (car diem) (- (cadr diem) (* sdt kcach))))
    (command "TEXT" diem1 "" "" noidung)
    ))  
    (if (= dem 2)
    (progn
    (setq ss (car (entsel "\nDS> Cao do day: ")))
    (setq noidung (cdr (assoc 1 (entget ss))))  
    (setq diem2 (list (+ (* 2 kcach) (car diem)) (- (cadr diem) (* (- sdt 1) kcach))))
    (command "TEXT" diem2 "" "" noidung)
    ))  
    (if (= dem 3)
    (progn
    (setq ss (car (entsel "\nDS> Cao do dinh: ")))
    (setq noidung (cdr (assoc 1 (entget ss))))
    (setq diem3 (list (+ (* 4 kcach) (car diem)) (- (cadr diem) (* (- sdt 2) kcach))))
      (command "TEXT" diem3 "" "" noidung)
      (setq dem 0)
    ))  
    (setq dem (+ 1 dem))
    (setq sdt (+ 1 sdt))
    (princ)
    )
    )
    

    Mong giúp được bạn một chút

    Cám ơn bạn nhé. Chàng nông dân của bạn về cơ bản đã giúp mình có thể thực hiện công việc nhanh chóng hơn nhiều roài.

    Mình đã sửa đi 1 chút dòng nhắc lệnh thứ 2 là lựa chọn cao độ đỉnh ga trước, đáy ga sau để cho đúng yêu cầu.

    Nếu bạn có thời gian có thể chau chuốt lisp này như thế này được không:

    - Bảng lập ra trên cad sẽ đẹp được như bảng này: http://www.cadviet.com/upfiles/3/40304_binh_do_tnm_1.rar

    - Nên bỏ qua bước: chọn khoảng cách các text trong bảng, thay vào đó lisp sẽ tự động căn chỉnh bảng với khoảng cách giữa các hàng và cột như trong bảng trên. Hiện tại khoảng cách giữa các hàng là rất xa nhau.

    - Thêm 1 lựa chọn: chọn chiều cao chữ cho text xuất ra trong bảng.

    Nếu có thời gian hơn nữa bạn xử lý yêu cầu này giúp mình nữa nhé: http://www.cadviet.com/forum/index.php?showtopic=60191&pid=183421&st=0entry183421

    Thanks U nhé


  9. File đính kèm: http://www.cadviet.com/upfiles/3/40304_bangtoadobang.lsp

    Em làm quy hoạch phải thống kê tọa độ các điểm trên bản vẽ.

    Em có lisp này để lập bảng thống kê tọa độ các điểm.

    Tuy nhiên: tên điểm luôn phải nhập bằng tay.

    Nhờ các bác sửa lisp để khi nhập tên điểm: lisp có thể nhận 1 trong 2 lựa chọn: pick trực tiếp vào text tên điểm trên bản vẽ hoặc nhập bằng tay.

    Đồng thời, lisp có thêm lựa chọn chiều cao chữ cho các text được xuất ra trong bảng tọa độ.

    Em xin cám ơn các bác trước nhé!


  10. Trước tiên là 2file đính kèm thể hiện yêu cầu:

    file cad: http://www.cadviet.com/upfiles/3/40304_binh_do_tnm.rar

    file excel: http://www.cadviet.com/upfiles/3/40304_thong_ke_cao_do_ga_tnm.rar

    Mình làm thống kê thoát nước hạ tầng. Ngồi nhập cao độ từng ga một vào excel thấy mất công quá.

    Nên mình muốn nhờ các bạn giỏi về viết lisp viết giúp mình 1 lisp lập được bảng thống kê cao độ như sau:

    Trên bản vẽ có các text đã ghi chú rõ là: Tên ga - cao độ đỉnh ga - và cao độ đáy cống

    Lisp sẽ đưa ra các lựa chọn: (Chỉ cần pick vào các text trên bản vẽ theo đúng thứ tự lisp sẽ tự lập được bảng với các cột và hàng như trong bản excel đính kèm)

    1. Pick lần 1: Chọn tên ga: pick vào text "tên ga"

    2. Pick lần 2: Chọn H1: pick vào text " cao độ đỉnh ga"

    3. Pick lần 3: Chọn H2: pick vào text "cao độ đáy cống"

    Sau đó hết 1 lượt 3 lần pick trên, lisp sẽ liên tục lập bảng tự động quay vòng lần 2, lần 3........cho đến khi người vẽ kết thúc lệnh.

    Sau đó kết quả sẽ được xuất sang file đuôi .txt hoặc tốt nhất là file excel như đính kèm

    Mong được các mọi người giúp đỡ vì mình không biết viết lisp. Thanks!

    • Like 1

  11. các bác viết giúp em lisp như này nhé: trên bản vẽ có rất nhiều text là các số với nhiều giá trị khác nhau. Em cần lọc ra tất cả các số có giá trị lớn hơn( hoặc có cả lựa chọn : nhỏ hơn_do người dùng chọn lựa khi dùng lệnh) 1 giá trị cố định nào đó bằng cách nhập giá trị này vào khi dùng lệnh. ví dụ: em cần tìm tất cả các số lớn hơn 5.00, số 5 là do mình nhập vào.sau khi dùng lệnh xong bản vẽ sẽ hiển thị tất cả các giá trị vừa lọc được. thanks hiu các bác nhìu trước! :s_big: em đang rất cần......


  12. Bạn thử đoạn Code này xem :

    (defun c:ckc()
    (setq po1 (getpoint "\n Pick diem A :"))
    (setq po2 (getpoint po1 "\n Pick diem B :"))
    (setq S (distance po1 po2))
    (setq po3 (getpoint "\n Pick diem C :"))
    (while 
    (setq po4 (getpoint po3 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))
    (setq S (+ S (distance po3 po4)) po3 po4)
    )
    (alert (strcat "Tong S = " (rtos S)))
    (princ)
    )

    em vẽ bằng pl 1đoạn 100 rồi 1đoạn 200. dùng lisp CKC pick vào 3điểm mút của pline trên được kết quả S=100. Nhưng rõ ràng là độ dài pline trên là 300. Tại sao như thế bác nhỉ? Lisp này tiện ích khi tính tổng khoảng cách giữa các điểm riêng biệt. Nếu kết quả có lựa chọn chọn text để điền kết quả nữa thì tốt! Ah nhưng nếu dùng CKC của bài viết trước thì lại có kết quả chính xác. Lạ thế ko bít. hii


  13. bác Tue_NV có thể viết cho e 1 cái lisp mà có thể kéo dài đường hatch được ko? mỗi lần thay đổi khung của phần hatch thì bình thường là em phải xoá phần hatch cũ đi rồi mới chọn khung để hatch lại. vậy thì bác thử xem viết lisp nào mà có thể chọn phần khung mới để kéo dài hacth cũ cho lấp đầy khung mới. kiểu như lệnh extent kéo dài 1 đường thẳng tới 1đường thẳng khác ấy bác ah! thanks!


  14. muốn các text được chọn trở thành các Att thì dùng lệnh X (EXPLODE) là xong

    Có thể Lisp gdt trùng tên lệnh với 1 file Lisp nào đó trong máy của bạn chăng?

    Bạn thử đổi tên lệnh gdt trong file Lisp thành 1 tên khác xem sao

    cụ thể ở dòng đầu tiên :

    (defun c:gdt(/ oldim p1 frome cur toe ss ss2 tt S ans po cao te ente)

     

    Bạn thay chữ gdt thành 1 tên khác thử xem . Tue_NV test OK mà

    hjjj, em làm các bác khó chịu thiệt đó nhơ`. hjj. em đã thay tên lệnh, đổi mọi loại, cả thành "123" lun. vậy mà vẫn báo lỗi "; error: too many arguments" . thử cả sang máy của đồng nghiệp bên cạnh dùng cad2005 cũng vậy, lại báo 1 câu lỗi khác. hjj em pó tay thôi bác à!


  15. Đây là file .dwg đã xuất cao độ z lên bản vẽ theo các toạ độ có trong file .txt

     

    http://www.cadviet.com/upfiles/Drawing4.dwg

     

    Bạn xem có đúng ý bạn không nhé?

     

    Còn đây là file .xls -> chuyển từ file .txt qua

    http://www.cadviet.com/upfiles/Book4.xls

     

    Hy vọng đúng ý của bạn

     

    @bach1212 : Tue_NV kiểm tra lại không có lỗi. Mình sử dụng CAD2004 để Test. Bạn sử dụng CAD2007 để test phải không?

    Mình cũng không hiểu tại sao lại có sự khác biệt này nữa. Có 1 lần Tue_NV viết Lisp ra dùng CAD2004 để test thì OK còn bạn xuantran test trên CAD2007 thì lỗi. Không biết tại sao nữa? Có ai biết nguyên nhân này không?

    bach1212 dùng CAD2004 để kiẻm tra thử, lạ thật

    vâng! em dùng cad2007. bạn hoangson614 nói là dùng vẫn bình thường nhưng em thì...làm chán tay mỏi mắt vẫn báo lỗi như thế. pó toàn thân! hjj. bác pro cũng ko bít tại sao thì em... hix đành phải dùng lisp khác tính tổng dtích xong có kết quả trên command rùi ed lại text thui! hic, lâu lém bác ơi! huu :s_dead:

    em ko dùng cad2004 nhưng test trên cad2005 cũng ko đc lun bác ah!


  16. bác pro sửa lisp này júp em đc hôk ah? lisp điền cốt tự động.

    http://www.megaupload.com/?d=8XS5WYQF

    Lisp này đã đánh cốt rất tốt rùi, nhưng chỉ bắt đầu với cốt 00. nếu muốn bắt đầu với cốt là 12.3 chẳng hạn, em lại phải vào trong list sửa giá trị 0.000. rất mất công! em mong bác sửa lisp này để khi dùng lệnh " cot00" sẽ xuất hiện dòng nhắc là: nhập cao độ ban đầu, sau đó mới đến dòng nhắc: pick vào điểm cốt ban đầu. rùi tới lệnh " dc" , chỉ cần pick vào các điểm tiếp theo, giá trị cao độ sẽ đc cộng từ cao độ ban đầu với chênh cao giữa điểm đó với điểm làm cốt! thanks hiu nhìu nhìu! :s_dead: ah còn nữa chữ " SL " sau khi ghi kết quả ra ko biết là có ý nghĩa j? bác bỏ nó đi được ko ah!


  17. Chưa hiểu ý.

    cao độ X; Y; Z là cột nào? text là cột nào trong file bạn đã post?? Bạn nói rõ nhé

     

    @bach1212 : Tue_NV viết Lisp cho bạn đã test kỹ rồi. Bạn chạy lại thử nhé.

    Hoặc nếu chưa được bạn upload file của bạn lên đây để Tue_NV xem sao

    em đã thử rất nhìu lần nhưng vẫn ko được. lại làm fiền bác roài. em up lên ko đc, bác xem file em gửi ở đây na!

    http://www.megaupload.com/?d=892ZZK99 cám ơn bác! :s_dead:


  18. Bạn sử dụng đoạn code này xem sao :

    (defun c:gdt(/ oldim p1 frome cur toe ss ss2 tt S ans po cao te ente)
    (setq oldim (getvar "DimZin"))
    (setvar "DimZin" 0)
    (setvar "cmdecho" 0)
    (setq p1 (getpoint "\n Pick diem vao mien de lay dien tich : ") S 0 ss2 (ssadd))
    (While p1
    (setq frome (entlast));; 
    
    (command ".boundary" p1 "");; boundary
    (setq toe (entlast));; 
    
    (setq cur frome; khoi tao
    ss (ssadd)
    )
    (while (not (eq cur toe));; 
    (setq
    cur (entnext cur)
    ss (ssadd cur ss)
    )
    
    (command "area" "S" "O" ss "" "")
    (setq tt (getvar "area"))
    (setq S (+ S tt))
    )
    (command "area" "A" "O" "L" "" "")
    (setq tt (getvar "area"))
    (setq S (+ S (* tt 2))) 
    ;(Command "erase" ss "")
    (ch2 ss ss2)
    ;(sssetfirst ss2 ss2)
    (setq p1 (getpoint "\n Pick diem vao mien de lay dien tich : "))
    
    )
    (initget "T C")
    (setq ans (getkword "\n Chon Text  de thay gia tri dien tich / chon diem chen  de ghi dien tich  :"))
    (if (or (= ans "c") (= ans "C"))
    (progn
    (setq po (getpoint "\n Chon diem chen de ghi dien tich :"))
    (setq cao (getdist "\n Nhap chieu cao chu : "))
    (wtxt (rtos S 2 2) po 0 cao)
    (command "erase" ss2 "")
    )
    )
    (if (or (= ans "t") (= ans "T"))
    (progn
    (setq te (car(entsel "\n Chon Text de thay gia tri dien tich ")))
    (setq ente (entget te))
    (setq ente (subst(cons 1 (rtos S 2 2)) (assoc 1 ente) ente))
    (entmod ente)
    (command "erase" ss2 "")
    )
    )
    (setvar "DimZin" oldim)
    (Princ)
    )
    ;
    ;
    (defun ch2(ss1 ss2 / i n)
    (setq i 0 n (sslength ss1))
    (while (< i n)
    (setq ss2 (ssadd (ssname ss1 i) ss2))
    (setq i (1+ i))
    )
    (sssetfirst ss2 ss2)
    )
    ;
    (defun wtxt (txt p ang h / sty)
    (setq sty (getvar "textstyle"))
    (entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 11 p) 
    (cons 72 2) (cons 73 2) (cons 50 ang) (cons 40 h) (cons 41 0.8))
    )
    )
    

    Lisp tính được cả trong trường hợp n hình khoét lỗ và không khoét lỗ

    Bác ơi, em.....hix, lisp này bác đã dùng đc chưa ah? Em pick vào vùng đầu tiên thì báo lỗi thế này: ; "error: bad argument type: lselsetp nil". Bác xem lại rùi sửa júp em đc hôk ah? Cám ơn bác.Bác jữ sk để viết nhìu nhìu lisp hay cho bọn em na! hjj


  19. Bạn có thể post yêu cầu về autolisp ở topic này.

    Bác ơi! trên diễn đàn đã có lisp nào: tính diện tích nhiều vùng chỉ bằng việc pick vào từng vùng được chọn, cộng diện tích lại, rồi xuất ra kết quả bằng 2lựa chọn: là thay vào 1text có sẵn, 2là chọn điểm để ghi diện tích tổng đó ra? em tìm mãi trên diễn đàn mà ko thấy có. hjjj. nếu chưa có bác pro viết cho e 1 cái được hôk ah? thanks kiu bác nhìu. cái này em dùng rất nhìu mà toàn làm thủ công, mệt quá!

×