Đến nội dung


Hình ảnh
- - - - -

[Đã xong] - Lisp Calculator thay thế cho máy tính của CAD


  • Please log in to reply
22 replies to this topic

#1 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 08 May 2013 - 03:50 PM

Thực ra thì ban đầu mình chỉ định viết 1 hàm con xuất kết quả tính toán có tích hợp 1 máy tính để tính toán tiếp với các phép tính đơn giản. Tuy nhiên sau đó được sự trợ giúp của các bạn Tue_NV, KangKung và các ý tưởng của Thaistreetz, mình phát triển nó thành 1 lisp hoàn thiện đủ sức thay thế máy tính dòng lệnh của CAD (lệnh CAL), cung cấp cho người dùng khả năng tính toán linh hoạt, liên tục và trực quan hơn. Các bạn có thể download tại đây.

Trong file lisp các bạn down về có 2 phần:

- Phần 1: Lệnh CAC dùng thay thế cho CAL để tính toán

86046_bbbb.gif

 

 

Phần 2: Hàm con xuất kết quả để các bạn có thể dùng nó để nhúng vào code lisp của các bạn

Cấu trúc: (Calculator-export-Result value) Value: là Interger, Real hoặc nil

86046_aaa.gif

 

Với hàm xuất kết quả này các bạn có thể:

- Tính toán tiếp với giá trị value

- Xuất giá trị value vào text

- Copy giá trị Value vào Clipboard để Paste vào đâu tùy các bạn (Click chuột phải chứ không pick vào text)

- Tùy chọn làm tròn value trước khi xuất (các bạn sử dụng 2 phím ] và [ để làm việc này)

- Khi tính toán, các bạn có thể nhập phép tính trực tiếp từ bàn phím hoặc lấy các giá trị từ các text trên màn hình)

 

PS: Mình sẽ tiếp tục update nếu nhận được các ý tưởng tốt hơn từ các bạn.

 


  • 12

#2 Hantinhsaycad

Hantinhsaycad

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 1073 Bài viết
Điểm đánh giá: 376 (khá)

Đã gửi 08 May 2013 - 04:01 PM

Đã tài về máy ,  thank Thuylinh313 trước nha


  • 0

Đừng để một ai chẳng nhận được gì khi rời chỗ bạn, cho dù bạn biết rằng không bao giờ gặp lại.

Ngạn ngữ Pháp


#3 hoa dai nhan

hoa dai nhan

    biết lệnh ddedit

  • Members
  • PipPipPipPip
  • 297 Bài viết
Điểm đánh giá: 50 (tàm tạm)

Đã gửi 08 May 2013 - 04:41 PM

Bạn ơi, mình đánh lệnh tcd vào nó không nhận, còn lệnh cac thì nhận.

sao bạn không thêm phần tính diện tích và thể tích nữa.


  • 0

#4 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 08 May 2013 - 04:50 PM

Thực ra thì ban đầu mình chỉ định viết 1 hàm con xuất kết quả tính toán có tích hợp 1 máy tính để tính toán tiếp với các phép tính đơn giản. Tuy nhiên sau đó được sự trợ giúp của các bạn Tue_NV, KangKung và các ý tưởng của Thaistreetz, mình phát triển nó thành 1 lisp hoàn thiện đủ sức thay thế máy tính dòng lệnh của CAD (lệnh CAL), cung cấp cho người dùng khả năng tính toán linh hoạt, liên tục và trực quan hơn. Các bạn có thể download tại đây.

 

CAC chưa đủ sức thay thế lệnh CAL đâu.  :lol:

Lệnh CAL có thể transparent Command. Còn CAC thì không


  • 0

#5 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 08 May 2013 - 05:19 PM

Xét như thế thì vô cùng lắm. Mình có thể viết để transparent được và cũng đã có ý định như thế. nhưng xét đi xét lại, phải thay đổi thuật toán, làm chậm chương trình chỉ vì 1 chức năng ít dùng thì không đáng.

Tương tự, khi viết lisp này đồng nghiệp của mình có ý kiến thêm chức năng ghi kết quả ra màn hình bằng 1 text mới. Đây cũng là chức năng mà mình thấy hầu như không dùng nên không cho vào. khi cần thì có thể kích chuột phải rồi Ctrl+V là xong.

 

