Đến nội dung


Hình ảnh
- - - - -

Cần nhờ viết list về kích thước


  • Please log in to reply
22 replies to this topic

#21 ui_troi_2005

ui_troi_2005

    biết vẽ arc

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

Đã gửi 12 March 2009 - 09:17 PM

Chào bạn Ui_trơi_2005,
Dựa trên cái hình bạn post lên, mình làm thử cái lisp này dựa trên cái lisp bạn đã post. Quả thực như bác Tue_NV đã nói, bạn trình bày vấn đề hơi sơ sài quá nên mình phải tự đoán mò mà viết. Chỗ nào chưa đúng ý bạn thì bạn hỏi lại nhé. Đây là mình mới thử xem đã đúng yêu cầu của bạn hay chưa. Nếu đúng phần nào thì mình sẽ cải thiện tiếp sau:

Về cái lisp bạn post lên, không hiểu do bạn tự viết hay của người khác viết. Mình thực sự thấy nó hơi lộn xộn. Mình xin góp ý các lỗi cơ bản như sau:
1/- cái hàm (while T ......) thực sự là một cái hàm vô nghĩa và nó sẽ hoặc là làm cho hàm không chạy, hoặc là làm nó chạy tít mù không có điểm dừng bạn ạ.
2/- Hàm lệnh (command "insert" ...... ) dùng để đưa một block có sẵn vào trong bản vẽ chứ đâu có dùng để nhập text được. Nếu bạn định dùng hàm này thì tất yếu trong cad của bạn phải có sẵn cái block mang tên là TD. khi đó ban sử dụng hai biến tx và ty để làm gì nhỉ???

Túm lại bạn cần tìm hiểu kỹ thêm thì mới có thể tự hiệu chỉnh các lisp có sẵn theo ý mình sử dụng được bạn ạ.

Về cái lisp của mình viết, hiện tại do chưa hiểu cái cách bạn sử dụng các le hoặc line nên mình tạm thời cố định các điểm đặt text theo tọa độ điểm chọn. Nếu bạn muốn điểm đặt này tùy ý bạn thì thay các điểm đặt này bằng hàm getpoint. Nếu bạn muốn các điểm đặt tuân theo một quy luật nào đó thì bạn phải nói rõ cái quy luật ấy mới có thể viết lisp được.
Cái lisp này mới cho bạn ghi tọa độ cho một điểm mỗi lần chạy. Nếu bạn muốn một lần chạy ghi được nhiều điểm thì mình có thể cải tiến thêm cho bạn nhưng bạn phải nói rõ cách thức chọn là chọn một tập hợp điểm rồi ghi kích thước một lần hay mỗi lần chọn một điểm thì ghi kich thước luôn cho điểm đo. Theo mình thì cách sau sẽ đễ viết lisp hơn.
Về các kích thước khác như kích thước đường kính, bán kính, kích thước thẳng, .... bạn cũng nên nói rõ cách bạn cần thể hiện thì mới có thể xác định cách viết lisp cho bạn được
Nhìn chung yêu cầu của bạn không quá khó nhưng khó ở chỗ bạn chưa tự sửa lisp theo ý mình được nên bạn cần trình bày càng chi tiết càng thuận lợi cho người viết lisp và bạn cũng dễ dàng khi sử dụng, không gặp phải những lỗi ngớ ngẩn do người viết lisp chưa hiểu đúng ý bạn.
Chả ai muốn cái lisp của mình lại mang lại sự khó chịu cho người sử dụng cả bạn ạ, nên bạn hãy cố gắng bạn nhé. Nếu có thể bạn post cả cái bản vẽ ban đầu và cái bản vẽ kết quả mà bạn muốn có thì sẽ tốt hơn nhiều là việc chỉ dùng lời mô tả bạn ạ.

Chúc bạn luôn vui và hạnh phúc với những điều bạn có.


