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

Lisp điền cao độ bị lỗi!!!

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

e có đoạn lisp điền cao độ trắc ngang nhưng không hiểu sao không sử dụng được, mong các huynh sửa giúp

 

(defun c:goc ()

(setvar "cmdecho" 0)

;(setq osm (getvar "osmode"))

(if (= sc nil)(setq sc (getreal (strcat"\nChon ty le ve (=kt ve/kt Autocad):"))))

(prompt "\n*****Chu y: Ty le hien tai la*****:")(princ sc)

;(if (/= sc2 nil)(setq sc sc2))

;(command ".zoom" "e")

;(setq sspl (SSGET "c" '(10.5 20.25) '(10.5 27.5) (LIST(CONS 0 "lwpolyline"))));su dung khi ban ve co 1 cn o toa do co dinh

;(if (= th nil) (setq th (ssget "w" '(10.5 19.25 0) '(11.5 18.00 0) (list(cons 0 "TEXT")))))

;(command "zoom" "p")

(if (and (= a nil)(/= sspl nil))(setq a (cdr(assoc 10 (entget (ssname sspl 0))))))

(IF (= a nil)

(setq a (Getpoint "\n Chon mot diem lam chuan (co cao do):"))

(progn

(setq kitu nil)

(initget "Co Khong")

(setq kitu (getkword "\n Ban co chon lai diem chuan khong?[Co/Khong]:"))

(If (= kitu "Co")(setq a (Getpoint "\n Chon lai diem lam chuan (co cao do):")))

)

)

 

;(if (and(= nil g)(/= nil th)) (setq g (atof (cdr (ASSOC 1 (ENTGET (SSNAME th 0)))))))

(IF (= nil g)

(progn

(prompt "Khong co cao do tai vi tri can tim!")

(setq g (Getreal "\n Nhap cao do diem chuan [bang ban phim/Chon tren man hinh]:" ))

(if (= nil g)

(progn

(setq sscd (entsel "\n Moi ban chon cao do tren man hinh:"))

(setq g (atof (cdr (assoc 1 (entget (car sscd))))))

(prompt (strcat "\n Cao do da chon:<"(rtos g 2 3) ">:"))

)

)

)

(If(= kitu "Co")

(progn

(setq g (Getreal "\n Nhap lai cao do diem chuan [bang ban phim/Chon tren man hinh]:" ))

(if (= nil g)

(progn

(setq sscd (entsel "\n Moi ban chon lai cao do tren man hinh:"))

(setq g (atof (cdr (assoc 1 (entget (car sscd))))))

(prompt (strcat "\n Cao do da chon:<"(rtos g 2 3) ">:"))

)

)

)

)

)

)

  • 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

Bận nên không có thời gian xem lại giúp bạn lisp trên. nhưng có cái này share cho bạn.

Lisp này dùng để ghi cao độ trên trắc ngang và khá đẹp với các trắc ngang chạy bằng nova. có thể chạy được trên cad14 vô tư :rolleyes:

(defun DXFcn (code elist)
 (cdr (assoc code elist))
)
;============================================================
(prompt"\n[Cmd:CDX] - GHI CAO DO DIEM TREN TRAC NGANG by Thaistreetz - huuthais@yahoo.com\n")
;============================================================
(defun c:Cdx (); / DZ pt y ptside ang OT sc1 scale tx ty tx1 ty1)
(command "Undo" "BEGIN")
(if (not h) (setq h 1))
(if (= tx nil) (setq tx 1))
(if (= ty nil) (setq ty 1))
(setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))
        tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/")) 
        ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/")))
