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ị

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

Hề hề hề,

Hãy gửi cái bạn đã làm lên 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

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!

Thay (chr 44) thành (chr 9).

(write-line (strcat (rtos i 2 0) (chr 9) x (chr 9) y) f)

  • 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

CSV mà dùng (chr 9) thì nó dính liền nhau chứ nhỉ?

Tôi quên không check khi ghi file CSV.

 

Nhưng khi ghi file XLS (setq fn (getfiled "Select a File" "" "xls" 1)) trong code của duyngoc thì (chr 9) sẽ tách ra các cell riêng biệt.

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ông, cái nguyên bản của Bác Bình gửi là xuất ra đuôi " CSV " nhưng khi xuất ra nó liền nhau, nên mình sữa lại thành đuôi XLS luôn. Nhờ các Bác xem 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

Không, cái nguyên bản của Bác Bình gửi là xuất ra đuôi " CSV " nhưng khi xuất ra nó liền nhau, nên mình sữa lại thành đuôi XLS luôn. Nhờ các Bác xem hộ!

Hề hề hề,

Setup lại file cvs để format dấu thâp phận là dấu chấm như bác Doan van Ha đã nói xem sao.....

 

Đã xem file chú sửa, nhưng chú sửa nhiệt tình quá, đổi luôn cả kiểu file là xls. cái vụ file xls này thì mình không rành lắm mà chỉ thường dùng là xuất sang file cvs. sau đó nếu cần thì saveas lại thành xls.

Chú chơi hăng quá thì bác thua luôn. hãy xem hướng dẫn của các bác khác nhé.

Hề hề hề,

Đây là file kết quả xuất ra sau khi mình đã sửa lisp như nói với bạn.

http://www.cadviet.com/upfiles/3/5194_tnkm2km3.rar

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

1). Nếu xuất ra CSV: set dấu thập phân là dấu chấm trước khi xuất file.

2). Nếu xuất ra XLS (như chủ topic đã sửa): sửa (chr 44) thành (chr 9) như bác Gia_Bach hướng dẫn, không cần set dấu thập phâ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

Rồi tớ sửa rồi, vấn đề các dữ liệu nằm các ô khác nhau đã được giải quyết. Nhưng còn vấn đề này nữa:

1.Mỗi lần chuyển sang trắc ngang khác thì nó vẫn mở một file cel và bắt mình phải lưu thành 1 bản lưu chồng file đã có, cài này rất bất tiện, nếu nó chỉ xuất ra và cùng 1file cel và chỉ cần lưu 1 lần thì hay biết mấy.

Chúc các bác ngày mới nhiều niềm vui!

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

Rồi tớ sửa rồi, vấn đề các dữ liệu nằm các ô khác nhau đã được giải quyết. Nhưng còn vấn đề này nữa:

1.Mỗi lần chuyển sang trắc ngang khác thì nó vẫn mở một file cel và bắt mình phải lưu thành 1 bản lưu chồng file đã có, cài này rất bất tiện, nếu nó chỉ xuất ra và cùng 1file cel và chỉ cần lưu 1 lần thì hay biết mấy.

Chúc các bác ngày mới nhiều niềm vui!

Hề hề hề,

Ai bảo vậy??? Đã xem file kết quả mình gửi chưa???

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ế này bác Bình: cứ mỗi lần mình chuyển dang trắc ngang khác để lấy cao độ và khoảng cách thì nó lại mở ra 1 file cel và mình phải lưu. bác thử dùng lisp mà xem.

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ế này bác Bình: cứ mỗi lần mình chuyển dang trắc ngang khác để lấy cao độ và khoảng cách thì nó lại mở ra 1 file cel và mình phải lưu. bác thử dùng lisp mà xem.

Hề hề hề,

Mình dùng hoài rồi chứ bộ bạn hổng thấy cái file kết quả mình gửi sao???

Vấn đề là khi lisp hiện hộp thoại chọn file, bạn phải chọn vào đúng cái tên file mà bạn muốn nhập thêm vào là Ok....

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ính là ý chú, chú thấy bất tiện khi mỗi lần chuyển sang trắc ngang khác lại đòi lưu file, bác có thể sửa lại nó chỉ lưu thành 1 bản và nó chỉ bắt lưu 1 lần thôi không? hề hề tham quá!

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ề,

Mình dùng hoài rồi chứ bộ bạn hổng thấy cái file kết quả mình gửi sao???

Vấn đề là khi lisp hiện hộp thoại chọn file, bạn phải chọn vào đúng cái tên file mà bạn muốn nhập thêm vào là Ok....

Hề hề hề.

1/- Ý chú như vậy là quá cùn. Không nhẽ cả đời làm việc chỉ nhập số liệu vào một file duy ngốc thôi ư.?? Bác đây không thể chiều ý chú.

