samifox Posted July 5, 2017 Posted July 5, 2017 hi using acad 2017 ive got a simple formula that does a math and print out the result, but i want it to print out the whole formula and the result. how to do it? see attachment field_frml.dwg Quote
BIGAL Posted July 6, 2017 Posted July 6, 2017 It could be done say for the 4 simple calculations using a cond type the string 4.83 x 7.05, look for a x - + / then split the text into num1 num2 and math. definatley not tested (setq num1 (getreal "enter 1st value")) (setq num2 (getreal "enter 2nd value")) (setq math (getstring "enter math value")) (cond ((= (strcase math) "X")(setq ans (strcat (rtos num1 2 2 ) " " math " " (rtos num2 2 2) " = " (rtos (* num1 num2) 2 2 ))))) ... same for + - / ) (command "Text" pt "" "" ans) Quote
samifox Posted July 6, 2017 Author Posted July 6, 2017 Thanks BIGAL. i was hoping to more friendly way to do it but LISP was a true solution, after all "Feilds" are there to serve non-programmers anyway Thanks again Lisp here i come Shay Quote
BIGAL Posted July 6, 2017 Posted July 6, 2017 (edited) Here is a dcl front end 3rd line would be * / - + (ah:getval3 "1st number " 5 4 "1" "2nd number " 8 7 "2" "Math operation + - / *" 6 4 "*") Edited July 8, 2017 by BIGAL Quote
BIGAL Posted July 8, 2017 Posted July 8, 2017 Here is a updated version needs getvals3.lsp ; Formula as text .lsp ; By Alan H July 2017 (defun mathtxt ( / num1 num2 val1 val2 val3) (setq decpl 2) (if (not Ah:getval3)(load "getvals3")) (ah:getval3 "1st number " 5 4 "1" "2nd number " 8 7 "2" "Math operation + - / *" 6 4 "X") (setq num1 (atof val1)) (setq num2 (atof val2)) (if (= (strcase val3) "X") (setq ans (strcat val1 " " val3 " " val2 " = " (rtos (* num1 num2) 2 decpl )))) (if (= val3 "-")(setq ans (strcat val1 " " val3 " " val2 " = " (rtos (- num1 num2) 2 decpl )))) (if (= val3 "+")(setq ans (strcat val1 " " val3 " " val2 " = " (rtos (+ num1 num2) 2 decpl )))) (if (= val3 "/")(setq ans (strcat val1 " " val3 " " val2 " = " (rtos (/ num1 num2) 2 decpl )))) (command "Text" (getpoint) "" ans) ; text with preset height ;(command "Text" (getpoint) "" "" ans) ;text with no height set (mathtxt) ; Input Dialog box with variable title ; multiple lines of dcl input supported ; add extra lines if required by copying code defun ; By Alan H 2015 (vl-load-com) ; 1 line dcl ; sample code (ah:getval1 "Line 1" 5 4 "-") (defun AH:getval1 (title width limit def1 / fo fname) ; you can hard code a directory if you like for dcl file (setq fo (open (setq fname (vl-filename-mktemp "" "" ".dcl")) "w")) ;(setq fo (open (setq fname "c:\\acadtemp\\getval.dcl") "w")) (write-line "ddgetval : dialog {" fo) (write-line " : row {" fo) (write-line ": edit_box {" fo) (write-line (strcat " key = " (chr 34) "key1" (chr 34) ";") fo) (write-line (strcat " label = " (chr 34) title (chr 34) ";" ) fo) ; these can be replaced with shorter value etc (write-line (strcat " edit_width = " (rtos width 2 0) ";" ) fo) (write-line (strcat " edit_limit = " (rtos limit 2 0) ";" ) fo) (write-line " is_enabled = true;" fo) (write-line " }" fo) (write-line " }" fo) (write-line "ok_only;}" fo) (close fo) (setq dcl_id (load_dialog fname)) ; pt is a list 2 numbs -1 -1 centre ('(20 20)) ;(not (new_dialog "test" dch "" *screenpoint*)) (if (not (new_dialog "ddgetval" dcl_id)) (exit)) (set_tile "key1" (setq val1 def1)) (action_tile "key1" "(setq val1 $value)") (mode_tile "key1" 3) (start_dialog) (done_dialog) (unload_dialog dcl_id) ; returns the value of val1 as a string (vl-file-delete fname) ) ; defungetval1 ; 2 line dcl ; sample code (ah:getval2 "Line 1" 5 4 "1" "Line2" 8 7 "2") (defun AH:getval2 (title1 width1 limit1 def1 title2 width2 limit2 def2 / fo fname) (setq fo (open (setq fname "c:\\acadtemp\\getval.dcl") "w")) (write-line "ddgetval2 : dialog {" fo) (write-line " : column {" fo) (write-line ": edit_box {" fo) (write-line (strcat " key = " (chr 34) "key1" (chr 34) ";") fo) (write-line (strcat " label = " (chr 34) title1 (chr 34) ";" ) fo) (write-line (strcat " edit_width = " (rtos width1 2 0) ";" ) fo) (write-line (strcat " edit_limit = " (rtos limit1 2 0) ";" ) fo) (write-line " is_enabled = true ;" fo) (write-line " }" fo) (write-line "spacer_1 ;" fo) (write-line ": edit_box {" fo) (write-line (strcat " key = " (chr 34) "key2" (chr 34) ";") fo) (write-line (strcat " label = " (chr 34) title2 (chr 34) ";" ) fo) (write-line (strcat " edit_width = " (rtos width2 2 0) ";" ) fo) (write-line (strcat " edit_limit = " (rtos limit2 2 0) ";" ) fo) (write-line " is_enabled = true ;" fo) (write-line " }" fo) (write-line " }" fo) (write-line "spacer_1 ;" fo) (write-line "ok_only;}" fo) (close fo) ; code part (setq dcl_id (load_dialog fname)) (if (not (new_dialog "ddgetval2" dcl_id)) (exit)) (mode_tile "key1" 3) (set_tile "key1" (setq val1 def1)) (action_tile "key1" "(setq val1 $value)") (mode_tile "key2" 3) (set_tile "key2" (setq val2 def2)) (action_tile "key2" "(setq val2 $value)") (start_dialog) (done_dialog) (unload_dialog dcl_id) ; returns the value of val1 and val2 as strings (vl-file-delete fname) ) ; defungetval2 ; 3 line dcl ; sample code (ah:getval3 "Line 1" 5 4 "0.9" "Line 2" 8 7 "wow" "Line 3" 6 4 "123") (defun AH:getval3 (title1 width1 limit1 def1 title2 width2 limit2 def2 title3 width3 limit3 def3 / fo fname) (setq fo (open (setq fname "c:\\acadtemp\\getval.dcl") "w")) (write-line "ddgetval3 : dialog {" fo) (write-line " : column {" fo) (write-line ": edit_box {" fo) (write-line (strcat " key = " (chr 34) "key1" (chr 34) ";") fo) (write-line (strcat " label = " (chr 34) title1 (chr 34) ";" ) fo) (write-line (strcat " edit_width = " (rtos width1 2 0) ";" ) fo) (write-line (strcat " edit_limit = " (rtos limit1 2 0) ";" ) fo) (write-line " is_enabled = true ;" fo) (write-line " }" fo) (write-line "spacer_1 ;" fo) (write-line ": edit_box {" fo) (write-line (strcat " key = " (chr 34) "key2" (chr 34) ";") fo) (write-line (strcat " label = " (chr 34) title2 (chr 34) ";" ) fo) (write-line (strcat " edit_width = " (rtos width2 2 0) ";" ) fo) (write-line (strcat " edit_limit = " (rtos limit2 2 0) ";" ) fo) (write-line " is_enabled = true ;" fo) (write-line " }" fo) (write-line "spacer_1 ;" fo) (write-line ": edit_box {" fo) (write-line (strcat " key = " (chr 34) "key3" (chr 34) ";") fo) (write-line (strcat " label = " (chr 34) title3 (chr 34) ";" ) fo) (write-line (strcat " edit_width = " (rtos width3 2 0) ";" ) fo) (write-line (strcat " edit_limit = " (rtos limit3 2 0) ";" ) fo) (write-line " is_enabled = true ;" fo) (write-line " }" fo) (write-line " }" fo) (write-line "spacer_1 ;" fo) (write-line "ok_only;}" fo) (close fo) ; code part (setq dcl_id (load_dialog fname)) (if (not (new_dialog "ddgetval3" dcl_id)) (exit)) (mode_tile "key1" 3) (set_tile "key1" (setq val1 def1)) (action_tile "key1" "(setq val1 $value)") (mode_tile "key2" 3) (set_tile "key2" (setq val2 def2)) (action_tile "key2" "(setq val2 $value)") (mode_tile "key3" 3) (set_tile "key3" (setq val3 def3)) (action_tile "key3" "(setq val3 $value)") (start_dialog) (done_dialog) (unload_dialog dcl_id) ; returns the value of val1 val2 and val3 as strings (vl-file-delete fname) ) ; defungetval3 Quote
tombu Posted July 10, 2017 Posted July 10, 2017 Check out Lee Mac's http://www.lee-mac.com/fieldmath.html Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.