(if h1 (setq h h1))
(if tx1 (setq tx tx1))
(if ty1 (setq ty ty1))
(setq ATLAST (getvar "Attreq"))
(setq CMLAST (getvar "cmdecho"))
(setq OSLAST (getvar "OSMODE"))
(setq DZ (getvar "DIMZIN"))
(setq OT (getvar "ORTHOMODE"))
(setvar "ORTHOMODE" 0)
(setvar "cmdecho" 0)
(command "osmode" 99)
(setq pt0 (osnap (getpoint "Diem tim TN tu nhien") "end")) (print)
(setq x0 (car pt0) y0 (cadr pt0))
(setq ed (entget (car (entsel "\nChon cao do tim: "))))
(setq H0 (read (DXFcn 1 ed)))    
(command "osmode" 15359) 
(setq pt (getpoint "\nDiem chen: "))
(While (/= pt nil)
(command "osmode" 0)
(Progn
(setq ptside (getpoint "\nPhia chen:" pt)
ang (angle pt ptside))
(setq y (- (cadr pt) y0 (- H0)))
(setq x (- (car pt) x0))
(setvar "DIMZIN" 0)         
(cond ((> x 0) (setq x (strcat "" (rtos (* x tx) 2 2))))
        ((< x 0) (setq x (rtos (abs (* x tx)) 2 2)))
        ((= x 0) (setq x "0.00"))         )
(cond ((> y 0) (setq y (strcat "+" (rtos (* y ty) 2 2))))
        ((< y 0) (setq y (rtos (* y ty) 2 2)))
        ((= y 0) (setq y "%%p0.00")))
;(setq x (ustr 0 "Khoang cach: " x T))
;(setq y (ustr 0 "Cao do: " y T))
(progn
(if (AND (>= ang 0) (< ang (/ pi 2)))
(setq 	pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (/ pi 2)) (< ang pi))
(setq 	pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang pi) (< ang (+ pi (/ pi 2))))
(setq 	pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.6 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi)))
(setq 	pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
);progn
(command "pline" pt "w" 0 (* 0.45 h) pt3 "w" 0 0 pt4 pt5 ""
 "text" "m" pt6 h 0 y
 "text" "m" pt7 h 0 x)
(setvar "DIMZIN" DZ)
(command "osmode" 15359)
(setq pt (getpoint "\nDiem chen: "))
);progn
);while 
(setvar "OSMODE" OSLAST)
(setvar "ORTHOMODE" OT)
(setvar "cmdecho" CMLAST)
(prompt"\n[GHI CAO DO TRAC NGANG] by Thaistreetz - huuthais@yahoo.com\n")
(command "Undo" "End")
(princ)
);end

- Chọn kích thước của text muốn ghi cao độ (nên chọn bằng hoặc nhỏ hơn 1 chút so với chiều cao các text cao độ trên trắc ngang của bạn)

- Chọn tỷ lệ vẽ của trắc ngang (Với Nova thì thường là 1:1 nên mình mặc định lisp sẽ lấy giá trị tỷ lệ X là 1/1 và Y là 1/1, nếu tỷ lệ khác thì bạn có thể nhập lại)

- Chọn điểm tim trắc ngang (điểm tim đường)

- Chọn cao độ của tim đường (pick chuột vào text cao độ của tim)

- Chọn các điểm cần tra cao độ.

- Phía chèn text cao độ: bạn có thể chèn cao độ theo 4 hướng. thử sẽ bít :(

  • Like 2
  • Vote tăng 5

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
Bận nên không có thời gian xem lại giúp bạn lisp trên. nhưng có cái này share cho bạn.

Lisp này dùng để ghi cao độ trên trắc ngang và khá đẹp với các trắc ngang chạy bằng nova. có thể chạy được trên cad14 vô tư :rolleyes:

(defun DXFcn (code elist)
 (cdr (assoc code elist))
)
;============================================================
(prompt"\n[Cmd:CDX] - GHI CAO DO DIEM TREN TRAC NGANG by Thaistreetz - huuthais@yahoo.com\n")
;============================================================
(defun c:Cdx (); / DZ pt y ptside ang OT sc1 scale tx ty tx1 ty1)
(command "Undo" "BEGIN")
(if (not h) (setq h 1))
(if (= tx nil) (setq tx 1))
(if (= ty nil) (setq ty 1))
(setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))
        tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/")) 
        ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/")))
