;;;----------------------------------------------------------------------------------- ;;;ohganeさんの改造. (defun C:ASHW_OHG (/ SS N I OBJ DST EN LENLST) (setvar "CMDECHO" 0) (setq SS (ssget '((-4 . "") ) ) ;_ .SSGET ) ;_ .SETQ (if SS (progn (setq N (sslength SS)) (setq I 0) (while (> N I) (setq OBJ (ASHW_DXF 0 (setq EN (ssname SS I)))) (cond ((eq OBJ "LINE") (setq DST (distance (ASHW_DXF 10 EN) (ASHW_DXF 11 EN)))) ((eq OBJ "ARC") (setq DST (* (ASHW_DXF 40 EN) (abs (- (ASHW_DXF 51 EN) (ASHW_DXF 50 EN))))) ) (t (setq DST (ASHW_GETLEN EN))) ) ;_ .COND (setq LENLST (cons DST LENLST)) (setq I (1+ I)) ) ;_ .while (alert (strcat "合計の長さ=" (rtos (apply '+ LENLST)) "mm\nオブジェクトの数は" (rtos N) "個でした.\n (^o^)v" ) ;_ .STRCAT ) ;_ .alert ) ;_ .PROGN (prompt "\n オブジェクトが、選ばれていません.") ) ;_ .IF (setvar "CMDECHO" 1) (princ) ) ;_ .defun (defun ASHW_GETLEN (EN) (command ".AREA" "O" EN) (setq DST (getvar "PERIMETER"))) (defun ASHW_DXF (CODE ENAME) (cdr (assoc CODE (entget ENAME)))) ;;;---------------------------------------------------------------------------------- ;;;表を描く. (defun C:ASHW (/ SS PT PX PY SCL LINE_DL ARC_DL PLINE_DL CIRCLE_DL SPLINE_DL N I OBJ EN ALL_LST ALL_N ALL_LEN STRDATA PTLST SS1 LENT NENT ) (setvar "CMDECHO" 0) (if (setq SS (ssget '((-4 . "") ) ) ;_ .SSGET ) ;_ .setq (if (setq PT (getpoint "\n リスト基点を指定 または<終了>:")) (progn (setq PX (car PT)) (setq PY (cadr PT)) (setq SCL (ASHW_SCL)) (setq LINE_DL '("LINE")) (setq ARC_DL '("ARC")) (setq PLINE_DL '("LWPOLYLINE")) (setq CIRCLE_DL '("CIRCLE")) (setq SPLINE_DL '("SPLINE")) (setq N (sslength SS)) (setq I 0) (while (> N I) (setq OBJ (ASHW_DXF 0 (setq EN (ssname SS I)))) (cond ((eq OBJ "LINE") (setq LINE_DL (cons (distance (ASHW_DXF 10 EN) (ASHW_DXF 11 EN)) LINE_DL)) ) ((eq OBJ "ARC") (setq ARC_DL (cons (* (ASHW_DXF 40 EN) (abs (- (ASHW_DXF 51 EN) (ASHW_DXF 50 EN)))) ARC_DL ) ;_ .CONS ) ;_ .setq ) ((eq OBJ "LWPOLYLINE") (command ".AREA" "O" EN) (setq PLINE_DL (cons (getvar "PERIMETER") PLINE_DL)) ) ((eq OBJ "CIRCLE") (command ".AREA" "O" EN) (setq CIRCLE_DL (cons (getvar "PERIMETER") CIRCLE_DL)) ) ((eq OBJ "SPLINE") (command ".AREA" "O" EN) (setq SPLINE_DL (cons (getvar "PERIMETER") SPLINE_DL)) ) (t NIL) ) ;_ .COND (setq I (1+ I)) ) ;_ .while (setq ALL_LST (ASHW_NILDEL (mapcar 'reverse (list LINE_DL ARC_DL PLINE_DL CIRCLE_DL SPLINE_DL)) ) ;_ .ASHW_NILDEL ) ;_ .SETQ (setq ALL_N (apply '+ (mapcar 'length (mapcar 'cdr ALL_LST)))) (setq ALL_LEN (apply '+ (mapcar '(lambda (X) (apply '+ X)) (mapcar 'cdr ALL_LST))) ) ;_ .setq (setq STRDATA (append (cons (list "OBJ" "N" "LENGTH") (mapcar '(lambda (X) (list (car X) (itoa (length (cdr X))) (rtos (apply '+ (cdr X)) 2 2) ) ;_ .MAPCAR ) ;_ .LAMBDA ALL_LST ) ;_ .mapcar ) ;_ .cons (list (list "SUM" (itoa ALL_N) (rtos ALL_LEN 2 2))) ) ;_ .APPEND ) ;_ .setq (ASHW_MOFF) (setq I 0) (repeat (+ 2 (length ALL_LST)) (command ".LINE" (list PX (+ (* I 10 SCL) PY)) (list (+ PX (* 150 SCL)) (+ (* I 10 SCL) PY)) "" ) ;_ .command (setq PTLST (cons (mapcar '(lambda (X) (list (+ X (* 45 SCL)) (+ (* I 10 SCL) (* 2 SCL) PY)) ) (mapcar '(lambda (X) (+ PX (* X SCL))) '(0 50 100)) ) PTLST ) ;_ .cons ) ;_ .SETQ (setq I (1+ I)) ) ;_ .repeat (command ".LINE" (list PX (+ (* I 10 SCL) PY)) (list (+ PX (* 150 SCL)) (+ (* I 10 SCL) PY)) "" ) ;_ .command (mapcar '(lambda (X) (command ".LINE" (list (+ PX X) PY) (list (+ PX X) (+ (* I 10 SCL) PY)) "") ) ;_ .lambda (mapcar '(lambda (X) (* SCL X)) '(0 50 100 150)) ) ;_ .mapcar (mapcar '(lambda (X Y) (mapcar '(lambda (A B) (command ".TEXT" "J" "R" A (* 4 SCL) "0.0" B)) X Y) ) ;_ .lambda PTLST STRDATA ) ;_ .mapcar (ASHW_MON) ) ;_ .PROGN ) ;_ .IF ) ;_ .IF (setvar "CMDECHO" 1) (princ) ) ;_ .defun (defun ASHW_NILDEL (LST / I DAT RVAL) (setq I 0) (repeat (length LST) (setq DAT (nth I LST)) (if (cdr DAT) (setq RVAL (append RVAL (list DAT))) ) ;_ <