Chào bác 'phamthanhbinh' .
Rất cảm ơn bác đã nói rõ những thiếu sót của em, thực ra em cũng chưa biết nhiều về lisp nên hỏi mà cũng lơ tơ mơ.
em đã up lên bản vẽ hoàn chỉnh đó rồi bác ạ. tuy nhiên do bất cẩn nên nó đã bị scale tỉ lệ 1/2, bác có thể SC lại với tỉ lệ là 2 là ok.
Ở đây em muốn ghi toạ độ X,Y.
- thứ nhất chọn độ chính xác sau dấu phảy bao nhiêu số(như lisp trên là ok)
- thứ hai chọn toạ độ gốc
- thứ ba chọn điểm cần ghi toạ độ
- thứ tư chọn vị trí đặt X dùng đường line để dóng từ điểm cần ghi toạ độ tới vị trí đặt gía trị toạ độ(dạng như khi vẽ lệnh LE)
- thứ năm chọn vị trí đặt Y dùng đường line để dóng từ điểm cần ghi toạ độ tới vị trí ghi toạ độ(dạng như khi vẽ lệnh LE)
chú ý: X,Y luôn vuông góc và X nằm ngang, Y nằm đứng
- enter tiếp thì tiếp tục bắt đầu từ thứ 2 (ko cần thứ nhất) và ghi xong các toạ độ này lại chuyển qua toạ độ thứ 3 cứ như vậy...

Đây chỉ là ý kiến của em, bác có cách nào hay hơn em sẵn lòng nghe bác chỉ bảo, mục đích của em là ghi đc toạ độ.

Rất cảm ơn bác, chúc bác luôn vui vẻ.
  • 0
Úi Trời!!!!!!!!!!!!!!!

#22 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 13 March 2009 - 02:15 PM

Chào bác 'phamthanhbinh' .
Rất cảm ơn bác đã nói rõ những thiếu sót của em, thực ra em cũng chưa biết nhiều về lisp nên hỏi mà cũng lơ tơ mơ.
em đã up lên bản vẽ hoàn chỉnh đó rồi bác ạ. tuy nhiên do bất cẩn nên nó đã bị scale tỉ lệ 1/2, bác có thể SC lại với tỉ lệ là 2 là ok.
Ở đây em muốn ghi toạ độ X,Y.
- thứ nhất chọn độ chính xác sau dấu phảy bao nhiêu số(như lisp trên là ok)
- thứ hai chọn toạ độ gốc
- thứ ba chọn điểm cần ghi toạ độ
- thứ tư chọn vị trí đặt X dùng đường line để dóng từ điểm cần ghi toạ độ tới vị trí đặt gía trị toạ độ(dạng như khi vẽ lệnh LE)
- thứ năm chọn vị trí đặt Y dùng đường line để dóng từ điểm cần ghi toạ độ tới vị trí ghi toạ độ(dạng như khi vẽ lệnh LE)
chú ý: X,Y luôn vuông góc và X nằm ngang, Y nằm đứng
- enter tiếp thì tiếp tục bắt đầu từ thứ 2 (ko cần thứ nhất) và ghi xong các toạ độ này lại chuyển qua toạ độ thứ 3 cứ như vậy...

Đây chỉ là ý kiến của em, bác có cách nào hay hơn em sẵn lòng nghe bác chỉ bảo, mục đích của em là ghi đc toạ độ.

Rất cảm ơn bác, chúc bác luôn vui vẻ.