(if h1 (setq h h1))
(if tx1 (setq tx tx1))
(if ty1 (setq ty ty1))
(setq ATLAST (getvar "Attreq"))
(setq CMLAST (getvar "cmdecho"))
(setq OSLAST (getvar "OSMODE"))
(setq DZ (getvar "DIMZIN"))
(setq OT (getvar "ORTHOMODE"))
(setvar "ORTHOMODE" 0)
(setvar "cmdecho" 0)
(command "osmode" 99)
(setq pt0 (osnap (getpoint "Diem tim TN tu nhien") "end")) (print)
(setq x0 (car pt0) y0 (cadr pt0))
(setq ed (entget (car (entsel "\nChon cao do tim: "))))
(setq H0 (read (DXFcn 1 ed)))    
(command "osmode" 15359) 
(setq pt (getpoint "\nDiem chen: "))
(While (/= pt nil)
(command "osmode" 0)
(Progn
(setq ptside (getpoint "\nPhia chen:" pt)
ang (angle pt ptside))
(setq y (- (cadr pt) y0 (- H0)))
(setq x (- (car pt) x0))
(setvar "DIMZIN" 0)         
(cond ((> x 0) (setq x (strcat "" (rtos (* x tx) 2 2))))
        ((< x 0) (setq x (rtos (abs (* x tx)) 2 2)))
        ((= x 0) (setq x "0.00"))         )
(cond ((> y 0) (setq y (strcat "+" (rtos (* y ty) 2 2))))
        ((< y 0) (setq y (rtos (* y ty) 2 2)))
        ((= y 0) (setq y "%%p0.00")))
;(setq x (ustr 0 "Khoang cach: " x T))
;(setq y (ustr 0 "Cao do: " y T))
(progn
(if (AND (>= ang 0) (< ang (/ pi 2)))
(setq 	pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (/ pi 2)) (< ang pi))
(setq 	pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang pi) (< ang (+ pi (/ pi 2))))
(setq 	pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.6 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi)))
(setq 	pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
);progn
(command "pline" pt "w" 0 (* 0.45 h) pt3 "w" 0 0 pt4 pt5 ""
 "text" "m" pt6 h 0 y
 "text" "m" pt7 h 0 x)
(setvar "DIMZIN" DZ)
(command "osmode" 15359)
(setq pt (getpoint "\nDiem chen: "))
);progn
);while 
(setvar "OSMODE" OSLAST)
(setvar "ORTHOMODE" OT)
(setvar "cmdecho" CMLAST)
(prompt"\n[GHI CAO DO TRAC NGANG] by Thaistreetz - huuthais@yahoo.com\n")
(command "Undo" "End")
(princ)
);end

- Chọn kích thước của text muốn ghi cao độ (nên chọn bằng hoặc nhỏ hơn 1 chút so với chiều cao các text cao độ trên trắc ngang của bạn)

- Chọn tỷ lệ vẽ của trắc ngang (Với Nova thì thường là 1:1 nên mình mặc định lisp sẽ lấy giá trị tỷ lệ X là 1/1 và Y là 1/1, nếu tỷ lệ khác thì bạn có thể nhập lại)

- Chọn điểm tim trắc ngang (điểm tim đường)

- Chọn cao độ của tim đường (pick chuột vào text cao độ của tim)

- Chọn các điểm cần tra cao độ.

