Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
bach1212

[Nhờ chỉnh sửa] Sửa giúp em lisp thống kê tọa độ

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

File đính kèm: http://www.cadviet.com/upfiles/3/40304_bangtoadobang.lsp

Em làm quy hoạch phải thống kê tọa độ các điểm trên bản vẽ.

Em có lisp này để lập bảng thống kê tọa độ các điểm.

Tuy nhiên: tên điểm luôn phải nhập bằng tay.

Nhờ các bác sửa lisp để khi nhập tên điểm: lisp có thể nhận 1 trong 2 lựa chọn: pick trực tiếp vào text tên điểm trên bản vẽ hoặc nhập bằng tay.

Đồng thời, lisp có thêm lựa chọn chiều cao chữ cho các text được xuất ra trong bảng tọa độ.

Em xin cám ơn các bác trước nhé!

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

File đính kèm: http://www.cadviet.c...ngtoadobang.lsp

Em làm quy hoạch phải thống kê tọa độ các điểm trên bản vẽ.

Em có lisp này để lập bảng thống kê tọa độ các điểm.

Tuy nhiên: tên điểm luôn phải nhập bằng tay.

Nhờ các bác sửa lisp để khi nhập tên điểm: lisp có thể nhận 1 trong 2 lựa chọn: pick trực tiếp vào text tên điểm trên bản vẽ hoặc nhập bằng tay.

Đồng thời, lisp có thêm lựa chọn chiều cao chữ cho các text được xuất ra trong bảng tọa độ.

Em xin cám ơn các bác trước nhé!

hề hề hề,

bạn thử bổ sung các dòng code sau:

 

(if (or (= td "") (= td " "))

(setq td (cdr (assoc 1 (entget (car (entsel "\n Chon text san co tren ban ve"))))))

)

vào dưới dòng code:

(setq td (getstring "\NhËp tªn ®iÓm lÊy to¹ dé : "))

xem sao nhé.

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

hề hề hề,

bạn thử bổ sung các dòng code sau:

 

(if (or (= td "") (= td " "))

(setq td (cdr (assoc 1 (entget (car (entsel "\n Chon text san co tren ban ve"))))))

)

vào dưới dòng code:

(setq td (getstring "\NhËp tªn ®iÓm lÊy to¹ dé : "))

xem sao nhé.

Hề hề hề.

Hề hề, được rùi bạn ah. Thanh hiu nhé.

Vậy cho thêm lựa chọn chiều cao text trong bảng làm thế nào bạn nhỉ?

Có 1 bất cập nữa mình thấy thế này: lisp này hiện tại đưa ra yêu cầu nhập trước số điểm cần tính tọa độ rùi lập thành 1 bảng với số hàng tương ứng. Nhiều lúc chưa biết cần lấy bao nhiêu điểm cứ đánh đại con số vài chục. Đến lúc chọn xong chỉ được vài điểm không hết bảng, lại phải cắt bảng đi. Hoặc lúc chọn con số bé quá, mà sau lại pick nhiều điểm hơn thì những điểm vượt quá không tạo vào bảng được.

Vậy bạn có cách để cái bảng này lập theo kiểu chọn điểm tới đâu vẽ tới đó, không bị thừa hay thiếu hàng nữa không?

Hjj

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ề, được rùi bạn ah. Thanh hiu nhé.

Vậy cho thêm lựa chọn chiều cao text trong bảng làm thế nào bạn nhỉ?

Có 1 bất cập nữa mình thấy thế này: lisp này hiện tại đưa ra yêu cầu nhập trước số điểm cần tính tọa độ rùi lập thành 1 bảng với số hàng tương ứng. Nhiều lúc chưa biết cần lấy bao nhiêu điểm cứ đánh đại con số vài chục. Đến lúc chọn xong chỉ được vài điểm không hết bảng, lại phải cắt bảng đi. Hoặc lúc chọn con số bé quá, mà sau lại pick nhiều điểm hơn thì những điểm vượt quá không tạo vào bảng được.

Vậy bạn có cách để cái bảng này lập theo kiểu chọn điểm tới đâu vẽ tới đó, không bị thừa hay thiếu hàng nữa không?

Hjj

Hề hề hề,