Chào bạn Ui_troi_2005,
Bạn xài thử thằng này coi sao:
(DEFUN EXCUTE(/ n P TX TY)
(setq str (strcat "\nPhan so le muon lay [" (itoa sl) "] (press Enter or Space for get default): "))
(setq n (getint str))
(if (/= n Nil)
(setq sl n)
)
(setq oldmode (getvar "pdmode"))
(setq P Null)
(setq p1 (getpoint "\n Pick a point for base point"))
(setq h (getreal "\n Type the text height : "))
(setq oldort (getvar "orthomode"))
(setvar "orthomode" 1)
)
(defun getord ()
(princ "\nPick a point or press ESC for exit:")
(setq P (getpoint))
(if (/= P Nil)
(progn
(setvar "pdmode" 3)
(setq TX (rtos (- (Car P) (car p1)) 2 sl))
(setq TY (rtos (- (Cadr P) (cadr p1)) 2 sl))
(setq ix (rtos (/ (- (car p) (car p1)) 25.4) 2 sl))
(setq iy (rtos (/ (- (cadr p) (cadr p1)) 25.4) 2 sl))
(command "point" p )
(setq p2 (getpoint p "\n Chon diem dat toa do X ")
p3 (getpoint p "\n Chon diem dat toa do Y ")
)
(command "text" p3 h 90 (strcat iy " [" ty "]"))
(Command "line" p p3 "")
(command "text" p2 h 0 (strcat ix " [" tx "]"))
(command "line" p p2 "")
)
)
(setq ans (getstring "\n Do you want to continue ?"))
)
(DEFUN INIT()
(if (= sl Nil)
(setq sl 2)
)
)
(defun check (/ans)
(if (= ans "y")
(getord)
)
)
(DEFUN C:TOADO()
(INIT)
(EXCUTE)
(getord)
(while (= ans "y")
(check ans)
)
(setvar "pdmode" oldmode)
(setvar "orthomode" oldort)
)

Hy vọng bạn hài lòng.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#23 ui_troi_2005

ui_troi_2005

    biết vẽ arc

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

Đã gửi 19 March 2009 - 11:02 AM

Chào bạn Ui_troi_2005,
Bạn xài thử thằng này coi sao:

(DEFUN EXCUTE(/ n P TX TY)
(setq str (strcat "\nPhan so le muon lay [" (itoa sl) "] (press Enter or Space for get default): "))
(setq n (getint str))
(if (/= n Nil)
(setq sl n)
)
(setq oldmode (getvar "pdmode"))
(setq P Null)
(setq p1 (getpoint "\n Pick a point for base point"))
(setq h (getreal "\n Type the text height : "))
(setq oldort (getvar "orthomode"))
(setvar "orthomode" 1)
)
(defun getord ()
(princ "\nPick a point or press ESC for exit:")
(setq P (getpoint))
(if (/= P Nil)
(progn
(setvar "pdmode" 3)
(setq TX (rtos (- (Car P) (car p1)) 2 sl))
(setq TY (rtos (- (Cadr P) (cadr p1)) 2 sl))
(setq ix (rtos (/ (- (car p) (car p1)) 25.4) 2 sl))
(setq iy (rtos (/ (- (cadr p) (cadr p1)) 25.4) 2 sl))
(command "point" p )
(setq p2 (getpoint p "\n Chon diem dat toa do X ")
p3 (getpoint p "\n Chon diem dat toa do Y ")
)
(command "text" p3 h 90 (strcat iy " [" ty "]"))
(Command "line" p p3 "")
(command "text" p2 h 0 (strcat ix " [" tx "]"))
(command "line" p p2 "")
)
)
(setq ans (getstring "\n Do you want to continue ?"))
)
(DEFUN INIT()
(if (= sl Nil)
(setq sl 2)
)
)
(defun check (/ans)
(if (= ans "y")
(getord)
)
)
(DEFUN C:TOADO()
(INIT)
(EXCUTE)
(getord)
(while (= ans "y")
(check ans)
)
(setvar "pdmode" oldmode)
(setvar "orthomode" oldort)
)

Hy vọng bạn hài lòng.


Thật tuyệt vời bác Phanthanhbinh ơi.
cảm ơn bác nhiều lắm cơ, phiền bác chỉnh giúp em cái đường ghi nó đúng giữa chữ

phen này em xin làm đệ bác mong bác thu nhận
nick em là ui_troi_2005, khi nào có dịp mong bác chỉ bảo cho em chút kiến thức

Rất hân hạnh được biết bác.
  • 0
Úi Trời!!!!!!!!!!!!!!!