Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
7 replies to this topic

#1 bach1212

bach1212

    biết lệnh trim

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

Đã gửi 25 November 2011 - 04:57 PM

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é!
  • 0

Một môn tập luyện mang lại vô vàn lợi ích sức khỏe cho mọi người, nhiều bệnh tật nan y đều được chữa khỏi, hoàn toàn miễn phí. Hiệu quả chữa khỏi bệnh tật của nó lên đến hơn 90%.
Tài liệu tại đây: http://phapluan.org/

Rất vui được làm quen với mọi người trên facebook:
https://www.facebook...67946371&type=1

 

 


#2 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 26 November 2011 - 10:52 AM

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

#3 bach1212

bach1212

    biết lệnh trim

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

Đã gửi 28 November 2011 - 12:32 PM

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
  • 0

Một môn tập luyện mang lại vô vàn lợi ích sức khỏe cho mọi người, nhiều bệnh tật nan y đều được chữa khỏi, hoàn toàn miễn phí. Hiệu quả chữa khỏi bệnh tật của nó lên đến hơn 90%.
Tài liệu tại đây: http://phapluan.org/

Rất vui được làm quen với mọi người trên facebook:
https://www.facebook...67946371&type=1

 

 


#4 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 28 November 2011 - 03:24 PM

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

#5 bach1212

bach1212

    biết lệnh trim

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

Đã gửi 30 November 2011 - 12:14 PM

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&#203;p t&#170;n &#174;i&#211;m l&#202;y to&#185; d&#233; : "))
(if (or (= td "") (= td " "))
(setq td (cdr (assoc 1 (entget (car (entsel "\n Chon text san co tren ban ve"))))))
)
(setq tp (getpoint "\Ch&#228;n &#174;i&#211;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
  • 0

Một môn tập luyện mang lại vô vàn lợi ích sức khỏe cho mọi người, nhiều bệnh tật nan y đều được chữa khỏi, hoàn toàn miễn phí. Hiệu quả chữa khỏi bệnh tật của nó lên đến hơn 90%.
Tài liệu tại đây: http://phapluan.org/

Rất vui được làm quen với mọi người trên facebook:
https://www.facebook...67946371&type=1

 

 


#6 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 01 December 2011 - 10:04 AM

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

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#7 bach1212

bach1212

    biết lệnh trim

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

Đã gửi 01 December 2011 - 03:32 PM

Í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
  • 0

Một môn tập luyện mang lại vô vàn lợi ích sức khỏe cho mọi người, nhiều bệnh tật nan y đều được chữa khỏi, hoàn toàn miễn phí. Hiệu quả chữa khỏi bệnh tật của nó lên đến hơn 90%.
Tài liệu tại đây: http://phapluan.org/

Rất vui được làm quen với mọi người trên facebook:
https://www.facebook...67946371&type=1

 

 


#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 01 December 2011 - 04:17 PM

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
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.