- Phía chèn text cao độ: bạn có thể chèn cao độ theo 4 hướng. thử sẽ bít :(

Bác Thaistreet à, Lisp của bác rất hay, lisp này dùng để tra cao độ thì ổn rồi, nhưng bác có thể giúp e vấn đề này không, vì nhiều lúc e phải sửa trắc ngang bằng Cad (chứ không sửa trong Nova) bằng cách Stretch đường tự nhiên tại các k/c lẻ nên tất nhiên cao độ cũng thay đổi, giờ e đang làm thủ công băng cách Di rồi lại +,-.. để tính lại cao độ rồi lại edit...hic!Có cách nào có thể tự động hoá việc này không, mong các bác giúp đỡ. ý tưởng của e có thể là :

- Chọn cao độ tại tim đường làm chuẩn

- sau đó pick vào các điểm mình muốn chèn(Các điểm mình đã thay đổi cao độ)

- Chọn text mình muốn thay thế(Là text cao độ cũ)

P/s : E chỉ thay đổi cao độ thôi, còn khoảng cách lẻ vẫn giữ nguyên nên ko cần quan tâm đến k/c lẻ

Rất mong nhận được sự giúp đỡ của các bác, thanks alot!!

  • 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

Xin lỗi cả nhà, vì mình không biết cách gửi bài mới lên diễn đàn nên phải dùng hạ sách này.

Mình đang dùng lisp ghi cao độ (lệnh CDX) mình thấy lisp này rất hay, nhưng nếu có thêm chức năng xuất sang excel nữa thì quá tuyệt. Nhân đây mình xin nhờ các cao thủ giúp mình được không?

1. Dùng lisp (CDX) như bình thường

2. Khi mình Pick vào điểm nào thì nó tự động liên kết và xuất ra excel cao độ, khoảng cách luôn hoặc tạo bảng giống như lisp tính diện tích của bác Thaistrees viết thì hay biết mấy, đỡ phải dò lại và nhập tay mất công.

Mong các cao thủ quan tâm giúp đỡ. đây là lisp mình đang dùnghttp://www.cadviet.c...57480_cdx_1.lsp

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ác cao thủ giúp hậu bối với!

Hề hề hề,

Muốn giúp thì bạn phải gửi cả bản vẽ trước và sau khi chạy lisp lên thì mọi người mới xem và test được. mặt khác bạn cũng cần cho biết cấu trúc của file kết quả chứ.

Nếu không thì không phải ai cũng hiểu đúng được cái bạn cần đâu.

  • 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

Đúng rồi mình quên mất., đây là file mình đang làm http://www.cadviet.c...80_tnkm2km3.rar. Mong bác Bình và các cao thủ giúp đỡ, cảm ơn các bác! còn đây là lisp ( CDX) mình đang dùnghttp://www.cadviet.c...57480_cdx_2.lsp

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ảm ơn bạn, nhưng mình làm thế rồi vẫn không được. Mong các cao thủ quan tâm! đây là file mình đang làm http://www.cadviet.c...80_tnkm2km3.rar. Mong bác Bình và các cao thủ giúp đỡ, cảm ơn các bác! còn đây là lisp ( CDX) mình đang dùnghttp://www.cadviet.c...57480_cdx_2.lsp

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

Xin lỗi cả nhà, vì mình không biết cách gửi bài mới lên diễn đàn nên phải dùng hạ sách này.

Mình đang dùng lisp ghi cao độ (lệnh CDX) mình thấy lisp này rất hay, nhưng nếu có thêm chức năng xuất sang excel nữa thì quá tuyệt. Nhân đây mình xin nhờ các cao thủ giúp mình được không?

1. Dùng lisp (CDX) như bình thường

2. Khi mình Pick vào điểm nào thì nó tự động liên kết và xuất ra excel cao độ, khoảng cách luôn hoặc tạo bảng giống như lisp tính diện tích của bác Thaistrees viết thì hay biết mấy, đỡ phải dò lại và nhập tay mất công.

Mong các cao thủ quan tâm giúp đỡ. đây là lisp mình đang dùnghttp://www.cadviet.c...57480_cdx_1.lsp

http://www.cadviet.c...80_tnkm2km3.rar. Mong bác Bình và các cao thủ giúp đỡ, cảm ơn các bác!

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

Khó quá hay sao, cao thủ đâu hết rùi!

Hề hề hề,

1/- Cao thủ hay thấp thủ mà bạn cứ đòi có trả lời ngay thì có nhẽ sẽ khó mà toại nguyện được. Mọi người ai cũng có việc để làm chứ không phải chỉ có mỗi việc ngồi chờ để trả lời bạn cho kịp thời.

2/- Khó hay không khó thì bạn cũng cứ phải chờ có người đủ thời gian rảnh để nghiên cứu giúp bạn chứ không phải bạn cứ giở trò khích bác như vậy là sẽ đạt được nguyện vọng đâu.

3/- Mọi người cũng như bạn đều phải ưu tiên công việc kiếm cơm của họ trước rồi mới nói tới chuyện tham gia vào diễn đàn. Không có cơm thì chả thể sống mà nói chuyện giúp ai cả đâu.

4/- Đây có thể là cái bạn cần mà cũng có thể bạn chả cần nữa. Mình đã sửa theo thiển ý của mình dựa trên yêu cầu của bạn, Nếu thấy dùng được thì bạn cứ dùng, còn nếu thấy chưa được thì cứ để đó, chắc sẽ có người cần. Cái chi chưa được thì hãy post lên, nếu rảnh mình sẽ sửa tiếp.

http://www.cadviet.com/upfiles/3/5194_57480_cdx_1.lsp

 


;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=15836
(defun DXFcn (code elist)
 (cdr (assoc code elist))
)
;============================================================
(prompt"\n[Cmd:CDX] - GHI CAO DO DIEM TREN TRAC NGANG by Thaistreetz - huuthais@yahoo.com\n")
;============================================================
(defun c:Cdx (); / DZ pt y ptside ang OT sc1 scale tx ty tx1 ty1 p0 p1 p2 p3 p4 p5 p6 p7 fn f)
(command "Undo" "BEGIN")
(if (not h) (setq h 1))
(if (= tx nil) (setq tx 1))
(if (= ty nil) (setq ty 1))
(setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))
        tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/")) 
        ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/")))
