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

Nhờ diễn đàn sửa lisp ghi khoảng cách, cao độ trên cắt ngang

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

Mình coppy được một đoạn lisp dùng để xác định và ghi cao độ, khoảng cách của một điểm bất kỳ so với điểm tim thiết kế trên trắc ngang (http://www.cadviet.com/upfiles/Cdo__Kc_toi_timLenhTN.lsp), nhưng khi sử dụng đã gặp lỗi như sau (Mình không biết gì về lisp cả nên k biết tại sao):

- Nó chỉ có tác dụng trên một bản vẽ duy nhất (BV được "lưu truyền" cùng với đoạn lisp).(http://www.cadviet.com/upfiles/BV1.dwg)

- Khi sử dụng đoạn lisp này trên một bản vẽ khác thì nó báo lỗi: error: Function cancelled.(http://www.cadviet.com/upfiles/BV2.dwg).

Vậy nhờ các bạn trên diễn đàn kiểm tra và sửa lại đoạn lisp đó giúp mình với.

Chân thành cảm ơn!

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
Mình coppy được một đoạn lisp dùng để xác định và ghi cao độ, khoảng cách của một điểm bất kỳ so với điểm tim thiết kế trên trắc ngang (http://www.cadviet.com/upfiles/Cdo__Kc_toi_timLenhTN.lsp), nhưng khi sử dụng đã gặp lỗi như sau (Mình không biết gì về lisp cả nên k biết tại sao):

- Nó chỉ có tác dụng trên một bản vẽ duy nhất (BV được "lưu truyền" cùng với đoạn lisp).(http://www.cadviet.com/upfiles/BV1.dwg)

- Khi sử dụng đoạn lisp này trên một bản vẽ khác thì nó báo lỗi: error: Function cancelled.(http://www.cadviet.com/upfiles/BV2.dwg).

Vậy nhờ các bạn trên diễn đàn kiểm tra và sửa lại đoạn lisp đó giúp mình với.

Chân thành cảm ơn!

Cái lisp này có nhiệm vụ tính toán và chèn block cao độ vào trong bản vẽ. Bản vẽ 1 của bác có block LCD1 nên nó mới thực hiện được. Bản vẽ 2 không có block LCD1 nên không chạy được là đúng rồi. Bác có thể copy block này từ bản vẽ 1 vào bản vẽ 2 là chạy ngon ơ. (Bác nói lưu truyền làm em sợ quá vội down lisp và bản vẽ của bác về thử ngay :lol2: )

  • 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 hơn là fải copy cả 4 block LCD1, LCD2, LCD3, LCD4 vào bản vẽ mới. thì mới tránh được lỗi có thể sảy ra.

Lisp này rất hay. Liệu có cách nào sử dụng được lisp này cho bản vẽ bất kỳ nhưng không fải mất công copy mấy cái block trên add vào từng bản vẽ không nhỉ? mình gà mấy vụ này quá!

Và nếu có thể thì sửa lisp này lại 1 chút để sau khi kết thúc lệnh, lisp trả lại chế độ bắt điểm bình thường thì sẽ dễ dàng hơn khi lặp lại lệnh trên 1 trắc ngang khá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
Mình coppy được một đoạn lisp dùng để xác định và ghi cao độ, khoảng cách của một điểm bất kỳ so với điểm tim thiết kế trên trắc ngang (http://www.cadviet.com/upfiles/Cdo__Kc_toi_timLenhTN.lsp), nhưng khi sử dụng đã gặp lỗi như sau (Mình không biết gì về lisp cả nên k biết tại sao):

- Nó chỉ có tác dụng trên một bản vẽ duy nhất (BV được "lưu truyền" cùng với đoạn lisp).(http://www.cadviet.com/upfiles/BV1.dwg)

- Khi sử dụng đoạn lisp này trên một bản vẽ khác thì nó báo lỗi: error: Function cancelled.(http://www.cadviet.com/upfiles/BV2.dwg).

Vậy nhờ các bạn trên diễn đàn kiểm tra và sửa lại đoạn lisp đó giúp mình với.

Chân thành cảm ơn!

 

thấy anh đăng trên diễn đàn một lisp có nội dung rất hay mà sao mình load về không được. Lisp này mình đang cần mà không load được, nhờ anh gửi giúp vào địa chỉ mail của mình: anhtuan011185@gmail.com. Cảm ơn anh 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
Mình coppy được một đoạn lisp dùng để xác định và ghi cao độ, khoảng cách của một điểm bất kỳ so với điểm tim thiết kế trên trắc ngang (http://www.cadviet.com/upfiles/Cdo__Kc_toi_timLenhTN.lsp), nhưng khi sử dụng đã gặp lỗi như sau (Mình không biết gì về lisp cả nên k biết tại sao):

- Nó chỉ có tác dụng trên một bản vẽ duy nhất (BV được "lưu truyền" cùng với đoạn lisp).(http://www.cadviet.com/upfiles/BV1.dwg)

- Khi sử dụng đoạn lisp này trên một bản vẽ khác thì nó báo lỗi: error: Function cancelled.(http://www.cadviet.com/upfiles/BV2.dwg).

Vậy nhờ các bạn trên diễn đàn kiểm tra và sửa lại đoạn lisp đó giúp mình với.

Chân thành cảm ơn!

 

Đây là lisp mình đã rút gọn lại. đồng thời sửa thêm một số chi tiết về nhập số liệu và chế độ bắt điểm để thuận tiện hơn khi sử dụng. Lisp cũng đã tự động load các block cần thiết. bạn chỉ cần copy bản vẽ này vào thư mục D:\Lisp CAD là OK.

(Chú ý là không sử dụng bản vẽ BV1 của bạn nữa nhé. vì các block hơi xấu khi canh lề text, đông thời bản vẽ đó có mấy block không sử dụng nhưng mình không có cách gì purge nó đi được nên lisp load rất chậm)

(defun DXF (code elist)
 (cdr (assoc code elist))
)

(defun c:tn (); / DZ pt y ptside ang OT sc1 scale)
 (vl-load-com)
 (setvar "cmdecho" 0)

(if (not scale) (setq scale 1))
(setq sc1 (getreal (strcat "\n Cao text <"(rtos scale 2 0)">:")))
(if sc1 (setq scale sc1))
(SETQ OSLAST (getvar "OSMODE"))
(setq DZ (getvar "DIMZIN"))
(setvar "DIMZIN" 0)
(setq OT (getvar "ORTHOMODE"))
(setvar "ORTHOMODE" 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 (DXF 1 ed)))	
(command "osmode" 15359) 
(setq pt (getpoint "\nDiem chen: "))

(While (/= pt nil)
(Progn
(setq ptside (getpoint "\nPhia chen:" pt)
ang (angle pt ptside))
(setq y (- (cadr pt) y0 (- H0)))
(setq x (- (car pt) x0))

(cond ((> x 0) (setq x (strcat "" (rtos x 2 2))))
	 ((< x 0) (setq x (rtos (abs x) 2 2)))
	 ((= x 0) (setq x "0.00"))		 )
(cond ((> y 0) (setq y (strcat "+" (rtos y 2 2))))
	 ((< y 0) (setq y (rtos y 2 2)))
	 ((= y 0) (setq y "%%p0.00")))
;(setq x (ustr 0 "Khoang cach: " x T))
;(setq y (ustr 0 "Cao do: " y T))

(if (not (tblsearch "block" "LCD1"))
(progn (command "insert" "D:\\Lisp CAD\\BVTN.dwg" "" "" "" "")
(command "erase" (entlast) "")))

( if (AND (>= ang 0) (< ang 1.5708)) (command "INSERT" "LCD1" pt scale scale "0" x y))
( if (AND (>= ang 1.5708) (< ang 3.1416)) (command "INSERT" "LCD2" pt scale scale "0" y x))
( if (AND (>= ang 3.1416) (< ang 4.7124)) (command "INSERT" "LCD3" pt scale scale "0" x y))
( if (AND (>= ang 4.7124) (< ang 6.2832)) (command "INSERT" "LCD4" pt scale scale "0" y x))

(setq pt (getpoint "\nDiem chen: "))
);pro
);while 
(setvar "OSMODE" OSLAST)
(setvar "DIMZIN" DZ)
(setvar "ORTHOMODE" OT))
;---------------------------------------------------------------------------

  • 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
Đây là lisp mình đã rút gọn lại. đồng thời sửa thêm một số chi tiết về nhập số liệu và chế độ bắt điểm để thuận tiện hơn khi sử dụng. Lisp cũng đã tự động load các block cần thiết. bạn chỉ cần copy bản vẽ này vào thư mục D:\Lisp CAD là OK.

(Chú ý là không sử dụng bản vẽ BV1 của bạn nữa nhé. vì các block hơi xấu khi canh lề text, đông thời bản vẽ đó có mấy block không sử dụng nhưng mình không có cách gì purge nó đi được nên lisp load rất chậm)

Chú ý : Code trên sử dụng Block ATTribute -> nên phải chú ý đến 1 điểm sau mới hoạt động tốt được

Tue_NV không phải chuyên ngành giao thông và cầu đường và ngành cầu đường nhưng thấy bạn sử dụng đoạn lệnh này thì Tue_NV không thể không góp ý được

 

( if (AND (>= ang 1.5708) (

 

1. Nên thay 3.1416 bằng pi; và 1.5708 bằng (/ pi 2)

 

2. Chú ý đến biến Attreq

Nếu biến ATTREQ = 0 => Đoạn Code của bạn sẽ sai ngay

-> Nên thiết lập biến ATTREQ = 1 ngay trong Code để Lisp hoạt động tốt được

 

-> Biến AttREQ có tính năng như thế nào bạn làm thử là biết ngay.

 

Bạn đọc thêm bài viết của Tue_NV ở đây : Bai viet so 6

  • Vote tăng 3

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ú ý : Code trên sử dụng Block ATTribute -> nên phải chú ý đến 1 điểm sau mới hoạt động tốt được

Tue_NV không phải chuyên ngành giao thông và cầu đường và ngành cầu đường nhưng thấy bạn sử dụng đoạn lệnh này thì Tue_NV không thể không góp ý được

 

( if (AND (>= ang 1.5708) (< ang 3.1416)) (command "INSERT" "LCD2" pt scale scale "0" y x))

 

1. Nên thay 3.1416 bằng pi; và 1.5708 bằng (/ pi 2)

 

2. Chú ý đến biến Attreq

Nếu biến ATTREQ = 0 => Đoạn Code của bạn sẽ sai ngay

-> Nên thiết lập biến ATTREQ = 1 ngay trong Code để Lisp hoạt động tốt được

 

-> Biến AttREQ có tính năng như thế nào bạn làm thử là biết ngay.

 

Bạn đọc thêm bài viết của Tue_NV ở đây : Bai viet so 6

[/quot

Mình đã rất mong sự giúp đỡ của các bạn trên DĐ về cái lisp này, nhân tiện bạn Thaistreetz và các bạn trên DĐ tham khảo ý kiến của Tue_NV để hoàn thiện đoạn lisp mà Thaistreetz đã chỉnh sửa để anh em có được sự tiện dụng nhất khi dùng.Thanks!

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
Đây là lisp mình đã rút gọn lại. đồng thời sửa thêm một số chi tiết về nhập số liệu và chế độ bắt điểm để thuận tiện hơn khi sử dụng. Lisp cũng đã tự động load các block cần thiết. bạn chỉ cần copy bản vẽ này vào thư mục D:\Lisp CAD là OK.

(Chú ý là không sử dụng bản vẽ BV1 của bạn nữa nhé. vì các block hơi xấu khi canh lề text, đông thời bản vẽ đó có mấy block không sử dụng nhưng mình không có cách gì purge nó đi được nên lisp load rất chậm)

(defun DXF (code elist)
 (cdr (assoc code elist))
)

(defun c:tn (); / DZ pt y ptside ang OT sc1 scale)
 (vl-load-com)
 (setvar "cmdecho" 0)

(if (not scale) (setq scale 1))
(setq sc1 (getreal (strcat "\n Cao text <"(rtos scale 2 0)">:")))
(if sc1 (setq scale sc1))
(SETQ OSLAST (getvar "OSMODE"))
(setq DZ (getvar "DIMZIN"))
(setvar "DIMZIN" 0)
(setq OT (getvar "ORTHOMODE"))
(setvar "ORTHOMODE" 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 (DXF 1 ed)))	
(command "osmode" 15359) 
(setq pt (getpoint "\nDiem chen: "))

(While (/= pt nil)
(Progn
(setq ptside (getpoint "\nPhia chen:" pt)
ang (angle pt ptside))
(setq y (- (cadr pt) y0 (- H0)))
(setq x (- (car pt) x0))

(cond ((> x 0) (setq x (strcat "" (rtos x 2 2))))
	 ((< x 0) (setq x (rtos (abs x) 2 2)))
	 ((= x 0) (setq x "0.00"))		 )
(cond ((> y 0) (setq y (strcat "+" (rtos y 2 2))))
	 ((< y 0) (setq y (rtos y 2 2)))
	 ((= y 0) (setq y "%%p0.00")))
;(setq x (ustr 0 "Khoang cach: " x T))
;(setq y (ustr 0 "Cao do: " y T))

(if (not (tblsearch "block" "LCD1"))
(progn (command "insert" "D:\\Lisp CAD\\BVTN.dwg" "" "" "" "")
(command "erase" (entlast) "")))

( if (AND (>= ang 0) (< ang 1.5708)) (command "INSERT" "LCD1" pt scale scale "0" x y))
( if (AND (>= ang 1.5708) (< ang 3.1416)) (command "INSERT" "LCD2" pt scale scale "0" y x))
( if (AND (>= ang 3.1416) (< ang 4.7124)) (command "INSERT" "LCD3" pt scale scale "0" x y))
( if (AND (>= ang 4.7124) (< ang 6.2832)) (command "INSERT" "LCD4" pt scale scale "0" y x))

(setq pt (getpoint "\nDiem chen: "))
);pro
);while 
(setvar "OSMODE" OSLAST)
(setvar "DIMZIN" DZ)
(setvar "ORTHOMODE" OT))
;---------------------------------------------------------------------------

Bạn ơi, có một điều nữa bạn xem lại giúp: kết quả cao độ và k.c được xác định từ đoạn lisp bạn đã sửa chỉ có thể đúng với bản vẽ có TL 1:1 thôi, các TL khác thì sai bạn ạ. Nhân tiện bạn update thêm ý kiến của Mr Tue_NV để lisp đó có một "kết quả" như ý của anh em được không? :s_dead:

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ú ý : Code trên sử dụng Block ATTribute -> nên phải chú ý đến 1 điểm sau mới hoạt động tốt được

Tue_NV không phải chuyên ngành giao thông và cầu đường và ngành cầu đường nhưng thấy bạn sử dụng đoạn lệnh này thì Tue_NV không thể không góp ý được

 

( if (AND (>= ang 1.5708) (< ang 3.1416)) (command "INSERT" "LCD2" pt scale scale "0" y x))

 

1. Nên thay 3.1416 bằng pi; và 1.5708 bằng (/ pi 2)

 

2. Chú ý đến biến Attreq

Nếu biến ATTREQ = 0 => Đoạn Code của bạn sẽ sai ngay

-> Nên thiết lập biến ATTREQ = 1 ngay trong Code để Lisp hoạt động tốt được

 

-> Biến AttREQ có tính năng như thế nào bạn làm thử là biết ngay.

 

Bạn đọc thêm bài viết của Tue_NV ở đây : Bai viet so 6

 

Cảm ơn anh Tue rất nhiều vì những góp ý rất bổ ích của anh. Đúng là em chưa biết về biến hệ thống ATTREQ này vì mặc định nó thường là 1.

về việc viết 3.1416 thay cho pi thì không ảnh hưởng gì lắm đến quá trình sử dụng lisp, nhưng đúng là đối với con mắt của nguời lập trình thì điều đó thật khó chấp nhận. cũng bởi vì truớc đây em mới chỉ học mỗi pascal trong truờng đại học, nên không nghĩ là các ngôn ngữ lập trình khác như autolisp cũng chấp nhận giá trị của Pi.

 

@Toại: để tính toán ứng với giá trị tỷ lệ của bản vẽ điều đó không khó, nhưng thực tế lisp này ta sử dụng chủ yếu trên trắc ngang (tỷ lệ là 1:1) vì thế mình không muốn đưa giá trị tỷ lệ khác của bản vẽ vào. sẽ rườm rà khi nhập số liệu trong khi ứng dụng cho nó hầu như rất ít.

Code mình đã sửa lại đây:

(defun DXF (code elist)
 (cdr (assoc code elist))
)

(defun c:tn (); / DZ pt y ptside ang OT sc1 scale)
(setvar "cmdecho" 0)

(if (not scale) (setq scale 1))
(setq sc1 (getreal (strcat "\n Cao text <"(rtos scale 2 0)">:")))
(if sc1 (setq scale sc1))
(setq ATLAST (getvar "Attreq"))
(setq OSLAST (getvar "OSMODE"))
(setq DZ (getvar "DIMZIN"))
(setq OT (getvar "ORTHOMODE"))
(setvar "ORTHOMODE" 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 (DXF 1 ed)))	
(command "osmode" 15359) 
(setq pt (getpoint "\nDiem chen: "))

(While (/= pt nil)
(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 2 2))))
	 ((< x 0) (setq x (rtos (abs x) 2 2)))
	 ((= x 0) (setq x "0.00"))		 )
(cond ((> y 0) (setq y (strcat "+" (rtos y 2 2))))
	 ((< y 0) (setq y (rtos y 2 2)))
	 ((= y 0) (setq y "%%p0.00")))
;(setq x (ustr 0 "Khoang cach: " x T))
;(setq y (ustr 0 "Cao do: " y T))

(if (not (tblsearch "block" "LCD1"))
(progn (command "insert" "D:\\Lisp CAD\\BVTN.dwg" 0 "" "" "")
(command "erase" (entlast) "")))
(setvar "attreq" 1)
( if (AND (>= ang 0) (< ang (/ pi 2))) (command "INSERT" "LCD1" pt scale scale "0" x y))
( if (AND (>= ang (/ pi 2)) (< ang pi)) (command "INSERT" "LCD2" pt scale scale "0" y x))
( if (AND (>= ang pi) (< ang (+ pi (/ pi 2)))) (command "INSERT" "LCD3" pt scale scale "0" x y))
( if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi))) (command "INSERT" "LCD4" pt scale scale "0" y x))
(setvar "attreq" ATLAST)
(setvar "DIMZIN" DZ)

(setq pt (getpoint "\nDiem chen: "))
);pro
);while 

(setvar "OSMODE" OSLAST)
(setvar "ORTHOMODE" OT))
;---------------------------------------------------------------------------

  • 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
Bạn ơi, có một điều nữa bạn xem lại giúp: kết quả cao độ và k.c được xác định từ đoạn lisp bạn đã sửa chỉ có thể đúng với bản vẽ có TL 1:1 thôi, các TL khác thì sai bạn ạ. :s_dead:

 

theo tỷ lệ bản vẽ như nhu cầu của bạn. dùng cái nao tuỳ bạn nhé.

(defun DXF (code elist)
 (cdr (assoc code elist))
)

(defun c:tnx (); / DZ pt y ptside ang OT sc1 scale)
(setvar "cmdecho" 0)

(if (not scale) (setq scale 1))
(setq sc1 (getreal (strcat "\n Cao text <"(rtos scale 2 0)">:")))
(if sc1 (setq scale sc1))
(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 0)">: 1/")) 
	ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 0)">: 1/")))