Ngược lại, nếu dùng CAC hơn CAL khá nhiều. Đặc biệt là khả năng tính toán với Integer lớn. Cách thức làm việc của nó làm cho khoảng cách giữa tính toán dòng lệnh và tính toán qua giao diện UI (qcal) gần nhau hơn

 

Ở đây mình chỉ xem xét việc thay thế ở khía cạnh tính toán thông thường thôi. :)


  • 0

#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 08 May 2013 - 05:29 PM

Ở đây mình chỉ xem xét việc thay thế ở khía cạnh tính toán thông thường thôi. :)

1). Chấp nhận trích lục này của bạn, bởi CAL nó mênh mông mà nhu cầu chưa đến nỗi thế.

2). Ý tưởng này tốt. Mình vote. Tuy nhiên, để thực hiện ý tưởng cho thấu đáo cũng cần chờ test và comment nữa để hoàn thiện.

3). Tiếc là tất cả lisp của Tue_NV, KK... đều chưa giải quyết hết chuyện cũ >> lisp của bạn bị lỗi theo.

Một VD: 1*exp10(2). Và còn nhiều ví dụ nữa.


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

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 08 May 2013 - 07:15 PM

3). Tiếc là tất cả lisp của Tue_NV, KK... đều chưa giải quyết hết chuyện cũ >> lisp của bạn bị lỗi theo.

Một VD: 1*exp10(2). Và còn nhiều ví dụ nữa.

 

Còn 1 số lỗi nữa, nhưng mà thôi: Bạn TL đóng gói "fas" nên Tue_NV không có hứng mà chỉnh sửa nữa rồi........


  • 0

#8 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 08 May 2013 - 08:44 PM

Mình đóng gói fas là vì trong đó có những thứ không phải của mình, không chỉ hàm của bạn viết giùm mình thôi đâu. Mình chỉ có thể chia sẻ code khi tác giả của nó chia sẻ. Từ khi tham gia diễn đàn đến giờ mình cởi mở như thế nào chắc bạn hiểu. Thêm nữa, mình không phải là người đầu tiên mã hóa lisp để chia sẻ. mình thấy nhiều bạn, kể cả mod hay admin nick xanh nick đỏ cũng đã làm như vậy khi cần thiết. Code như thế nào không quan trọng, quan trọng là ý tưởng chia sẻ cho nhau thôi.

@ ĐVH: Mình không quan trọng chuyện vote hay không, nó không có ý nghĩa gì với mình lắm! Nặng nề chuyện đó chỉ khiến mất long nhau. Mình thích các đóng góp ý tưởng hoặc những lời khen-chê hơn :)


  • 0

#9 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 08 May 2013 - 09:37 PM

 ĐVH: Mình không quan trọng chuyện vote hay không, nó không có ý nghĩa gì với mình lắm! Nặng nề chuyện đó chỉ khiến mất long nhau. Mình thích các đóng góp ý tưởng hoặc những lời khen-chê hơn :)

1). Nhưng mình có quyền vote nếu thấy ý tưởng đó đối với mình là tốt chứ nhỉ?

2). Mình nhắc lại một điều này: mình vẫn cho ý tưởng của bạn là tốt. Tuy nhiên, cái cách để chuyển 1 biểu thức cal dạng string thì còn lắm vấn đề, bởi các lisp mà bạn đang sử dụng để làm dẫn xuất đều chỉ xét tới number hoặc không number mà không hề xét bản chất của 1 biểu thức cal.

3). Do mình không thích phải đi tìm từng cái lắt nhắt (dù rất cần thiết) và có thể sẽ đụng chạm tới người khác nên đành thôi vậy.


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


#10 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 08 May 2013 - 09:56 PM

1). Nhưng mình có quyền vote nếu thấy ý tưởng đó đối với mình là tốt chứ nhỉ?

2). Mình nhắc lại một điều này: mình vẫn cho ý tưởng của bạn là tốt. Tuy nhiên, cái cách để chuyển 1 biểu thức cal dạng string thì còn lắm vấn đề, bởi các lisp mà bạn đang sử dụng để làm dẫn xuất đều chỉ xét tới number hoặc không number mà không hề xét bản chất của 1 biểu thức cal.