(if h1 (setq h h1))
(if tx1 (setq tx tx1))
(if ty1 (setq ty ty1))
(setq ATLAST (getvar "Attreq"))
(setq CMLAST (getvar "cmdecho"))
(setq OSLAST (getvar "OSMODE"))
(setq DZ (getvar "DIMZIN"))
(setq OT (getvar "ORTHOMODE"))
(setvar "ORTHOMODE" 0)
(setvar "cmdecho" 0)
(command "osmode" 99)
(setq pt0 (osnap (getpoint "Diem tim TN tu nhien") "end")) (print)
(setq x0 (car pt0) y0 (cadr pt0))
(setq ed (entget (car (entsel "\nChon cao do tim: "))))
(setq H0 (read (DXFcn 1 ed)))    
(command "osmode" 15359) 

(setq p0 (getpoint "\n Chon diem dat bang tong hop"))
(styleset)
(command "osmode" 0) 
(command "text" "j" "mc" (list (+ (car p0) (* 25 h)) (+ (cadr p0) (* 2 h))) (* 2 h) 0 "BANG TONG HOP")
(command "text" "j" "mc" (list (+ (car p0) (* 5 h)) (- (cadr p0) (* 1.5 h))) h 0 "STT diem")
(command "text" "j" "mc" (list (+ (car p0) (* 20 h)) (- (cadr p0) (* 1.5 h))) h 0 "K.cach toi tim (m)")
(command "text" "j" "mc" (list (+ (car p0) (* 40 h)) (- (cadr p0) (* 1.5 h))) h 0 "Cao do (m)")
(setq p1 (list (+ (car p0) (* 10 h)) (cadr p0))
         p2 (polar p0 0 (* 30 h))
         p3 (polar p0 0 (* 50 h))
         p4 (polar p3 (* 1.5 pi) (* 3 h))
         p5 (polar p2 (* 1.5 pi) (* 3 h))
         p6 (polar p1 (* 1.5 pi) (* 3 h))
         p7 (polar p0 (* 1.5 pi) (* 3 h))
)
(command "pline" p0 p3 p4 p7 "c")
(command "pline" p1 p6 "")
(command "pline" p2 p5 "")
(setq p0 p7)
(command "osmode" 15359) 
(setq fn (getfiled "Select a File" "" "csv" 1))
(setq f (open fn "w"))
(write-line " STT diem, K.cach toi tim (m), Cao do (m)" f)
(setq i 1)