(if tx1 (setq tx tx1))
(if ty1 (setq ty ty1))
(setq ATLAST (getvar "Attreq"))
(setq OSLAST (getvar "OSMODE"))
(setq DZ (getvar "DIMZIN"))
(setq OT (getvar "ORTHOMODE"))
(setvar "ORTHOMODE" 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 (DXF 1 ed)))	
(command "osmode" 15359) 
(setq pt (getpoint "\nDiem chen: "))

(While (/= pt nil)
(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))

(if (not (tblsearch "block" "LCD1"))
(progn (command "insert" "D:\\Lisp CAD\\BVTN.dwg" 0 "" "" "")
(command "erase" (entlast) "")))
(setvar "attreq" 1)
( if (AND (>= ang 0) (< ang (/ pi 2))) (command "INSERT" "LCD1" pt scale scale "0" x y))
( if (AND (>= ang (/ pi 2)) (< ang pi)) (command "INSERT" "LCD2" pt scale scale "0" y x))
( if (AND (>= ang pi) (< ang (+ pi (/ pi 2)))) (command "INSERT" "LCD3" pt scale scale "0" x y))
( if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi))) (command "INSERT" "LCD4" pt scale scale "0" y x))
(setvar "attreq" ATLAST)
(setvar "DIMZIN" DZ)
(setq pt (getpoint "\nDiem chen: "))
);pro
);while 
(setvar "OSMODE" OSLAST)
(setvar "ORTHOMODE" OT))
;---------------------------------------------------------------------------

  • 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
