Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
eike2000

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

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

eike2000    0

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 à

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
phamthanhbinh    3.123

 

đâ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....

  • Vote tăng 2

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
Doan Van Ha    2.676

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

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
ketxu    2.649

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

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

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

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

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

bác 

phamthanhbinh 

có sẵn lisp vẽ hình chữ nhật bằng cách pick 2 điểm của đường chéo không?

tại em tìm trên diễn đàn mà không có. nếu bác còn lisp đấy thì cho em xin em cám ơn bác nhiều lắm.

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
Danh Cong    108

bác  phamthanhbinh 

có sẵn lisp vẽ hình chữ nhật bằng cách pick 2 điểm của đường chéo không?

tại em tìm trên diễn đàn mà không có. nếu bác còn lisp đấy thì cho em xin em cám ơn bác nhiều lắm.

:blink:  :blink:  :blink:

Mình có đọc nhầm không ?

Bạn có bao giờ dùng lệnh "REC" chưa vậy !

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
cuongtk2    40

Vẽ hình chữ nhật theo 3 điểm là một nhu cầu chính đáng. 

Điểm 1;2 để xác định L1 , điểm 3 để xác định L2 và hướng vẽ cạnh còn lại.

(defun c:hcn3 ( / p1 p2 p3 p4 l1 l2 int ang ang1)

  (setq osm (getvar "osmode"))

  (setvar "osmode" 0)

  (setq p1 (getpoint "\nChon diem dat:")

p2 (getpoint "\nChon diem thu 2:" p1)

p3 (getpoint "\nChon diem thu 3:" p1)

l1 (distance p1 p2)

l2 (distance p1 p3)

ang (angle p1 p2)

int (polar p3 (+ ang (* pi 0.5)) 10)

int (inters p1 p2 p3 int nil)

ang1 (angle int p3))

 

  (setq p3 (polar p2 ang1 l2)

p4 (polar p1 ang1 l2))

  (command "pline" p1 p2 p3 p4 "c")

  (setvar "osmode" osm)

  )

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
Bee    108

:blink:  :blink:  :blink:

Mình có đọc nhầm không ?

Bạn có bao giờ dùng lệnh "REC" chưa vậy !

Heizz ngôn ngữ tiếng Việt giờ hay nói tắt nên khó hiểu là phải ^_^

Pick 2 điểm thuộc 2 đường chéo khác mà pick 2 điểm thuộc 1 đường chéo khác. Khó hiểu nên người viết 1 kiểu còn người trả lời 1 kiểu. ^_^

Anh nghĩ nên chờ đủ dữ liệu hãy trả lời ^_^

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  

×