2/- Nếu chú vẫn thích cùn thì hãy tự làm lấy. Đơn giản là xóa cáo dòng code (setq fn (getfiled .......)) đi và thay nó bằng (setq fn "tên file muốn lưu")

3/- Nếu chú vẫn giữ tư duy làm việc kiểu cùn thế này thì tốt nhất nên kiếm cô vợ giàu mà núp váy.

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ề, Bác quá lời rồi, chẳng qua chú muốn cho lisp hoàn thiện hơn thôi. Dẫu sao cũng cảm ơn Bác 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

Chào các bác. Em xin mạn phép đào mộ topic một tý, lập topic mới với vấn đề đơn giản sau đây thì dễ bay vô thùng rác lắm.

Trước tiên xin cảm ơn bác Thaistreetz, em làm bên giao thông, đã sử dụng lisp mà bác đã hoàn thiện ở post #2, rất tuyệt vời, ưu điểm hơn hẳn các lisp ghi cao độ khác do không cần block đi kèm, xuất bản vẽ đẹp.

Tiếp nữa rất mong a Thaistreetz và các cao nhân trên diễn đàn giúp em giải quyết thêm một tý (bớt 1 tý thì đúng hơn). Đó là điền luôn cái cao độ kết quả vào dtext có sẵn trên cắt ngang. Cụ thể như sau:

- 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 điểm cần tra cao độ.

- Chọn  thay thế cao độ vào dtext có sẵn trên bản vẽ (pick chuột vào text cao độ của điểm cần tra cao độ)

Trường hợp của em giống với trường hợp của bác Namhai đã post và bị trôi ở post #3, tuy nhiên e đã lục trong topic cũng như forum chưa tìm được câu trả lời hợp lý nhất. Tạm thời em đang xuất cao độ theo lisp của bác Thaistreetz, rồi copy sang dtext trắc ngang. Cũng ok nhưng hơi dở. Mong các bác giúp đỡ.

 

Cắt ngang ví dụ:

http://www.cadviet.com/upfiles/4/115015_vi_du_1.dwg

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ón này nhoc ko rành lắm, nhoc thử sữa lại theo ý bạn, bạn xem có đúng ko ^^, nhoc chỉ sợ lượt bớt nhiều quá làm sai kết quả ^^

(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  ptside ang OT sc1 scale tx ty tx1 ty1 y H0) ; 
(command "Undo" "BEGIN")
(if (= tx nil) 
	(setq tx 1))
(if (= ty nil) 
	(setq ty 1))
	(setq 		  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 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))
;(setvar 'osmode 0)
(setq ed (entget (car (entsel "\nChon cao do tim: "))))
(setq H0 (read (DXFcn 1 ed))) 
(While (and (setq pt (getpoint "\nChon diem chuan : ")) (setq doitt (car (entsel "\nChon text de chinh sua: "))))
(Progn
	(setq y (- (cadr pt) y0 (- H0)))
(cond 
	((> y 0) (entmod (subst (cons 1 (strcat "+" (rtos (* y ty) 2 2))) (assoc 1 (entget doitt)) (entget doitt))))
	((< y 0) (entmod (subst (cons 1 (rtos (* y ty) 2 2)) (assoc 1 (entget doitt)) (entget doitt)))) 
	((= y 0) (entmod (subst (cons 1 "%%p0.00") (assoc 1 (entget doitt)) (entget doitt))))
)

);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
  • 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

Năm mới chúc các bác mạnh khỏe, làm ăn phát đạt. Cảm ơn bác Nhoclangbat đã edit dùm em. Sau khi chạy thử có phát sinh một lỗi như sau: Khi bắt điểm tim và text cao độ chuẩn xong, đến bước bắt điểm cần nội suy cao độ thì lại mất toàn bộ chế độ bắt điểm. Nếu F3 và chọn lại cùng dùng được rồi nhưng thế rườm rà quá. Bác Nhoclangbat khi nào khai xuân chơi tết xong xuôi có thời gian sửa chỗ ấy giúp em với. Em 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

Thường thì trong osnap em chọn tất. Bác điều chỉnh giúp em chế độ bắt điểm không thay đổi so với trước khi dùng li sp là đượ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

Cảm ơn bác Nhoclangbat. Lisp trên như vậy đã giải quyết ngon lành những gì em cần. Chúc các bác những ngày làm việc hiệu quả!

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

1/ (setq ed (entget (car (entsel "\nChon cao do tim: "))))

(setq cdd (atof (cdr(assoc 1 (entget(car(entsel "\n Pick chon Text cao do dau :")))))))

cho hỏi 2 câu lệnh này khác nhau như thế nào. không hiểu sao những lisp mình tải về xem thì đến bước chọn text cao độ ở câu lệnh 1 cho kết quả toàn bằng 0 hay trật lất còn câu 2 thì đúng. 

2/ file cdx.lsp mình tải về xài toàn cho kết quả bằng 0 . các bác chỉ dùm...

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

×