Cảm ơn anh Tue rất nhiều vì những góp ý rất bổ ích của anh. Đúng là em chưa biết về biến hệ thống ATTREQ này vì mặc định nó thường là 1.

về việc viết 3.1416 thay cho pi thì không ảnh hưởng gì lắm đến quá trình sử dụng lisp, nhưng đúng là đối với con mắt của nguời lập trình thì điều đó thật khó chấp nhận. cũng bởi vì truớc đây em mới chỉ học mỗi pascal trong truờng đại học, nên không nghĩ là các ngôn ngữ lập trình khác như autolisp cũng chấp nhận giá trị của Pi.

 

@Toại: để tính toán ứng với giá trị tỷ lệ của bản vẽ điều đó không khó, nhưng thực tế lisp này ta sử dụng chủ yếu trên trắc ngang (tỷ lệ là 1:1) vì thế mình không muốn đưa giá trị tỷ lệ khác của bản vẽ vào. sẽ rườm rà khi nhập số liệu trong khi ứng dụng cho nó hầu như rất ít.

Cảm ơn Cadviet, Thaistreetz... "Sản phẩm" đã thích ứng được trong các điều kiện. Nhưng (cái này được gọi là "Được voi đòi tiên" đây) các pro xem có thể bổ sung thêm chút nữa để đoạn lisp trên thay vì chỉ tính CĐ, KC cho một điểm sẽ tính và thể hiện được CĐ, KC cho các điểm còn lại trên cùng 1 mặt cắt, như vậy sẽ tiết kiệm được thời gian do phải lặp lại lệnh "TN".(Vì mình đang làm Hồ sơ thanh toán khối lượng tạm thời, đường phân khai khối lượng trong mặt cắt ngang sẽ phải thể hiện cao độ của một vài điểm) :s_dead:

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 Cadviet, Thaistreetz... "Sản phẩm" đã thích ứng được trong các điều kiện. Nhưng (cái này được gọi là "Được voi đòi tiên" đây) các pro xem có thể bổ sung thêm chút nữa để đoạn lisp trên thay vì chỉ tính CĐ, KC cho một điểm sẽ tính và thể hiện được CĐ, KC cho các điểm còn lại trên cùng 1 mặt cắt, như vậy sẽ tiết kiệm được thời gian do phải lặp lại lệnh "TN".(Vì mình đang làm Hồ sơ thanh toán khối lượng tạm thời, đường phân khai khối lượng trong mặt cắt ngang sẽ phải thể hiện cao độ của một vài điểm) :s_dead:

 