1/- Lisp bạn gửi người viết đã cố tình sử dụng text style hiện hành của bản vẽ với chiều cao text là cố định 2.5 . Nếu bạn muốn nhập text với chiều cao text mới do bạn chọn thì sẽ xảy ra trường hợp text nằm ra ngoài hoặc quá nhỏ so với cái bảng đã tạo. vậy bạn muốn sao???

2/- Lisp bạn gửi tạo bảng theo một số lượng điểm cho trước và có kích thước các ô là cố định. Do vậy bạn cần phải chọn text size phù hợp với nó.

3/- Điều bạn muốn không phải không làm được, xong bạn cần phải hiểu và biết cách làm để có thể tự chỉnh sửa sau này theo các yêu cầu cụ thể của mỗi một bản vẽ. Vì thế bạn nên học lisp đi là vừa rồi. Mọi người sẽ giúp bạn làm được điều bạn muốn. Thậm chí bạn hoàn toàn có thể tự làm lisp theo những yêu cầu riêng của bạn nữa.

4/- Về việc chỉnh sửa lisp nói trên, mình hướng dẫn bạn tự làm như sau:

Bước 1: Đặt chiều cao text của style hiện hành về 0.

Bạn có thể sử dụng đoạn lisp mình đã làm sẵn này:

(defun styleset (/ stl h)

(setq stl (getvar "textstyle")

h (getvar "textsize"))

(if (/= h 0) (command "style" stl "" 0 "" "" "" "" ""))

)

Hãy copy và dán nó vào cuối cái lisp của bạn. Đoạn lisp này sẽ cho phép bạn sử dụng lệnh ( command "text" ....) với tham số chiều cao của text chứ không phải như trong lisp cũ không cho phép sử dụng tham số này.( Nếu bạn cố tình nhập thêm tham số này vào lisp cũ thì các text của bạn sẽ là 0 hết , bạn hãy thử coi.)

Sau khi copy cái đoạn code trên vào cuối lisp, bạn phải thêm dòng code sau (styleset) vào dưới dòng code (command "-Style" "hoatbif" "hoatbif " "2.5" "" "" "" "" "") Rồi tùy ý bạn có thể hoặc không cần vô hiệu hóa dòng code (command ...) này cũng được.

Cách vô hiệu hóa một dòng code là thêm một hay nhiều ký tự chấm phẩy ( ; ) vào đầu dòng.

Bước 2: Đặt tên biến cho chiều cao text (setq ht (getreal "\n Nhap chieu cao text ban muon: "))

Bước 3: Bổ sung tham số ht vào các dòng code ghi text. Tỷ như: (command "text" "j" "mc" p11 "0" "Tªn nót" ) sẽ thành (command "text" "j" "mc" p11 ht "0" "Tªn nót" )

 

Và thế là bạn sẽ có quyền ghi các em text với chân dài tới nách cũng được. Tuy nhiên lúc này bạn phải coi chừng kẻo các em chân dài này sẽ xổng khỏi cái chuồng mà bạn đã tạo cho các em ấy.

Bước 4: Đo ni đóng chuồng.

Vậy để có chuồng phù hợp với các em chân dài, cách tốt nhất là bạn phải đo ni mà đóng.... chuồng thôi. Nếu không các em xổng mất thì ....... phí ...... tiền bạn ạ.

Điều này có nghĩa là bạn phải xác định kích thước chiều cao dòng và độ rộng các cột cho phù hợp với cái chiều cao của text. Tỷ như theo lisp cũ của bạn thì chiều cao text là cố định 2.5 và chiều cao dòng bạn đang chọn là 8 tức là 3.2 x 2.5. Vậy nếu bạn thích cái chuồng như vậy thì bạn phải có cái chuồng mới cho em có chân dài ht sẽ có chiều cao là (3.2 x ht). Tương tự với độ rộng của chuồng.

toàn bộ kích thước chuồng của bạn nằm trong đoạn code sau:

(setq p2 (polar p1 (/ (* Pi 3) 2) (+ 16 (* 8 S))))

(setq p3 (polar p2 0 91))

(setq p4 (polar p1 0 91))

(setq p5 (polar p1 0 21))

(setq p6 (polar p2 0 21))

(setq p7 (polar p5 0 35))

(setq p8 (polar p6 0 35))

(setq p9 (polar p5 (/ (* Pi 3) 2) 8))

(setq p10 (polar p4 (/ (* Pi 3) 2) 8))

(setq p12 (polar p9 0 35))

