dimitarrr Posted August 3, 2022 Posted August 3, 2022 (defun c:DDD ( / a_lst b_lst obj len pt idx mtxt) (setq a_lst (list "PIPE" "PP 20*2.3" "PP 25*2.5" "PP 32*3.0" "PP 40*3.7" "PP 50*4.6" "PP 63*5.8" "1 1/2" "2" "3" "4" "5")) (setq b_lst (list "PP 20*2.3" "PP 25*2.5" "PP 32*3.0" "PP 40*3.7" "PP 50*4.6" "1 1#4" "1 1#2" "2" "3" "4" "5")) (setq obj (vlax-ename->vla-object (car (entsel "\nSelect Line : "))) len (rtos (vlax-get-property obj 'length) 2 0) ) (setq pt (mapcar '(lambda (x y) (/ (+ x y) 2.0)) (vlax-get obj 'startpoint) (vlax-get obj 'endpoint))) (setq idx (ah:butts 1 "v" a_lst)) (cond ( (setq mtxt (strcat "L=" len "\\P" (nth idx b_lst) )) (vl-position idx '(0 1 2 3)) ) ( (setq mtxt (strcat (substr "L=" len "\\P" (nth idx b_lst) 1 1) (substr (nth idx b_lst) 3) )) (vl-position idx '(5 6)) ) (t (setq mtxt (strcat "L=" len "\\P" (nth idx b_lst) ))) ) (command "_mleader" pt pause mtxt) ) I need help. I want to round numbers at the end. For example if length of line is 173 and its nearest to 175 the result to be 175. If length of line is 178 the result to be 180. Quote
Jamescalabut Posted August 3, 2022 Posted August 3, 2022 (setq num (getreal)) (if (< (rem num 5) 2.5) (setq num05 (- num (rem num 5))) (setq num05 (+ (- num (rem num 5)) 5))) Quote
mhupp Posted August 3, 2022 Posted August 3, 2022 (edited) This should do it. (setq obj (vlax-ename->vla-object (car (entsel "\nSelect Line : "))) len (rtos (LM:roundm (vlax-get-property obj 'length) 5) 2 0) ) ;; Round Multiple - Lee Mac ;; Rounds 'n' to the nearest multiple of 'm' (defun LM:roundm ( n m ) (* m (fix ((if (minusp n) - +) (/ n (float m)) 0.5))) ) --edit I'm getting nil for pt if your calculating midpoint try this. (setq pt (mapcar '/ (mapcar '+ (vlax-get obj 'startpoint) (vlax-get obj 'endpoint)) '(2 2))) Edited August 3, 2022 by mhupp 3 Quote
dimitarrr Posted August 4, 2022 Author Posted August 4, 2022 (vl-load-com) (defun AH:Butts (AHdef verhor butlst / fo fname x k ) (setq fo (open (setq fname (vl-filename-mktemp "" "" ".dcl")) "w")) (write-line "AHbutts : dialog {" fo) (write-line (strcat " label =" (chr 34) (nth 0 butlst) (chr 34) " ;" )fo) (write-line " : row {" fo) (if (= (strcase verhor) "V") (progn (write-line " : boxed_radio_column {" fo) (write-line (strcat " width = " (rtos (+ (strlen (nth 0 butlst)) 10) 2 0) " ;") fo) ; increase 10 if label does not appear ) (write-line " : boxed_radio_row {" fo) ) (setq x 1) (repeat (- (length butlst) 1) (write-line " : radio_button {" fo) (write-line (strcat "key = " (chr 34) "Rb" (rtos x 2 0) (chr 34) ";") fo) (write-line (strcat "label = " (chr 34) (nth x butlst) (chr 34) ";") fo) (write-line " }" fo) (write-line "spacer_1 ;" fo) (setq x (+ x 1)) ) (write-line " }" fo) (write-line " }" fo) (write-line "spacer_1 ;" fo) (write-line " ok_only;" fo) (write-line " }" fo) (close fo) (setq dcl_id (load_dialog fname)) (if (not (new_dialog "AHbutts" dcl_id) ) (exit) ) (setq x 1) (repeat (- (length butlst) 1) (setq k (strcat "Rb" (rtos x 2 0))) (action_tile k (strcat "(setq but " (rtos x 2 0) ")" "(done_dialog)")) (if (= ahdef x)(set_tile k "1")) (setq x (+ x 1)) ) (action_tile "accept" (strcat "(setq but " (rtos ahdef 2 0) ")" "(done_dialog)")) (start_dialog) (unload_dialog dcl_id) (vl-file-delete fname) (1- but) ) (defun c:DDD ( / a_lst b_lst obj len pt idx mtxt) (setq a_lst (list "PIPE" "PP 20*2.3" "PP 25*2.5")) (setq b_lst (list "PP 20*2.3" "PP 25*2.5")) (setq obj (vlax-ename->vla-object (car (entsel "\nSelect Line : "))) len (rtos (vlax-get-property obj 'length) 2 0) ) (setq pt (mapcar '(lambda (x y) (/ (+ x y) 2.0)) (vlax-get obj 'startpoint) (vlax-get obj 'endpoint))) (setq idx (ah:butts 1 "v" a_lst)) (cond ( (setq mtxt (strcat "L=" len "\\P" (nth idx b_lst) )) (vl-position idx '(0 1 2 3)) ) ( (setq mtxt (strcat (substr "L=" len "\\P" (nth idx b_lst) 1 1) (substr (nth idx b_lst) 3) )) (vl-position idx '(5 6)) ) (t (setq mtxt (strcat "L=" len "\\P" (nth idx b_lst) ))) ) (command "_mleader" pt pause mtxt) ) Here I want L=125, not 124. I tried your suggestions but didn't work. Quote
mhupp Posted August 4, 2022 Posted August 4, 2022 (edited) ;;----------------------------------------------------------------------;; ;; CREATE MLEADER W/ OPTIONS SUBFUNCTIONS AH:Butts & LM:ROUNDM (defun c:DDD (/ a_lst b_lst obj len pt idx mtxt) (vl-load-com) (setq a_lst (list "PIPE" "PP 20*2.3" "PP 25*2.5")) (setq b_lst (list "PP 20*2.3" "PP 25*2.5")) (setq obj (vlax-ename->vla-object (car (entsel "\nSelect Line : "))) len (rtos (LM:roundm (vlax-get-property obj 'length) 5) 2 0) ) (setq pt (mapcar '/ (mapcar '+ (vlax-get obj 'startpoint) (vlax-get obj 'endpoint)) '(2 2))) (setq idx (ah:butts 1 "v" a_lst)) (cond ((setq mtxt (strcat "L=" len "\\P" (nth idx b_lst))) (vl-position idx '(0 1 2 3))) ((setq mtxt (strcat (substr "L=" len "\\P" (nth idx b_lst) 1 1) (substr (nth idx b_lst) 3))) (vl-position idx '(5 6))) (t (setq mtxt (strcat "L=" len "\\P" (nth idx b_lst)))) ) (command "_mleader" pt pause mtxt) ) ;;----------------------------------------------------------------------;; ;; Multi AHbutton Dialog box for a single choice repalcment of initget ;; By Alan H Feb 2019 (defun AH:Butts (AHdef verhor butlst / fo fname x k) (setq fo (open (setq fname (vl-filename-mktemp "" "" ".dcl")) "w")) (write-line "AHbutts : dialog {" fo) (write-line (strcat " label =" (chr 34) (nth 0 butlst) (chr 34) " ;") fo) (write-line " : row {" fo) (if (= (strcase verhor) "V") (progn (write-line " : boxed_radio_column {" fo) (write-line (strcat " width = " (rtos (+ (strlen (nth 0 butlst)) 10) 2 0) " ;") fo) ; increase 10 if label does not appear ) (write-line " : boxed_radio_row {" fo) ) (setq x 1) (repeat (- (length butlst) 1) (write-line " : radio_button {" fo) (write-line (strcat "key = " (chr 34) "Rb" (rtos x 2 0) (chr 34) ";") fo) (write-line (strcat "label = " (chr 34) (nth x butlst) (chr 34) ";") fo) (write-line " }" fo) (write-line "spacer_1 ;" fo) (setq x (+ x 1)) ) (write-line " }" fo) (write-line " }" fo) (write-line "spacer_1 ;" fo) (write-line " ok_only;" fo) (write-line " }" fo) (close fo) (setq dcl_id (load_dialog fname)) (if (not (new_dialog "AHbutts" dcl_id)) (exit) ) (setq x 1) (repeat (- (length butlst) 1) (setq k (strcat "Rb" (rtos x 2 0))) (action_tile k (strcat "(setq but " (rtos x 2 0) ")" "(done_dialog)")) (if (= ahdef x) (set_tile k "1")) (setq x (+ x 1)) ) (action_tile "accept" (strcat "(setq but " (rtos ahdef 2 0) ")" "(done_dialog)")) (start_dialog) (unload_dialog dcl_id) (vl-file-delete fname) (1- but) ) ;; Round Multiple - Lee Mac ;; Rounds 'n' to the nearest multiple of 'm' (defun LM:roundm ( n m ) (* m (fix ((if (minusp n) - +) (/ n (float m)) 0.5))) ) Edited August 4, 2022 by mhupp 1 Quote
BIGAL Posted August 4, 2022 Posted August 4, 2022 dimitarr please put a comment in about using my Multi radio buttons code, its a recognition of where you got code from. See Mhupp code. ; Multi radio Buttons by Alanh Consulting. There is more Multi Toggles, Multi getvals, Muti Radios 2col. You can avoid putting multi in your code altogether, just make sure its saved in a support path directory. (if (not AH:Butts)(load "Multi radio buttons.lsp")) ; loads the program if not loaded already 1 Quote
dimitarrr Posted August 6, 2022 Author Posted August 6, 2022 The Mhupp code work awesome. Thanks a lot! 1 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.