trên cùng một mặt cắt ngang thì có nghĩa là cùng 1 hệ cao độ khai báo, và lisp này có thể điền đến n lần cho n điểm cho 1 lần gõ lệnh vì có sử dụng vòng lặp. lisp chỉ kết thúc khi bạn Enter để kết thúc lệnh. như vậy rõ ràng đã thỏa mãn yêu cầu trên rồi còn gì nữa. bạn chỉ phải nhập lại lệnh khi chạy cho mặt cắt khác thôi chứ.

  • 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
trên cùng một mặt cắt ngang thì có nghĩa là cùng 1 hệ cao độ khai báo, và lisp này có thể điền đến n lần cho n điểm cho 1 lần gõ lệnh vì có sử dụng vòng lặp. lisp chỉ kết thúc khi bạn Enter để kết thúc lệnh. như vậy rõ ràng đã thỏa mãn yêu cầu trên rồi còn gì nữa. bạn chỉ phải nhập lại lệnh khi chạy cho mặt cắt khác thôi chứ.

Xin lỗi Thaistreetz nhé, mình hấp tấp quá nên chưa xem kỹ dòng nhắc lệnh của lisp. Cám ơn bạn vì đã đem lại sự hoàn hảo cho đoạn lisp trên. :s_dead:

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

hjhj ngại quá nhưng vân còn tí xíu nưã mong các bạn chỉnh giúp mình đươcj ko, đó là cái khoảng cách nêú phía bên trái tim tuyên thì chèn thêm dâú trừ đươcj không ( cái này là chủ đâù tư yêu câù chưs mình ko tưj nghĩ ra) râts ming các bạn giúp mình, nêú ỏ sai gon mình mơì mâý bạn đi "làm tí" nha

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
hjhj ngại quá nhưng vân còn tí xíu nưã mong các bạn chỉnh giúp mình đươcj ko, đó là cái khoảng cách nêú phía bên trái tim tuyên thì chèn thêm dâú trừ đươcj không ( cái này là chủ đâù tư yêu câù chưs mình ko tưj nghĩ ra) râts ming các bạn giúp mình, nêú ỏ sai gon mình mơì mâý bạn đi "làm tí" nha