(setq p11 (polar p9 0 -10.5))

(setq p13 (polar p1 (/ (* Pi 3) 2) 16))

(setq p14 (polar p4 (/ (* Pi 3) 2) 16))

(setq p15 (polar p7 (/ (* pi 3 ) 2) 4))

(setq p16x (/ (+ (car p5) (car p7)) 2))

(setq p16y (/ (+ (cadr p9) (cadr p13)) 2))

(setq p17x (/ (+ (car p4) (car p7)) 2))

(setq p17y (/ (+ (cadr p9) (cadr p13)) 2))

(setq p16 (list p16x p16y))

(setq p17 (list p17x p17y))

Ngâm cứu đoạn code này bạn sẽ hiểu cái cách đóng chuồng để đóng được cái chuồng cho các em chân dài mà bạn khoái.

Bước 5: Cái số chuồng mà bạn có sẵn này lại không phù hợp với số em chân dài mà bạn đang .... chăn. Làm thêm sẵn thì phí tiền mà làm ít quá thì lại khổ các em. Vậy bạn lại chơi cái kiểu nông dân một chút là đếm em để làm chuồng vậy.

Để làm được vậy bạn hãy suy nghĩ tới việc tạo vòng lặp đóng chuồng dựa trên số em chứ không đóng sẵn như trước nữa. Hề hề hề, Việc này không khó nhưng hơi mất công. bạn hãy chịu khó làm những việc trên trước đã nhé. Chừng nào bạn làm xong mình sẽ hướng dẫn tiếp cho nó khỏi..... quên hỉ.

Hề hề hề, chúc bạn quản lý tốt các em chân dài đến....... mũi 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ờ, cám ơn bác đã cho em thấy nhiều em chân dài đến thế, nổ hết cả đom đóm mắt.

Em sửa đoạn lisp để có thể chỉnh chiều cao text theo hướng dẫn được thế này:

bang
: Ha Van Khanh 3/2003
;
; * Chuong trinh duoc lap bang ngon ngu AUTOLISP.
; ------------------------------------------------------------------------------
(vmon)
(defun C:bang (/ 1x 1y a1 2x 2y a2 3x 3y a3 b p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14  p15 p16x p16y p16 p17x p17y p17)
(setvar "cmdecho" 0) 
(initget 7)
(setq osm (getvar "osmode" ))
(setvar "osmode" 0)
(command "-Style" "hoatbif" "hoatbif " "2.5" "" "" "" "" "")
(styleset)
(command "-Layer" "n" "Text" "c" "4" "Text" "")
(setq ht (getreal "\n Nhap chieu cao text ban muon: "))
 (setq p1 (getpoint "\nChän diÓm dÆt b¶ng thèng kª :"))
 (setq S (getint "\nSè ®iÓm cÇn tÝnh to¹ ®é :"))
(setq p2 (polar p1 (/ (* Pi 3) 2) (+ 16 (* 8 S))))
(setq p3 (polar p2 0 91))
(setq p4 (polar p1 0 91))
(setq p5 (polar p1 0 21))
(setq p6 (polar p2 0 21))
(setq p7 (polar p5 0 35))
(setq p8 (polar p6 0 35))
(setq p9 (polar p5 (/ (* Pi 3) 2) 8))
(setq p10 (polar p4 (/ (* Pi 3) 2) 8))
(setq p12 (polar p9 0 35))
(setq p11 (polar p9 0 -10.5))
(setq p13 (polar p1 (/ (* Pi 3) 2) 16))
(setq p14 (polar p4 (/ (* Pi 3) 2) 16))
(setq p15 (polar p7 (/ (* pi 3 ) 2) 4))
(setq p16x (/ (+ (car p5) (car p7)) 2))
(setq p16y (/ (+ (cadr p9) (cadr p13)) 2))
(setq p17x (/ (+ (car p4) (car p7)) 2))
(setq p17y (/ (+ (cadr p9) (cadr p13)) 2))
(setq p16 (list p16x p16y))
(setq p17 (list p17x p17y))
(command "Plinewid" "0.5")
(command "Pline" p1 p2 p3 p4 p1 "")
(command "Line" p5 p6 "")
(command "Line" p12 p8 "")
(command "Line" p9 p10 "")
(command "Line" p13 p14 "")
(command "Array" "l" "" "Rec" S "1" "-8")
(command "text" "j" "mc"  p11 ht "0"  "Tªn nót"  )
(command "text" "j" "mc"  p15 ht "0"  "To¹ ®é" )
(command "text" "j" "mc"  p16 ht "0"  "X" )
(command "text" "j" "mc"  p17 ht "0"  "Y" )
(setvar "osmode" 1)
;-------------------------------------------------
; PhÇn sö lý ch÷
(setq b 0)
(while (< b s )
(setq b (+ b 1))
(setq td (getstring "\NhËp tªn ®iÓm lÊy to¹ dé : "))
(if (or (= td "") (= td " "))
(setq td (cdr (assoc 1 (entget (car (entsel "\n Chon text san co tren ban ve"))))))
)
(setq tp (getpoint "\Chän ®iÓm : "))
(setq tx (rtos (car tp) 2 4 ))
(setq ty (rtos (cadr tp) 2 4 ))
(setq 1x (/ (+ (car p1) (car p5)) 2))
(setq 1y (- (- (cadr p11) 4) (* 8 B)))
(setq a1 (list 1x 1y))
(setq 2x (/ (+ (car p5) (car p7)) 2))
(setq 2y (- (cadr p16) (* 8 B)))
(setq a2 (list 2x 2y))
(setq 3x (/ (+(car p7) (car p4)) 2))
(setq 3y (- (cadr p17) (* 8 B)))
(setq a3 (list 3x 3y))
(command "text" "j" "mc"  a1  "0"  td "" )
(command "text" "j" "mc"  a3  "0"  tx "" )
(command "text" "j" "mc"  a2  "0"  ty "" )
)
)
(defun styleset (/ stl h)
(setq stl (getvar "textstyle")
h (getvar "textsize"))
(if (/= h 0) (command "style" stl "" 0 "" "" "" "" ""))
)