(setq pt (getpoint "\nDiem chen: "))
(While (/= pt nil)
(command "osmode" 0)
(Progn
(setq ptside (getpoint "\nPhia chen:" pt)
ang (angle pt ptside))
(setq y (- (cadr pt) y0 (- H0)))
(setq x (- (car pt) x0))
(setvar "DIMZIN" 0)         
(cond ((> x 0) (setq x (strcat "" (rtos (* x tx) 2 2))))
        ((< x 0) (setq x (rtos (abs (* x tx)) 2 2)))
        ((= x 0) (setq x "0.00"))         )
(cond ((> y 0) (setq y (strcat "+" (rtos (* y ty) 2 2))))
        ((< y 0) (setq y (rtos (* y ty) 2 2)))
        ((= y 0) (setq y "%%p0.00")))
;;;;(setq x (ustr 0 "Khoang cach: " x T))
;;;;(setq y (ustr 0 "Cao do: " y T))
(progn
(if (AND (>= ang 0) (< ang (/ pi 2)))
(setq  pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (/ pi 2)) (< ang pi))
(setq  pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang pi) (< ang (+ pi (/ pi 2))))
(setq  pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (- (car pt4) (* 2.6 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
(if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi)))
(setq  pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
);progn
(command "pline" pt "w" 0 (* 0.45 h) pt3 "w" 0 0 pt4 pt5 ""
"text" "m" pt6 h 0 y
"text" "m" pt7 h 0 x)
(setvar "DIMZIN" DZ)
(command "osmode" 15359)

);progn

(command "osmode" 0)
(command "text" "j" "mc" (list (+ (car p0) (* 5 h)) (- (cadr p0) (* 1.5 h))) h 0 (rtos i 2 0))
(command "text" "j" "mc" (list (+ (car p0) (* 20 h)) (- (cadr p0) (* 1.5 h))) h 0 x)
(command "text" "j" "mc" (list (+ (car p0) (* 40 h)) (- (cadr p0) (* 1.5 h))) h 0 y)
(setq p1 (list (+ (car p0) (* 10 h)) (cadr p0))
         p2 (polar p0 0 (* 30 h))
         p3 (polar p0 0 (* 50 h))
         p4 (polar p3 (* 1.5 pi) (* 3 h))
         p5 (polar p2 (* 1.5 pi) (* 3 h))
         p6 (polar p1 (* 1.5 pi) (* 3 h))
         p7 (polar p0 (* 1.5 pi) (* 3 h))
)
(command "pline" p0 p3 p4 p7 "c")
(command "pline" p1 p6 "")
(command "pline" p2 p5 "")
(setq p0 p7)
(write-line (strcat (rtos i 2 0) (chr 44) x (chr 44) y) f)
(setq i (1+ i))
(command "osmode" 15359)
(setq pt (getpoint "\nDiem chen: "))

);while 
(close f)
(setvar "OSMODE" OSLAST)
(setvar "ORTHOMODE" OT)
(setvar "cmdecho" CMLAST)
(prompt"\n[GHI CAO DO TRAC NGANG] by Thaistreetz - huuthais@yahoo.com\n")
(command "Undo" "End")
(princ)
);end

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun styleset (/ h0 stl)
(setq stl (getvar "textstyle")
        h0 (getvar "textsize"))
(if (/= h0 0) (command "style" stl "" 0 "" "" "" "" ""))
) 

 

Chúc bạn vui khi tham gia diễn đàn

  • Like 1
  • Vote tăng 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

Ôi hay quá, nhưng lisp còn có nhược điểm là mỗi khi đánh lệnh là nó hỏi tỷ lệ, cao chữ. Bác có thể sửa làm so chỉ hỏi cao chữ với tỷ lệ bản vẽ có 1 lần đầu sau khi đánh lệnh, với khi xuất sang cel thì nó không đúng với số liệu trong bảng được tạo trong cad. Cảm ơn bác Bình và ban quản trị diễn đàn. Chúc các bác sứ khỏe!

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

Ôi hay quá, nhưng lisp còn có nhược điểm là mỗi khi đánh lệnh là nó hỏi tỷ lệ, cao chữ. Bác có thể sửa làm so chỉ hỏi cao chữ với tỷ lệ bản vẽ có 1 lần đầu sau khi đánh lệnh, với khi xuất sang cel thì nó không đúng với số liệu trong bảng được tạo trong cad. Cảm ơn bác Bình và ban quản trị diễn đàn. Chúc các bác sứ khỏe!

Hề hề hề,

1/- Cái nhược điểm đó là do chính cái lisp mà bạn đã khen là dùng tốt gửi lên, hoàn toàn không có yêu cầu gì về việc chỉnh sửa điều đó cả. Do vậy chớ có kêu ca gì về điều đó. Hãy tự rút kinh nghiệm cho mình về cách trình bày vấn đề.

Việc chỉnh sửa điều đó không khó nhưng mình không làm để bạn hiểu rằng đừng coi diễn đàn là cái nơi bạn muốn gì phải được cái đó.