3). Do mình không thích phải đi tìm từng cái lắt nhắt (dù rất cần thiết) và có thể sẽ đụng chạm tới người khác nên đành thôi vậy.

 

Tue_NV xét rồi đây bác, code này hồi âm bài viết của bạn TL. Cảm ơn bạn đã chia sẻ

Thử : (Cal(Tue-int-real "exp10(2)")) -> 100.0

(Cal(Tue-int-real "d2r(180)")) ->  3.14159

 

@bác DVH: Bác tìm lỗi thử. Có gì mà ngại bác. Bác tìm ra lỗi thì Tue_NV còn tick Thanks và cảm ơn bác nữa ấy chứ.

 
(defun Tue-int-real(str / str-res str2)
;;;write by Tue_NV
  ;;;;;example: (Tue-int-real "a2b3.1c5") -> "a2.0b3.1c5.0"
  ;;;;;(Tue-int-real "aa2222b3.1c56") -> "aa2222.0b3.1c56.0"
  ;;;;;(Tue-int-real "sqrt(5E10+6E9)") -> "sqrt(50000000000.0+6000000000.0)"
 (vl-load-com) (setvar "dimzin" 0)
(setq str-res "" str2 str)
  (while (/= (strlen str2) 0)
    (if (wcmatch (strcase (substr str2 1 5)) "EXP10*")
      (setq str2 (vl-string-left-trim "ABCDEFGHIKLMNOPQRSTUYZXY+-*/%( ),#@$^!~_&^\\" (strcase (substr str2 6 (strlen str2)))))
      (if (wcmatch (strcase (substr str2 1 3)) "D2R*,R2D*")
(setq str2 (vl-string-left-trim "ABCDEFGHIKLMNOPQRSTUYZXY+-*/%( ),#@$^!~_&^\\" (strcase (substr str2 4 (strlen str2)))))
        (setq str2 (vl-string-left-trim "ABCDEFGHIKLMNOPQRSTUYZXY+-*/%( ),#@$^!~_&^\\"  (strcase str2)))))
    (if (/= (strlen str2) 0) 
(setq str-res (strcat str-res (substr str 1 (- (strlen str) (strlen str2))) (vl-string-right-trim "0" (rtos (atof str2) 2 9))))
(setq str-res (strcat str-res (substr str 1 (- (strlen str) (strlen str2))) ))
    )
    (if (= (substr str-res (strlen str-res) 1) ".") (setq str-res (strcat str-res "0")))
    (setq str2 (vl-string-left-trim "E1234567890 ."  str2)
 str (substr str (1+ (- (strlen str) (strlen str2))) (strlen str))
    )
  )
str-res
  )

  • 1

#11 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 08 May 2013 - 10:13 PM

Lại "gan" giống KK bữa trước! Đùa vui thôi nhé, chứ không có ý xấu đâu.

Còn tỉ tỉ ví dụ (nói đùa như người QN-ĐN ấy mà):

VD2: 5d5'5"


  • 1

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


#12 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 08 May 2013 - 10:31 PM

Lại "gan" giống KK bữa trước! Đùa vui thôi nhé, chứ không có ý xấu đâu.

Còn tỉ tỉ ví dụ (nói đùa như người QN-ĐN ấy mà):

VD2: 5d5'5"

 

Chắc chỉ còn 1 TH độ phút giây nữa thôi bác ơi!. 

Có đâu mà tỉ tỉ... có một, có một mới đúng  :D 


  • 0

#13 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 08 May 2013 - 10:38 PM

Vậy thì like tiếp đi. Còn 1 tỉ tỉ nữa nhé!

cvunit(1,inch,cm)


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


#14 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 May 2013 - 12:18 AM

@bác DVH: Bác tìm lỗi thử. Có gì mà ngại bác. Bác tìm ra lỗi thì Tue_NV còn tick Thanks và cảm ơn bác nữa ấy chứ.

Em chả thấy mấy đâu ^^


  • 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


#15 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 09 May 2013 - 08:24 AM

Tue_NV xét rồi đây bác, code này hồi âm bài viết của bạn TL. Cảm ơn bạn đã chia sẻ