Bạn thay đoạn này

(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"))

bằng đoạn code này

(cond ((> x 0) (setq x (strcat "+" (rtos (* x tx) 2 2))))

((< x 0) (setq x (rtos (* x tx) 2 2)))

((= x 0) (setq x "0.00"))

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 thay đoạn này

Trích dẫn

(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"))

 

bằng đoạn code này

(cond ((> x 0) (setq x (strcat "+" (rtos (* x tx) 2 2))))

((< x 0) (setq x (rtos (* x tx) 2 2)))

((= x 0) (setq x "0.00"))

 

oh, dược rồi bạn ah, nhưng có cách nào bỏ dâú công khi kc ơ bên phải ko bạn, thank bạn nhiều nha, chúc bạn nhiều thành công và may mắn trong cuộc sống

Ah nhan tien cho minh hoi luon nếu muốn thêm nếu muốn thêm chữ Off: vào trước kc và elve: vào trưóc cao độ thì làm sao bạn, ví dụ cao độ là 10 thì thể hiện là ELEV: 10,

khoảng cách về bên trái là 15 thì thể hiện là OFF: -15, còn kc về bên phải 15 thì thể hiện là OFF: 15 và chèn ngay tại tim thì khoảng cách băng 0 khong có dâú +/- gì cả. ths bạn nhiêù

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 thay đoạn này

 

bằng đoạn code này

(cond ((> x 0) (setq x (strcat "+" (rtos (* x tx) 2 2))))

((< x 0) (setq x (rtos (* x tx) 2 2)))

((= x 0) (setq x "0.00"))

bạn ơi cho minh hỏi sao cũng bản vẽ đó ma đem qua may khác dùng thì lại ko đc, dến bước cuối cùng thì lại hiện lên cái bảng block att bắt nhập cao đọ và khoảng cách

đây là hình ảnh

http://www.cadviet.com/upfiles/3/untitled_27.jpg

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 thay đoạn này

Trích dẫn

(cond ((> x 0) (setq x (strcat "" (rtos (* x tx) 2 2))))

((

((= x 0) (setq x "0.00"))

 

bằng đoạn code này

(cond ((> x 0) (setq x (strcat "+" (rtos (* x tx) 2 2))))

((

((= x 0) (setq x "0.00"))

 

oh, dược rồi bạn ah, nhưng có cách nào bỏ dâú công khi kc ơ bên phải ko bạn, thank bạn nhiều nha, chúc bạn nhiều thành công và may mắn trong cuộc sống

Ah nhan tien cho minh hoi luon nếu muốn thêm nếu muốn thêm chữ Off: vào trước kc và elve: vào trưóc cao độ thì làm sao bạn, ví dụ cao độ là 10 thì thể hiện là ELEV: 10,

khoảng cách về bên trái là 15 thì thể hiện là OFF: -15, còn kc về bên phải 15 thì thể hiện là OFF: 15 và chèn ngay tại tim thì khoảng cách băng 0 khong có dâú +/- gì cả. ths bạn nhiêù

Hề hề hề, Tranh thủ lúc bác Thaistreet vắng nhà, sửa trộm giúp bạn ceddtu một phát hỉ. Bác Thaistreet và các bác khác đừng mắng minh nha:

Bạn thay đoạn này

(cond ((> x 0) (setq x (strcat "+" (rtos (* x tx) 2 2))))

((

((= x 0) (setq x "0.00"))

 

bằng đoạn code này

(cond ((> x 0) (setq x (strcat "OFF: " (rtos (* x tx) 2 2))))

((

((= x 0) (setq x "0.00"))

 

Hề hề hề, hy vọng trúng chỗ ngứa của bạn ceddtu.

Cái vụ sang bản vẽ khác không được thì bạn phải chờ bác Thaistreet giải quyết nha, Mình chỉ chôm được có vậy, chôm nữa thì chửa thành nghề. Hề hề hề

  • 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
Hề hề hề, Tranh thủ lúc bác Thaistreet vắng nhà, sửa trộm giúp bạn ceddtu một phát hỉ. Bác Thaistreet và các bác khác đừng mắng minh nha:

Bạn thay đoạn này

(cond ((> x 0) (setq x (strcat "+" (rtos (* x tx) 2 2))))

((< x 0) (setq x (rtos (* x tx) 2 2)))

((= x 0) (setq x "0.00"))

 

bằng đoạn code này

(cond ((> x 0) (setq x (strcat "OFF: " (rtos (* x tx) 2 2))))

((< x 0) (setq x (strcat "OFF: " (rtos (* x tx) 2 2))))

((= x 0) (setq x "0.00"))

 

Hề hề hề, hy vọng trúng chỗ ngứa của bạn ceddtu.

Cái vụ sang bản vẽ khác không được thì bạn phải chờ bác Thaistreet giải quyết nha, Mình chỉ chôm được có vậy, chôm nữa thì chửa thành nghề. Hề hề hề

sao em về sửa ko đc bac phamthanhbinh ơi, nó báo lỗi vậy nè, em dùng cái líp "tn" chứ ko phải là lisp "tnx"

Phia chen:; error: bad argument type: numberp: nil

nhờ bác sửa giúp em rồi post lên 1 líp hoàn chỉnh đc ko bác, phiền bác chút nha. thành thật cám ơn bác và Thaistreet nhiều lắ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
sao em về sửa ko đc bac phamthanhbinh ơi, nó báo lỗi vậy nè, em dùng cái líp "tn" chứ ko phải là lisp "tnx"

Phia chen:; error: bad argument type: numberp: nil

nhờ bác sửa giúp em rồi post lên 1 líp hoàn chỉnh đc ko bác, phiền bác chút nha. thành thật cám ơn bác và Thaistreet nhiều lắm

Hề hề hề,

Bạn ceddtu ơi,

Cái ni mình đã nói là sửa trộm bác ThaiStreet rồi mừ.

Mình thấy bạn nói rằng cái bác Thái sửa đã chạy ngon rồi nên mình bắt chước bác ấy, chỉ sửa có mỗi việc là dùng hàm strcat để thêm chữ OFF: vào đầu cái text kết quả thôi mà chứ có sửa gì trong lisp đâu mà nó lại chạy sai nhỉ???

Hơn nữa cái chỗ khúc mắc như bạn nói lại là do việc chọn điểm phía chèn. Vậy bạn thử check lại, dùng cái mình chưa sửa chạy thử coi có bị lỗi như vầy không. Nếu cũng bị thì là có lỗi chi đó mà mình không biết. Cần phải kiểm lại mới được. Do lisp này bác Thaistreet viết nên mình cũng chưa dò hết từ đầu chí cuối mà chỉ mới đọc lướt qua để hiểu và bổ sung cái bạn cần mà thôi. Hề hề hề,

Giá bác Thaistreet không bận thì sẽ nhanh hơn. Bạn chịu khó chờ chút nghen.

 

PS: Bạn đã copy cái "bản vẽ này" của bác Thaistreet vào thư mục D:\Lisp CAD chưa và lưu ý cái ngoặc (Chú ý là không sử dụng bản vẽ BV1 của bạn nữa nhé. vì các block hơi xấu khi canh lề text, đông thời bản vẽ đó có mấy block không sử dụng nhưng mình không có cách gì purge nó đi được nên lisp load rất chậ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
Hề hề hề,

Bạn ceddtu ơi,

Cái ni mình đã nói là sửa trộm bác ThaiStreet rồi mừ.

Mình thấy bạn nói rằng cái bác Thái sửa đã chạy ngon rồi nên mình bắt chước bác ấy, chỉ sửa có mỗi việc là dùng hàm strcat để thêm chữ OFF: vào đầu cái text kết quả thôi mà chứ có sửa gì trong lisp đâu mà nó lại chạy sai nhỉ???

Hơn nữa cái chỗ khúc mắc như bạn nói lại là do việc chọn điểm phía chèn. Vậy bạn thử check lại, dùng cái mình chưa sửa chạy thử coi có bị lỗi như vầy không. Nếu cũng bị thì là có lỗi chi đó mà mình không biết. Cần phải kiểm lại mới được. Do lisp này bác Thaistreet viết nên mình cũng chưa dò hết từ đầu chí cuối mà chỉ mới đọc lướt qua để hiểu và bổ sung cái bạn cần mà thôi. Hề hề hề,

Giá bác Thaistreet không bận thì sẽ nhanh hơn. Bạn chịu khó chờ chút nghen.

 

PS: Bạn đã copy cái "bản vẽ này" của bác Thaistreet vào thư mục D:\Lisp CAD chưa và lưu ý cái ngoặc (Chú ý là không sử dụng bản vẽ BV1 của bạn nữa nhé. vì các block hơi xấu khi canh lề text, đông thời bản vẽ đó có mấy block không sử dụng nhưng mình không có cách gì purge nó đi được nên lisp load rất chậm)

cám ơn bạn phamthanhbinh nhưng bạn có thể kiểm tra thử đc ko, vì khi mình dùng lisp "tnx" thì đc nhưng khi dùng líp "tn" thì lại ko dc, mình ko rành về auto lisp nên gặp khá nhiều khó khăn, mong bạn xem giúp mình (vì khối luong nhiều mà dùng lisp tnx mất nhiều thao tác hơn nên mình chỉ muốn dùng lisp "tn" thôi

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 phamthanhbinh nhưng bạn có thể kiểm tra thử đc ko, vì khi mình dùng lisp "tnx" thì đc nhưng khi dùng líp "tn" thì lại ko dc, mình ko rành về auto lisp nên gặp khá nhiều khó khăn, mong bạn xem giúp mình (vì khối luong nhiều mà dùng lisp tnx mất nhiều thao tác hơn nên mình chỉ muốn dùng lisp "tn" thôi

Chào bạn ceddtu,

Mình đã xem khá kỹ hai lisp tn và tnx của bác Thaistreet, song vẫn chưa phát hiện được sự không tương thích nào cả. Hai lisp này chỉ khác nhau phần bổ sung để thêm tỷ lệ tx và ty, còn cấu trúc và các lệnh là hoan toàn giống nhau. Vậy nên chưa rõ lỗi là do cái gì bạn ạ. Có nhẽ đành phải chờ bác Thaistreet ra tay vậy.

  • 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

Em cảm ơn anh Bình đã giúp em sửa hộ ceddtu nha :)

@ceddtu: Đây là lisp đầu tay của mình, (nói đúng hơn là mình sửa từ 1 lisp của người khác) học hành bài bản, không sách vở, học từ ngọn xuống gốc nên cái lisp này nỏ rác lắm, mỗi lần thấy nó là mình lại ngại sửa. hề hề, thế nên bạn tự nghiên cứu nó để tự sửa cho đúng ý bạn đi nhé.

Topic này mình post lại 1 cái lisp tương tự nhưng không cần phải dùng thêm block ngoài nữa. bạn có thể tham khảo thêm

  • 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
Em cảm ơn anh Bình đã giúp em sửa hộ ceddtu nha :)

@ceddtu: Đây là lisp đầu tay của mình, (nói đúng hơn là mình sửa từ 1 lisp của người khác) học hành bài bản, không sách vở, học từ ngọn xuống gốc nên cái lisp này nỏ rác lắm, mỗi lần thấy nó là mình lại ngại sửa. hề hề, thế nên bạn tự nghiên cứu nó để tự sửa cho đúng ý bạn đi nhé.

Topic này mình post lại 1 cái lisp tương tự nhưng không cần phải dùng thêm block ngoài nữa. bạn có thể tham khảo thêm

hjhj thanks bác nhiều lắm, mình vẫn dùng cái líp của bác hôm bữa h để làm việc mà, ko sao hết, nếu là líp đầu tay của bạn thì xuất sắc quá còn gj, chúc bạn thành công

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
Em cảm ơn anh Bình đã giúp em sửa hộ ceddtu nha :undecided:

@ceddtu: Đây là lisp đầu tay của mình, (nói đúng hơn là mình sửa từ 1 lisp của người khác) học hành bài bản, không sách vở, học từ ngọn xuống gốc nên cái lisp này nỏ rác lắm, mỗi lần thấy nó là mình lại ngại sửa. hề hề, thế nên bạn tự nghiên cứu nó để tự sửa cho đúng ý bạn đi nhé.

Topic này mình post lại 1 cái lisp tương tự nhưng không cần phải dùng thêm block ngoài nữa. bạn có thể tham khảo thêm

 

Chào bác 'Thaistreetz' và toàn thể ae diễn đàn. Em thấy lisp của bác rất hay và có tính ứng dụng rất lớn cho dân cầu đường, không biết bác và ae trong diễn đàn có kiến thức về autolisp có thể đầu tư thêm thời gian để phát triển nó thêm 1 chút được hok? cụ thể là nó sẽ điền giá trị cao độ và khoảng cách lẻ vào vị trí mà ta thiết lập (Bảng TN chẳng hạn: cao độ vào hàng cao độ, k/c lẻ vào hàng k/c lẻ). Ngoài ra có thể tự động kẻ đường dóng từ vị trí đó đến bảng TN. Nếu được như vậy thì tuyệt vời quá, hi.

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

×