Đến nội dung


Hình ảnh
- - - - -

[yêu cầu] 3 lisp vẻ hcn, in text, và cộng giá trị text


  • Please log in to reply
4 replies to this topic

#1 eike2000

eike2000

    biết pan

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

Đã gửi 03 December 2011 - 11:50 AM

1. các bạn có lisp vẽ hình chử nhật bằng cách bắt 3 điểm không? tức là mình pick điềm, a, b, c thí có hcn với dài =ab, cao = ac, lúc thực hiện lisp, pick diểm 2 có xuất hiện dây tóc nối p1 và sau đó là p3 nối p2, hình chạy thep othor, không méo.
2 lisp tính diện tích 1 hình bằng cách pick hoặc chọn cũng dc. mình đã viết ra :

defun c:ty( / sel ent dientich)
(setq sel (entsel "\nHay chon doi tuong: "))
(setq ent (car sel))
(command ".area" "o" ent)
(setq dientich (getvar "area"))
(fix dientich)
(command "text" "s" "standard" pause 2000 0 dientich )
(princ)
)
nhưng kết quá xuất ví dụ ô vuông 10.000x10.000 =1.000000000000000E+008 lẽ ra phải là 100.000.000.
3. mình xin lisp tính tổng các giá trị trong nhiều text ví dụ : có text 1 là 3, text 2 là 4 thì mình dc text 3 là 7 .

đây là lần thứ 4 mình xin lisp vì cứ xin là admin xóa bài hoặc cứ người khác ỷ biết rồi cứ bảo search, trời đất nếu search ra thì hỏi làm gì. các bạn trả lời qua email mình dùm cũng dc, mình đang cần các bạn à
  • 0

#2 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 03 December 2011 - 02:30 PM


đây là lần thứ 4 mình xin lisp vì cứ xin là admin xóa bài hoặc cứ người khác ỷ biết rồi cứ bảo search, trời đất nếu search ra thì hỏi làm gì. các bạn trả lời qua email mình dùm cũng dc, mình đang cần các bạn à

Hề hề hề.
Thư nhất, bạn nên đọc lại quy định của diễn đàn. Việc bài post của bạn bị xóa có thể là do bài của bạn đã vi phạm một hay nhiều quy định đó. bạn cần hiểu rõ và thực hiện đúng các quy định này thì mới không bị xóa bài bạn ạ.
Việc bạn không search được những vấn đề bạn cần quan tâm là do kỹ năng tìm kiếm của bạn chứ không phải do người bảo bạn search, Sở dĩ ai đó nói bạn search tức là vấn đề bạn hỏi đã được đề cập thảo luận rồi và co lẽ cũng đã có kết luân rõ ràng. Vì thế khi tìm kiếm bạn không chỉ có được kết quả mà có thể còn có được cách suy luận và cách giải quyết vấn đề một cách thấu đáo hơn. Điều này lợi nhiều mà hại ít so với cái việc bạn ngồi chờ kết quả mà chả hiểu vì sao có cái kết quả ấy. Vậy nên kỹ năng đó bạn nên học chứ không nên lười.
Bạn nói mọi người email cho bạn nhưng không cho biết địa chỉ email của bạn thì chỉ là nói suông. Diễn đàn không khuyến khích việc trao đổi qua mail vì như vậy chỉ là các trao đổi riêng tư chứ chả có gì liên quan tới diễn đàn chung cả. Các mối quan tâm riêng thì nên để nó riêng mà không nên đưa lên diễn đàn vì nó sẽ bị free và có thể sẽ không có lợi cho ai đó.
Thứ hai, về các vấn đề bạn hỏi:
1/- Yêu cầu vẽ hinh chữ nhật qua 3 điểm như của bạn là không khả thi vì chả ai dám đảm bảo rằng việc pick 3 điểm của bạn sẽ đạt được ab vuông góc với ac để có thể có hình chữ nhật theo Ortho và có các cạnh ab ac như bạn nói. Thực tế việc vẽ hình chữ nhật theo ortho như bạn nói chỉ cần có hai điểm đầu đường chéo là đủ bạn ạ. vậy nên bạn hãy suy nghỉ lại và đặt vấn đề sao cho nó hợp lý thì mới có thể có giải pháp được.
2/- Cái lisp của bạn có chỗ thừa và có chỗ sai. Thừa cái thằng (fix dientich) vì chả thấy bạn dùng nó làm chi. Sai cái thằng (command "text" "s" "standard" pause 2000 0 dientich ) vì biến dientich không phải là text.
Tuy nhiên cái két quả trả về của bạn là 1.000000000000000E+008 ( thực ra là giá trị của biến dientich ) là đúng với giá trị bạn cần 100.000.000.
Chỉ có điều nó được thể hiện theo hai cách khác nhau mà thôi.
Để có được cái kết quả như bạn muốn thì bạn hãy thay: (setq dientich (getvar "area")) bằng (setq dientich (rtos (getvar "area") 2 0)) và xóa cái dòng (fix dientich) đi.
3/- Lisp thực hiện các phép tính số học với các text số trên diễn đàn đã có khá nhiều. Do bạn chưa tìm kiếm hay là kiếm chưa ra như bạn nói nên mình tìm hộ bạn một địa chỉ này. Bạn hãy vào và xem thử xem nó có đạt cái yêu cầu bạn cần không.? Nếu chưa đạt thì chưa đạt chỗ nào và bạn cần sửa chỗ đó ra sao.? Khi đó mọi người sẽ giúp bạn được tốt hơn:
http://www.cadviet.c...xt&fromsearch=1
Còn một số bài khác nữa cũng liên quan tới việc bạn hỏi. hãy kiếm thử xem nhé.
4/- bạn không nên tiết kiệm công sức tới mức post một lần cả đống vấn đề như thế này. Hãy tách ra thành từng câu hỏi riêng thì mọi người sẽ dễ dàng giúp hơn. Vì có thế có người giỏi một vấn đề bạn đưa ra thôi chứ không phải ai cũng có đủ giỏi và đủ thời gian quan tâm tới tất cả các vấn đề của bạn được.