Bác xem giúp em xem lỗi ở đâu mà khi đến bước chọn tên điểm, chọn điểm xong lại ra tiếp thông báo như thế này:

; error: Function cancelled

Specify height <2.00>:

Mà nó không tiếp tục lệnh để chọn điểm tiếp được luôn, bác nhỉ.

File cad để test: http://www.cadviet.com/upfiles/3/40304_binh_do_tnm_3.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

Bác xem giúp em xem lỗi ở đâu mà khi đến bước chọn tên điểm, chọn điểm xong lại ra tiếp thông báo như thế này:

; error: Function cancelled

Specify height <2.00>:

Mà nó không tiếp tục lệnh để chọn điểm tiếp được luôn, bác nhỉ.

File cad để test: http://www.cadviet.c...nh_do_tnm_3.rar

Ít nhất thì hàm dưới đây bạn đã viết sai cú pháp:

(command "text" "j" "mc" a1 "0" td "" )

- Số 0 thì ghi là 0, cớ sao lại ghi là "0" ?

- Chú ý hàm (command "text"...) trong 2 trường hợp h=0 và h/=0 thì cách viết khác nhau nhé!

P/S: srr, tôi bị nhầm! Để xem lại lỗi của lsp ở đâ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

Ít nhất thì hàm dưới đây bạn đã viết sai cú pháp:

(command "text" "j" "mc" a1 "0" td "" )

- Số 0 thì ghi là 0, cớ sao lại ghi là "0" ?

- Chú ý hàm (command "text"...) trong 2 trường hợp h=0 và h/=0 thì cách viết khác nhau nhé!

Mấy dòng đó là vẫn của lisp gốc đó bác Doan Van Ha ah.Bình thường chưa thêm code, lisp vẫn chạy ngon.

Em chỉ sửa thêm mấy dòng code theo hướng dẫn ở bước 1,2,3 của bác phamthanhbinh ở bài #4 để lisp chạy theo ý muốn thui ah

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ấy dòng đó là vẫn của lisp gốc đó bác Doan Van Ha ah.Bình thường chưa thêm code, lisp vẫn chạy ngon.

Em chỉ sửa thêm mấy dòng code theo hướng dẫn ở bước 1,2,3 của bác phamthanhbinh ở bài #4 để lisp chạy theo ý muốn thui ah

 

Tôi không có font của bạn nên hơi khó. Hình như bạn dư 2 dấu "" ở cuối các dòng (command "text"...). Thử bỏ nó xem sao

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
Đăng nhập để thực hiện theo  

×