Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
40 replies to this topic

#1 toai

toai

    biết vẽ ellipse

  • Members
  • PipPip
  • 59 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 16 June 2009 - 04:04 PM

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.c...i_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!
  • 0
Mưu sự tại nhân, thành sự tại thiên.

#2 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 16 June 2009 - 05:22 PM

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.c...i_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: )
  • 1

#3 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 17 June 2009 - 01:13 AM

Đú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.
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#4 cd2k44

cd2k44

    Edu level: li5

  • Members
  • PipPipPipPipPipPipPip
  • 648 Bài viết
Điểm đánh giá: 121 (tàm tạm)

Đã gửi 24 June 2009 - 08:07 AM

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.c...i_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
  • 0

#5 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 28 July 2009 - 10:47 PM

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.c...i_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))
;---------------------------------------------------------------------------

  • 2

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#6 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3805 (đỉnh cao)

Đã gửi 29 July 2009 - 05:40 AM

Đâ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) (< 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
  • 3

#7 toai

toai

    biết vẽ ellipse

  • Members
  • PipPip
  • 59 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 29 July 2009 - 08:32 AM

[quote name='Tue_NV' date='Jul 29 2009, 5:40' post='68592']
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!
  • 0
Mưu sự tại nhân, thành sự tại thiên.

#8 toai

toai

    biết vẽ ellipse

  • Members
  • PipPip
  • 59 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 29 July 2009 - 12:02 PM

Đâ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:
  • 0
Mưu sự tại nhân, thành sự tại thiên.

#9 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 29 July 2009 - 12:19 PM

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

  • 2

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#10 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 29 July 2009 - 01:33 PM

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

  • 2

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#11 toai

toai

    biết vẽ ellipse

  • Members
  • PipPip
  • 59 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 30 July 2009 - 08:34 AM

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:
  • 0
Mưu sự tại nhân, thành sự tại thiên.

#12 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 02 August 2009 - 06:55 PM

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ứ.
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#13 toai

toai

    biết vẽ ellipse

  • Members
  • PipPip
  • 59 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 03 August 2009 - 11:35 AM

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:
  • 0
Mưu sự tại nhân, thành sự tại thiên.

#14 ceddtu

ceddtu

    biết vẽ spline

  • Members
  • PipPip
  • 90 Bài viết
Điểm đánh giá: 7 (bình thường)

Đã gửi 23 October 2010 - 11:13 PM

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
  • 0
Đời vắng mẹ hiền không phụ nữ.
Anh hùng thi sĩ hỏi còn đâu !

#15 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 23 October 2010 - 11:30 PM

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


  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#16 ceddtu

ceddtu

    biết vẽ spline

  • Members
  • PipPip
  • 90 Bài viết
Điểm đánh giá: 7 (bình thường)

Đã gửi 24 October 2010 - 09:14 AM

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êù
  • 0
Đời vắng mẹ hiền không phụ nữ.
Anh hùng thi sĩ hỏi còn đâu !

#17 ceddtu

ceddtu

    biết vẽ spline

  • Members
  • PipPip
  • 90 Bài viết
Điểm đánh giá: 7 (bình thường)

Đã gửi 06 November 2010 - 11:55 AM

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.c...untitled_27.jpg
  • 0
Đời vắng mẹ hiền không phụ nữ.
Anh hùng thi sĩ hỏi còn đâu !

#18 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 06 November 2010 - 01:58 PM

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êù

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ề
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#19 ceddtu

ceddtu

    biết vẽ spline

  • Members
  • PipPip
  • 90 Bài viết
Điểm đánh giá: 7 (bình thường)

Đã gửi 06 November 2010 - 11:21 PM

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
  • 0
Đời vắng mẹ hiền không phụ nữ.
Anh hùng thi sĩ hỏi còn đâu !

#20 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 07 November 2010 - 12:11 AM

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)
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.