2/- Mình thấy số liệu xuất sang Excel hoàn toàn trùng khớp với số liệu trên bảng tổng hợp. Không hiểu cái không đúng của bạn có nghĩa gì??? Hãy gửi cái đúng và không đúng lên may ra sẽ có lời giải đáp.

Hề hề hề,

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

Thanhk bác Bình nhiều, mình sẽ rút kinh nghiệm. Nhưng mình không nghĩ" Diễn đàn là nơi.. như bác nói". Vì mình thấy diễn đàn hay và bổ ích lại có mục viết lisp theo yêu cầu. Nên mình mới dám nhờ các bác, nói thật nhờ mà các bác đã giúp như thế thì cũng tốt lắm rồi, còn mong cái hoàn thiện hơn thì ai chả muốn phải không bác? Chúc các bác Năm mới sức khỏe và thành công. Có cách nào để có dịp thank trực tiếp các bác không nhỉ?

  • 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

Thanhk bác Bình nhiều, mình sẽ rút kinh nghiệm. Nhưng mình không nghĩ" Diễn đàn là nơi.. như bác nói". Vì mình thấy diễn đàn hay và bổ ích lại có mục viết lisp theo yêu cầu. Nên mình mới dám nhờ các bác, nói thật nhờ mà các bác đã giúp như thế thì cũng tốt lắm rồi, còn mong cái hoàn thiện hơn thì ai chả muốn phải không bác? Chúc các bác Năm mới sức khỏe và thành công. Có cách nào để có dịp thank trực tiếp các bác không nhỉ?

Hề hề hề,>

Cảm ơn bạn đã biết tiếp thu ý kiến đóng góp của mọi người

 

Về yêu cầu bổ sung của bạn, bạn có thể tự làm lấy được bằng cách như sau:

 

1/- Thêm dòng code :(if (or (= h1 nil) (= tx1 nil) (= ty1 nil)) vào ngay phía trên đoạn code:

 

(setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))

tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/"))

ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/")))

 

2/- Thêm một dấu ngoặc đóng hàm if vào cuối dòng code : ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/"))) để trở thành:

ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/"))) )

 

Bạn cần lưu ý rằng sau khi sửa như vầy thì trong một phiên làm việc nếu bạn muốn thay đổi các giá trị cao độ h, tx, ty thì bạn phải set các biến h1, tx1, ty1 về nil trước khi chạy lisp.

 

Còn về cái yêu cầu giống, có nhẽ bạn muốn nói tới cái dấu + trước các con số về cao độ trong bảng Excel. Điều này là do Excel mặc định hiểu các text này là các con số chứ không phải text. Bạn có thể sửa lại trong excel bằng hàm concatenate dễ dàng mà. Lisp không can thiệp vào cái sự hiểu ấy được.

Chúc bạn vui và lưu ý các quy định khi tham gia diễn đàn.

  • Vote tăng 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

Hề hề hề,>

Cảm ơn bạn đã biết tiếp thu ý kiến đóng góp của mọi người

 

Về yêu cầu bổ sung của bạn, bạn có thể tự làm lấy được bằng cách như sau:

 

1/- Thêm dòng code :(if (or (= h1 nil) (= tx1 nil) (= ty1 nil)) vào ngay phía trên đoạn code:

 

(setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))

tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/"))

ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/")))

 

2/- Thêm một dấu ngoặc đóng hàm if vào cuối dòng code : ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/"))) để trở thành:

ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/"))) )

 

Bạn cần lưu ý rằng sau khi sửa như vầy thì trong một phiên làm việc nếu bạn muốn thay đổi các giá trị cao độ h, tx, ty thì bạn phải set các biến h1, tx1, ty1 về nil trước khi chạy lisp.

 

Còn về cái yêu cầu giống, có nhẽ bạn muốn nói tới cái dấu + trước các con số về cao độ trong bảng Excel. Điều này là do Excel mặc định hiểu các text này là các con số chứ không phải text. Bạn có thể sửa lại trong excel bằng hàm concatenate dễ dàng mà. Lisp không can thiệp vào cái sự hiểu ấy được.

Chúc bạn vui và lưu ý các quy định khi tham gia diễn đàn.

Qủa thực không biết nói thế nào để cảm ơn Bác Bình! Các Bác thật thấu tình đạt lý, không những viết giúp mà còn chỉ giáo rất tận tình.