Thử : (Cal(Tue-int-real "exp10(2)")) -> 100.0

(Cal(Tue-int-real "d2r(180)")) ->  3.14159

Khi sử dụng code của bạn mình thấy có trường hợp này gây lỗi nghiêm trọng không thoát được khỏi vòng lặp while:

Nếu chuỗi gốc sau khi Upcase tồn tại các ký tự đặc biệt không nằm trong dãy ký tự "ABCDEFGHIKLMNOPQRSTUYZXY+-*/%( );^\\" và "E1234567890 ". Vì thế mình đã sửa nó đi một chút bằng cách thêm 1 bước kiểm tra chiều dài str2 có thay đổi không sau 1 vòng lặp.


  • 0

#16 Song Nhi

Song Nhi

    biết vẽ rectang

  • Members
  • PipPip
  • 83 Bài viết
Điểm đánh giá: 52 (tàm tạm)

Đã gửi 09 May 2013 - 10:14 PM

@ Chị ThuyLinh dùng cách nào để quay lại màn hình lúc thực hiện lệnh hay vậy? Cách trình bày của chị thật trực quan!

Đối với lệnh phần 2, sau khi lấy chiều dài của nhóm đối tượng để tính toán và gán kết quả vào một text có sẵn, nếu muốn trong quá trình tính toán lại tham chiếu tới một "tổng chiều dài" của một nhóm đối tượng khác nữa thì làm cách nào hả chị? 


  • 1

#17 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 10 May 2013 - 02:43 PM

Mình dùng phần mềm GifCam để quay Song Nhi ạ. Phần mềm này nhẹ, chỉ có 1 file exe thôi, sử dụng lại rất dễ dàng đơn giản.

Lệnh phần 2: Mình cần phải lưu ý: lệnh TCD là 1 ứng dụng khác của mình. Trong trường hợp này mình dùng nó chỉ để minh họa cách sử dụng hàm Calculator-export-Result chứ không phải là mình đang chia sẻ lệnh TCD. phần này không có ý nghĩa gì với người sử dụng cad. Nó chỉ có ý nghĩa với các bạn lập trình Lisp thui.

 

Sau khi lấy chiều dài của nhóm đối tượng để tính toán và gán kết quả vào một text có sẵn, nếu muốn trong quá trình tính toán lại tham chiếu tới một "tổng chiều dài" của một nhóm đối tượng khác nữa thì làm cách nào hả chị? 

Hiện tại thì lisp trên chưa hỗ trợ, nhưng ý tưởng này rất hay! mình rất thích! Mãi mới thấy có 1 ý tưởng tốt hơn cho Lisp này. Mình sẽ update chức năng này trong bài sau. Cảm ơn Nhi nha!


  • 0

#18 hung1608

hung1608

    biết lệnh rotate

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

Đã gửi 17 August 2015 - 02:24 PM

Lisp nay tuyệt vời rùi, đối với người hay nhập code thì quả là trên cả tuyệt vời :)


  • 1

#19 hoquangvinh

hoquangvinh

    biết lệnh mirror

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

Đã gửi 18 August 2015 - 09:15 AM

Hiện tại thì lisp trên chưa hỗ trợ, nhưng ý tưởng này rất hay! mình rất thích! Mãi mới thấy có 1 ý tưởng tốt hơn cho Lisp này. Mình sẽ update chức năng này trong bài sau. Cảm ơn Nhi nha!

ban đầu nghe thì thấy có vẻ thừa vì cal có sẵn rồi tội gì nữa nhưng sau khi xem thì thấy nó tiện quá cả text cả nhập đều được nên chơi luôn

mình chưa biết là đã có bài sau chưa bạn nhỉ


  • 0

#20 Chiron

Chiron

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 90 (tàm tạm)

Đã gửi 18 August 2015 - 02:18 PM

ThuyLinh313 có thể cải tiến thêm 1 chút các yêu cầu sau được không:

- Lấy kết quả từ dim để tính toán.

- Thêm con trỏ (dấu nháy - cursor) để biết vị trí và di chuyển được bằng phím mũi tên.

102896_dim_calc.gif

 

ps: Sao mình không dùng được lệnh tcd nhỉ?


  • 0