black Posted November 21, 2019 Author Share Posted November 21, 2019 Mr. Bigal Thanks a lot. With the change you've written, the length * height is also complete I'd appreciate it if you'd solve the problem with the selection when it's possible. Once you've made the selections, the layers' knowledge comes to the screen. Don't let it come to the screen. Can we make a table before this comes? Thanks Quote Link to comment Share on other sites More sharing options...
BIGAL Posted November 21, 2019 Share Posted November 21, 2019 Remove the line (alert ...… just done to show something happening happening. Quote Link to comment Share on other sites More sharing options...
black Posted November 21, 2019 Author Share Posted November 21, 2019 Thank you, Mr. Bigal. I have only one request left from you. I'd appreciate it if you'd arrange it so you can make multiple choices when you have time. Quote Link to comment Share on other sites More sharing options...
black Posted November 21, 2019 Author Share Posted November 21, 2019 (edited) Mr. Bigal, i.e. I've made the change, but when the length*elevation runs, it's only calculated on one polyline. Not all polynis in the layer are calculated. I think I changed the code wrong. Can you help with the change? ;;---------------------=={ Total Area }==---------------------;; ;; ;; ;; Displays the total area of selected objects at the ;; ;; command line. The precision of the printed result is ;; ;; dependent on the setting of the LUPREC system variable. ;; ;;------------------------------------------------------------;; ;; Author: Lee Mac, Copyright © 2013 - www.lee-mac.com ;; ;;------------------------------------------------------------;; ; Total area modified by Alanh to allow multiple pick by layer ; uses height in layer name for volume expect metric ; Nov 2019 ;; Parse Numbers - Lee Mac ;; Parses a list of numerical values from a supplied string. ;; Author: Lee Mac, Copyright © 2013 - www.lee-mac.com ;; ;;------------------------------------------------------------;; (defun LM:parsenumbers ( str ) ( (lambda ( l ) (read (strcat "(" (vl-list->string (mapcar '(lambda ( a b c ) (if (or (< 47 b 58) (and (= 45 b) (< 47 c 58) (not (< 47 a 58))) (and (= 46 b) (< 47 a 58) (< 47 c 58)) ) b 32 ) ) (cons nil l) l (append (cdr l) '(())) ) ) ")" ) ) ) (vl-string->list str) ) ) (defun ahmktable ( numr / colwidth numcolumns numrows rowheight sp vgad vgao vgms) (vl-load-com) (setq sp (vlax-3d-point (getpoint "select point for table"))) (Setq vgms (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))) ; (setq numrows numr) (setq numcolumns 5) (setq rowheight 40) (setq colwidth 200) (setq objtable (vla-addtable vgms sp numrows numcolumns rowheight colwidth)) (vla-settext objtable 0 0 "KALIP METRAJ"); TABLE TITLE (vla-settext objtable 1 0 "No") (vla-settext objtable 1 1 "LAYER") (vla-settext objtable 1 2 "TOTAL AREA") (vla-settext objtable 1 3 "HEIGHT") (vla-settext objtable 1 4 "VOL") (vla-SetTextHeight Objtable (+ acDataRow acTitleRow acHeaderRow) 12) (vla-Setcolumnwidth Objtable 0 35) (vla-Setcolumnwidth Objtable 1 300) (vla-Setcolumnwidth Objtable 2 200) (vla-Setcolumnwidth Objtable 3 100) (vla-Setcolumnwidth Objtable 4 200) (princ) ) (defun c:tvol ( / a i s ent lay ht objtable lst lst2) (setq lst '()) (while (setq ent (entsel "pick object for layer <Enter> to exit")) (setq lay (vla-get-layer (vlax-ename->vla-object (car ent)))) (setq lst (cons (list lay ) lst)) ) (setq lst2 '()) (repeat (setq x (length lst)) (setq lay (car (nth (setq x (- x 1)) lst))) (setq ht (/ (nth 0 (LM:parsenumbers lay)) 1000.0)) (if (= (substr lay 1 1) "H")(setq ht (abs ht))) (setq s (ssget "X" (list (cons 0 "LWPOLYLINE")(cons 8 lay)))) (if s (progn (setq a 0.0) (repeat (setq i (sslength s)) (setq a (vlax-get (vlax-ename->vla-object (ssname s (setq i (1- i)))) 'Length)) ) (alert (strcat "\nTotal Area for layer : " lay " " (rtos a 2) "\n Total vol for height : " (rtos ht 2 3) " " (rtos (* ht a) 2 2))) ) ) (setq lst2 (cons (list lay a ht) lst2)) ) (ahmktable (+ (length lst2) 3)) (setq voltot 0) (setq no 1) (setq row 2) (setq i 0) (repeat (setq x (length lst2)) (setq itlst (nth i lst2)) (vla-settext objtable row 0 (rtos no 2 0)) (vla-settext objtable row 1 (car itlst)) (vla-settext objtable row 2 (rtos (cadr itlst) 2 3)) (vla-settext objtable row 3 (rtos (caddr itlst) 2 3)) (vla-settext objtable row 4 (rtos (*(cadr itlst)(caddr itlst)) 2 3)) (setq voltot (+ (*(cadr itlst)(caddr itlst)) voltot)) (setq row (+ row 1)) (setq i (+ i 1)) (setq no (+ no 1)) ) (vla-mergecells objtable (+ (length lst2) 2) (+ (length lst2) 2) 0 3) (vla-settext objtable (+ (length lst2) 2) 0 "TOTAL Vol.") (vla-settext objtable (+ (length lst2) 2) 4 (rtos voltot 2 3)) (princ) ) (vl-load-com) (princ) (c:tvol) Edited November 21, 2019 by black Quote Link to comment Share on other sites More sharing options...
black Posted November 22, 2019 Author Share Posted November 22, 2019 Masters, Mr. Bigal, I couldn't make the code change he wrote. Can you help, please? Quote Link to comment Share on other sites More sharing options...
BIGAL Posted November 22, 2019 Share Posted November 22, 2019 This is the code changed to length not area please test, will try to redo the selection part busy at moment. area x ht - table.lsp Quote Link to comment Share on other sites More sharing options...
black Posted November 22, 2019 Author Share Posted November 22, 2019 (edited) Thank you, Mr. Bigal. I'm looking forward to it. It's been tested. Length ok mr bigal Edited November 22, 2019 by black Quote Link to comment Share on other sites More sharing options...
black Posted November 25, 2019 Author Share Posted November 25, 2019 Mr. Bigal I'm waiting for version 2 for selecting with window method in layer selection. Can you do it when you're available? Quote Link to comment Share on other sites More sharing options...
BIGAL Posted November 27, 2019 Share Posted November 27, 2019 Working on it need time busy at moment. Have something needs fine tuning. Quote Link to comment Share on other sites More sharing options...
black Posted November 27, 2019 Author Share Posted November 27, 2019 Ok Mr. Bigal; I'd appreciate it if you did it when you're a musait. Quote Link to comment Share on other sites More sharing options...
BIGAL Posted November 29, 2019 Share Posted November 29, 2019 Can you please check this now just window the area of interest. ;;---------------------=={ Total Area }==---------------------;; ;; ;; ;; Displays the total area of selected objects at the ;; ;; command line. The precision of the printed result is ;; ;; dependent on the setting of the LUPREC system variable. ;; ;;------------------------------------------------------------;; ;; Author: Lee Mac, Copyright © 2013 - www.lee-mac.com ;; ;;------------------------------------------------------------;; ; Total area modified by Alanh to allow multiple pick by layer ; uses height in layer name for volume expect metric ; Nov 2019 ;; Parse Numbers - Lee Mac ;; Parses a list of numerical values from a supplied string. ;; Author: Lee Mac, Copyright © 2013 - www.lee-mac.com ;; ;;------------------------------------------------------------;; (defun LM:parsenumbers ( str ) ( (lambda ( l ) (read (strcat "(" (vl-list->string (mapcar '(lambda ( a b c ) (if (or (< 47 b 58) (and (= 45 b) (< 47 c 58) (not (< 47 a 58))) (and (= 46 b) (< 47 a 58) (< 47 c 58)) ) b 32 ) ) (cons nil l) l (append (cdr l) '(())) ) ) ")" ) ) ) (vl-string->list str) ) ) (defun ahmktable ( numr / colwidth numcolumns numrows rowheight sp vgad vgao vgms) (vl-load-com) (setq sp (vlax-3d-point (getpoint "select point for table"))) (Setq vgms (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))) ; (setq numrows numr) (setq numcolumns 5) (setq rowheight 40) (setq colwidth 200) (setq objtable (vla-addtable vgms sp numrows numcolumns rowheight colwidth)) (vla-settext objtable 0 0 "KALIP METRAJ"); TABLE TITLE (vla-settext objtable 1 0 "No") (vla-settext objtable 1 1 "LAYER") (vla-settext objtable 1 2 "TOTAL LENGTH") (vla-settext objtable 1 3 "HEIGHT") (vla-settext objtable 1 4 "AREA") (vla-SetTextHeight Objtable (+ acDataRow acTitleRow acHeaderRow) 12) (vla-Setcolumnwidth Objtable 0 35) (vla-Setcolumnwidth Objtable 1 300) (vla-Setcolumnwidth Objtable 2 200) (vla-Setcolumnwidth Objtable 3 100) (vla-Setcolumnwidth Objtable 4 200) (princ) ) (defun c:tvol ( / a i s ent lay ht objtable lst lst2) (prompt "select plines") (setq s (ssget (list (cons 0 "LWPOLYLINE")))) (setq lst '()) (repeat (setq x (sslength s)) (setq ent (ssname s (setq x (- x 1)))) (setq ent (entget ent)) (setq lay (cdr (assoc 8 ent))) (setq lst (cons lay lst)) ) (setq lst (vl-sort lst '(lambda (x y) (< x y)))) (setq lst3 '()) (setq x 0) (repeat (-(length lst) 1) (if (= (nth x lst)(nth (setq x (+ x 1)) lst)) (princ ) (setq lst3 (cons (nth (- x 1) lst) lst3)) ) ) (setq lst3 (cons (nth (-(length lst) 1) lst) lst3)) (setq lst2 '()) (repeat (setq x (length lst3)) (setq lay (nth (setq x (- x 1)) lst3)) (setq ht (/ (nth 0 (LM:parsenumbers lay)) 1000.0)) (if (= (substr lay 1 1) "H")(setq ht (abs ht))) (setq s (ssget "X" (list (cons 0 "LWPOLYLINE")(cons 8 lay)))) (if s (progn (setq a 0.0) (repeat (setq i (sslength s)) (setq a (+ a (vla-get-length (vlax-ename->vla-object (ssname s (setq i (1- i))))))) ) ) ) (setq lst2 (cons (list lay a ht) lst2)) ) (ahmktable (+ (length lst2) 3)) (setq voltot 0) (setq no 1) (setq row 2) (setq i 0) (repeat (setq x (length lst2)) (setq itlst (nth i lst2)) (vla-settext objtable row 0 (rtos no 2 0)) (vla-settext objtable row 1 (car itlst)) (vla-settext objtable row 2 (rtos (cadr itlst) 2 3)) (vla-settext objtable row 3 (rtos (caddr itlst) 2 3)) (vla-settext objtable row 4 (rtos (abs (*(cadr itlst)(caddr itlst))) 2 3)) (setq voltot (+ (abs (*(cadr itlst)(caddr itlst))) voltot)) (setq row (+ row 1)) (setq i (+ i 1)) (setq no (+ no 1)) ) (vla-mergecells objtable (+ (length lst2) 2) (+ (length lst2) 2) 0 3) (vla-settext objtable (+ (length lst2) 2) 0 "TOTAL Area.") (vla-settext objtable (+ (length lst2) 2) 4 (rtos voltot 2 3)) (princ) ) (vl-load-com) (princ) (c:tvol) Quote Link to comment Share on other sites More sharing options...
black Posted November 29, 2019 Author Share Posted November 29, 2019 (edited) Mr. Bigal Thank you very much. It's exactly what I want. When I choose, can he process the lengths of the polylines I choose, not the entire length of that layer? Edited November 29, 2019 by black Quote Link to comment Share on other sites More sharing options...
BIGAL Posted November 30, 2019 Share Posted November 30, 2019 Go back to the very 1st code provided, mix and match can be done. Your changing the request as we go along. I have provided a couple of ways of doing it.So at this point the doing it for free stops. As its getting more and more complex involving selection choices. So a good time to learn lisp and have a go. Quote Link to comment Share on other sites More sharing options...
black Posted November 30, 2019 Author Share Posted November 30, 2019 Ok. Thank you for your help. Quote Link to comment Share on other sites More sharing options...
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.