Còn vấn đề về file cel, khi xuất ra nó không sai, nhưng các số trong 1 hàng khi vào cel nó nằm trong cùng 1 ô, như vậy rất bất tiện. Với lại cứ mỗi lần lấy cao độ khoảng cách ở trắc ngang khác thì nó lại xuất ra 1 file cel riêng. Nếu như nó lưu vào cùng 1 file cel thì hay biết mấy. " Cái này tại cá bệnh đam mê cái hoàn hảo nên mình mới nói vậy" . Nếu có gì không phải bác bỏ qua giùm nhé! Dám hỏi Bác Bình, Bác đang công tác ở đâu vậy? Cảm ơn các Bác nhiều, chúc các Bác sức khỏe!

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

Qủa thực không biết nói thế nào để cảm ơn Bác Bình! Các Bác thật thấu tình đạt lý, không những viết giúp mà còn chỉ giáo rất tận tình.

Còn vấn đề về file cel, khi xuất ra nó không sai, nhưng các số trong 1 hàng khi vào cel nó nằm trong cùng 1 ô, như vậy rất bất tiện. Với lại cứ mỗi lần lấy cao độ khoảng cách ở trắc ngang khác thì nó lại xuất ra 1 file cel riêng. Nếu như nó lưu vào cùng 1 file cel thì hay biết mấy. " Cái này tại cá bệnh đam mê cái hoàn hảo nên mình mới nói vậy" . Nếu có gì không phải bác bỏ qua giùm nhé! Dám hỏi Bác Bình, Bác đang công tác ở đâu vậy? Cảm ơn các Bác nhiều, chúc các Bác sức khỏe!

Hề hề hề,

Điều bạn nói về file xuất ra mình chưa hiểu. Thực tế mình xuất ra file cvs thì mỗi số liệu nằm vào một ô chứ dâu có chuyện tất cả các số liệu của một điểm đ62u nằm trong một cell đâu. bạn hãy gửi file kết quả bạn làm lên để mình kiểm tra.

Việc muốn các dữ liệu đều xuất vào một file thì cũng đơn giản, bạn chỉ cần thay tham só "w" trong dòng code : (setq f (open fn "w")) bằng tham số "a" tức là :

(setq f (open fn "a")) là được.

Tuy nhiên như vậy mỗi lần chạy lisp các số liệu sẽ cách nhau bởi một dòng tiêu đề các cột. Nhờ vậy bạn có thể kiểm soat được số liệu sau mỗi lần chạy lisp.

Chúc bạn vui.

PS: Nếu bạn cần mình sẽ gửi bạn xem một file kết quả mình đã test trên file bạn gửi.

  • Vote tăng 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

Hề hề hề,

Điều bạn nói về file xuất ra mình chưa hiểu. Thực tế mình xuất ra file cvs thì mỗi số liệu nằm vào một ô chứ dâu có chuyện tất cả các số liệu của một điểm đ62u nằm trong một cell đâu. bạn hãy gửi file kết quả bạn làm lên để mình kiểm tra.

Lỗi dồn số liệu các cell cùng hàng vào chung 1 cell là có thực bác ạ! Lý do: định dạng số thập phân là dấu phẩy. Khi đó, các số liệu cách nhau bởi 1 dấu phẩy và nằm trong cùng cell, kiểu thế này "100,200,300,...". Cách khắc phục: chuyển định dạng sang dấu chấm, hoặc xuất ra xls luôn.

  • Vote tăng 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

Sao mình làm như Bác Bình nói rồi : 1/- Thêm dòng code :(if (or (= h1 nil) (= tx1 nil) (= ty1 nil))

 

vào ngay phía trên đoạn code:

(setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))

tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/"))

ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/")))

2/- Thêm một dấu ngoặc đóng hàm if vào cuối dòng code : ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/"))) để trở thành:

ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/"))) )

Việc muốn các dữ liệu đều xuất vào một file thì cũng đơn giản, bạn chỉ cần thay tham só "w" trong dòng code : (setq f (open fn "w")) bằng tham số "a" tức là :

(setq f (open fn "a")) là được.

mà không được, Chắc tại tớ gà quá! hịc

  • 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

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

×