Hề hề hề. cám ơn bạn vì đã chịu khó đọc hết bài post của mình....
  • 2
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 03 December 2011 - 03:24 PM

1/- Yêu cầu vẽ hinh chữ nhật qua 3 điểm như của bạn là không khả thi vì chả ai dám đảm bảo rằng việc pick 3 điểm của bạn sẽ đạt được ab vuông góc với ac để có thể có hình chữ nhật theo Ortho và có các cạnh ab ac như bạn nói. Thực tế việc vẽ hình chữ nhật theo ortho như bạn nói chỉ cần có hai điểm đầu đường chéo là đủ bạn ạ. vậy nên bạn hãy suy nghỉ lại và đặt vấn đề sao cho nó hợp lý thì mới có thể có giải pháp được.


Về vấn đề này, có lẽ bạn ấy muốn như vầy chăng?

;Doan Van Ha - CADViet.com - (03-12-2011)
;Ve Hinh chu nhat nghieng theo 3 diem nhap vao.
(defun C:HA()
(BAT_DAU)
(initget 1) (setq pa (getpoint "\nPick diem A: "))
(initget 1) (setq pb (getpoint pa "\nPick diem B: "))
(acet-sysvar-set (list "cmdecho" 0))
(command "ucs" "z" (/ (* 180 (angle pa pb)) pi))
(setq pa (trans pa 0 1))
(setq pb (trans pb 0 1))
(grvecs (list -3 pa pb))
(acet-sysvar-set (list "orthomode" 1))
(initget 1) (setq pc (getpoint pb "\nPick diem C: "))
(command "rectangle" pa pc)
(redraw)
(command "ucs" "w")
(acet-sysvar-restore)
(KET_THUC)
(princ))
(defun BAT_DAU()
(vl-load-com)
(setq AcDoc (vla-get-activeDocument (vlax-get-acad-object)))
(vla-StartUndoMark AcDoc)
(setq err *error* *error* KHI_LOI))
(defun KET_THUC()
(acet-sysvar-restore)
(vla-EndUndoMark AcDoc)
(setq *error* err))
(defun KHI_LOI(msg)
(acet-sysvar-restore)
(vla-EndUndoMark AcDoc)
(redraw)
(command "u")
(princ (strcat "\n" msg ", Reset System Variables\n"))
(setq *error* err))

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


#4 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 03 December 2011 - 06:36 PM

Hoặc isometric rectang :
Động :

(defun c:test(/ pt1 pt2 pt4 vl typ)
(setq pt1 (getpoint "\nP1 :") pt2 (getpoint pt1 "\nP2:"))
(while (setq gr (grread t 15 0))
(redraw)
(setq typ (car gr) vl (cadr gr))
(cond
((and (= typ 5) (listp vl))
(grvecs (list -3 pt1 pt2 pt2 vl vl (setq pt4 (polar pt1 (angle pt2 vl) (distance pt2 vl))) pt4 pt1)))
((= typ 3)
(entmake (append (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity") '(100 . "AcDbPolyline")(cons 90 4)(cons 70 1))
(mapcar '(lambda (x) (cons 10 x)) (list pt1 pt2 vl pt4)))))
(T(exit))
)
)(princ)
)
Tĩnh :

(defun c:test1(/ p1 p2 p3 p4)
(and (setq p1 (getpoint "\nP1 :") p2 (getpoint p1 "\nP2") p3 (not (grdraw p1 p2 3 -1)) p3 (getpoint p2 "\nP3:"))
(entmake (append (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity") '(100 . "AcDbPolyline")(cons 90 4)(cons 70 1))
(mapcar '(lambda (x) (cons 10 x)) (list p1 p2 p3 (polar p1 (angle p2 p3) (distance p2 p3))))))
)(redraw))

  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#5 eike2000

eike2000

    biết pan

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

Đã gửi 05 December 2011 - 08:40 AM

thật tuyệt vời, sau 4 lần xin đã dc 4 câu trả lời rất ưng ý, mình rất cám cơn các bạn đã cố gắng giúp mình, mình có thể tính khối lượng san lấp 120k m² rất thuật tiện. đồng thời mình cũng phát hiện ra, nếu mình đưa tất cả các text vào cùng 1 layer rồi copy ra, và chuyển tcột từ dang text sang mtex mằng lệnh txt2mtxt rồi copy qua notepad, roi copy qua excel, mình có thể tự nhiên tính dc ngay mà không cầhh theo mục đích ban dầu : cộng từng text. dẫu sao vẫn cám ơn các bạn rất nhiều
  • 0