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

[Nhờ Sửa Lisp] Thêm Tỉ Lệ Vẽ Vào Lisp Đo Chiều Dài Và Điện Tích

Các bài được khuyến nghị

Mình tìm trên mạng được lisp này  vừa đo được tổng chiều dài, vừa chọn được đối tượng để đo diện tích và gán giá trị vào một text sẵn có. Nhưng nhược điểm của Lisp này là không có lựa chọn tỷ lệ bản vẽ trước khi tính toán.

http://www.cadviet.com/upfiles/7/80905_lengtharea_ae_1.lsp

 

Còn lisp này thì chọn được tỉ lệ nhưng mình không thích cách pick điểm để chọn vùng cần tính diện tích này lắm.

http://www.cadviet.com/upfiles/7/80905_tinh_dien_tichvv_1.lsp

 

Vì vậy nhờ các pro thêm tính năng của lisp thứ 2 (là chọn tỉ lệ trước khi chọn đối tượng) vào lisp thứ nhất hộ mình với.

Chọn tỉ lệ chỉ chọn 1 lần duy nhất giống lisp thứ 2 thôi chứ không phải cứ mỗi lần chọn lệnh là phải nhập lại tỉ lệ.

 

Cám ơn các Pro rất nhiều!

  • Vote giảm 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chắc bạn phải đi học một lớp lisp cơ bản thôi :)  Những yêu cầu này không khó, tuy nhiên lại trở thành khó với những người quen dùng sẵn. Nếu có thời gian, bạn nên nghiên cứu thử 1 tí món này, nó cũng hay mà :)
P/s : k fix giúp bạn ngay đc nên có mấy lời chém, bạn đừng giận
 

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Thì mình không biết về lisp nên mới nhờ.

Chứ giờ mò mẫm lisp từ đầu thì cũng mất 1 tháng là ít.

Bác nào biết về lisp thì bớt chút thời gian chỉnh sửa lại để mọi người dùng chung.

Cám ơn nhiều.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Có bác nào Pro vào giúp đỡ với, đăng bài lên 2 tháng rồi mà không có ai trả lời giúp!

Diễn đàn lâu năm thế này mà không gặp được cao nhân nào?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

+ 2 tháng đủ để bạn học được kha khá lập trình lisp, thậm chí còn tự viết được chương trình theo nhu cầu của bạn nữa cơ :v :v

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Code cho bạn:

< Bài của bạn không có ai trả lời vì mọi người đã phải trả  lời rất nhiều bài viết tương tự như thế này rồi, vậy nên nếu có thời gian thì bạn học lisp 1 tí, không khó mà lại khá hay )

(DEFUN C:AE 
  ( / ss la rv i tv op en)
  (or ae.tyle (setq ae.tyle 100))
  (setq ae.tyle (cond ((getreal (strcat "\nNhap ty le ban ve: 1/< " (rtos ae.tyle 2 0) " >:")))(ae.tyle)))
   (while (not ss) 
          (princ "\nPick object on the required layers") 
          (setq ss (ssget)))
       
    (initget "Length Area")
         (setq rv (getkword "\nWould you like to measure L/<A> : ")) 
      
   (and (not rv) 
        (setq rv "Area")) 
        
    (setq la (cdr (assoc 8 (entget (ssname ss 0)))) 
         i (sslength ss)
         tv 0 
         op 0) 
   (while (not (minusp (setq i (1- i)))) 
          (setq en (ssname ss i)) 
          (command "_.AREA" "_E" en) 
          (cond ((= rv "Length") 
                 (setq tv (+ tv (* (getvar "PERIMETER") ae.tyle ))))
         (T 
                 (setq tv (+ tv (* (getvar "AREA") ae.tyle ae.tyle))) 
                 (if (/= (logand (cdr (assoc 70 (entget en))) 1) 1) 
                     (setq op (1+ op)))))) 

   (princ (strcat "\nTotal " rv "  = " (rtos tv 2 3) 
                  " in " (itoa (sslength ss)) " polylines\n" 
                  (if (/= rv "Length") 
                      (strcat (itoa op) " with open polylines") ""))) 
(SETVAR "CMDECHO" 0)
  (princ (strcat "\nGia tri " rv " tinh duoc : " (rtos tv)))
(terpri)
   (setq s1 (entget (car (entsel "Chon Text ghi gia tri : "))))
   (setq otext (assoc 1 s1))
   (setq ot (cdr otext))
   (setq ot (read ot))
   (setq nt (cons 1 (strcat (rtos tv 2 2))))
   (entmod (subst nt otext s1))
(command "luprec" "2")
(setq s1 (ssget))
(command"chprop" "p" "" "c" 6 "")
(prin1))

Chỉnh sửa theo Danh Cong
Chỉnh sửa theo ý kiến bác #Doan Van Ha
  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

@DanhCong: 2 dòng dưới đây sai 3 chỗ:

                 (setq tv (* (+ tv (getvar "PERIMETER")) ae.tyle)))

                 (setq tv (* (+ tv (getvar "AREA")) ae.tyle))

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

^^ Chết thật, cháu sai thứ tự. Do trên cad cháu kiểm tra với mỗi 1 hình nên không nhận ra. Cháu sửa có 2 lỗi. Vậy lỗi thứ 3 là lỗi nào nhỉ, bác #Ha gợi ý nốt giùm cháu với ạ. :)

(setq tv (+ tv (* (getvar "PERIMETER") ae.tyle))))

(setq tv (+ tv (* (getvar "AREA") ae.tyle ae.tyle)))

 

Chỉnh sửa theo Danh Cong
Sửa theo ý kiến lần 2.
  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Trao đổi tí:

Cái anh ti lệ này cũng hay lằng nhằng.

Thông thường bản vẽ chỗ mình cài vào biến DIMLFAC để tiện ghi kích thước luôn. Đồng thời  cho DIMLFAC hiện ở dòng trạng thái, liếc nhìn xuống góc trái là biết mình đang ở tỉ lệ nào cho chắc ăn mà vẽ.

Để tiện muốn thay đổi tỉ lệ 1/500 chẳng hạn mình oánh 500 rồi enter.

Trong một bản vẽ chỗ mình rât nhiều hình, mỗi hình vẽ một tỉ lệ khác nhau

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×