0 Members and 1 Guest are viewing this topic.
(DEFUN c:test (/ CURPA ENDPA ENT PTLST) ;;For SPLINE & POLYLINE (SETQ ent (CAR (ENTSEL))) (SETQ ptlst (list (vlax-curve-getStartPoint ent))) (SETQ EndPa (VLAX-CURVE-GETENDPARAM ent)) (SETQ CurPa 0) (REPEAT 500 (SETQ ptlst (CONS (VLAX-CURVE-GETPOINTATPARAM ent (SETQ CurPa (+ CurPa (* EndPa 0.002))) ) ptlst ) ) ) (MaxDist ptlst))(DEFUN MaxDist (pts / pt dist maxd maxl) (SETQ maxd 0) (WHILE (SETQ pt (CAR pts) pts (CDR pts) ) (FOREACH item pts (COND ((< maxd (SETQ dist (DISTANCE item pt))) (SETQ maxd dist maxl (LIST pt item dist) ) ) ) ) ) (list (trans (car maxl) 0 1) (trans (cadr maxl) 0 1) (caddr dist)))
Command: TEST Select object: ((-2332.33 1544.77 137220.0) (-9607.41 -12451.1 137220.0) 15773.8)
Ahhhhh I see, The question was "what size box will this fit in" .. yes ?
(DEFUN c:test (/ CURPA ENDPA ENT PTLST LST MAXPTS) ;;For SPLINE & POLYLINE (SETQ ent (CAR (ENTSEL))) (SETQ ptlst (LIST (VLAX-CURVE-GETSTARTPOINT ent))) (SETQ EndPa (VLAX-CURVE-GETENDPARAM ent)) (SETQ CurPa 0) (REPEAT 500 (SETQ ptlst (CONS (VLAX-CURVE-GETPOINTATPARAM ent (SETQ CurPa (+ CurPa (* EndPa 0.002))) ) ptlst ) ) ) (SETQ MaxPts (MaxDist ptlst)) ;;Major Line (COMMAND "line" (TRANS (CAR MaxPts) 0 2) (TRANS (CADR MaxPts) 0 2) "" ) (SETQ lst nil) (FOREACH item ptlst (SETQ lst (CONS (LIST (PtOnLine (TRANS (CAR MaxPts) 0 2) (TRANS (CADR MaxPts) 0 2) (TRANS item 0 2) ) item ) lst ) ) ) (SETQ lst (VL-SORT lst (FUNCTION (LAMBDA (p1 p2) (< (CAR p1) (CAR p2)))) ) ) ;;Minor Axis (COMMAND "line" (TRANS (CADAR lst) 0 2) (TRANS (CADR (LAST lst)) 0 2) "" ))(DEFUN MaxDist (pts / pt dist maxd maxl) (SETQ maxd 0) (WHILE (SETQ pt (CAR pts) pts (CDR pts) ) (FOREACH item pts (COND ((< maxd (SETQ dist (DISTANCE item pt))) (SETQ maxd dist maxl (LIST pt item dist) ) ) ) ) ) maxl)(defun PtOnLine (p1 p2 p3 / p c) (setq p p3) (apply '+ (mapcar '(lambda (b) (setq c (- (* (car p) (cadr b)) (* (cadr p) (car b))) p b ) c ) (list p1 p2 p3) ) ))
HI Evgeniy , you are right!The minor axis isn't the smallest external container.Because I got the major axis, I want to draw a line perpendicular to it.It's only for make a rectangle,not the smallest external container.
I'm not yet understand,how you both create a drawing rectangular out from object.
Quote from: Adesu on March 07, 2007, 07:01:15 PMI'm not yet understand,how you both create a drawing rectangular out from object.The rectangular isn't made by my code.I draw it after got the four points.
(defun c:test (/ E LST MA MI) (if (setq e (car (entsel "\n Select object: "))) (progn (setq e (vla-copy (vlax-ename->vla-object e)) lst nil ) ;_ setq (repeat 1000 (vla-GetBoundingBox e 'mi 'ma) (setq lst (cons (mapcar (function -) (vlax-safearray->list ma) (vlax-safearray->list mi)) lst ) ;_ cons ) ;_ setq (vla-rotate e (vlax-3d-point 0. 0.) (/ pi 1000.)) ) ;_ repeat (vla-Delete e) (princ "\n Bounding box object with minimal length: ") (princ (assoc (car (apply 'mapcar (cons 'min lst))) lst)) (princ) ) ;_ progn ) ;_ if) ;_ defun
Command: test Select object: Bounding box object with minimal length: (2427.69 12609.7 13950.0)
(defun OCS-Bbox (obj norm / minpt maxpt) (vl-load-com) (vla-TransformBy obj (vlax-Tmatrix (append (mapcar '(lambda (v o) (append (trans v norm 0 t) (list o)) ) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 0 norm) ) (list '(0 0 0 1)) ) ) ) (vla-getBoundingBox obj 'minpt 'maxpt) (vla-TransformBy obj (vlax-tmatrix (append (mapcar '(lambda (vector origin) (append (trans vector 0 norm t) (list origin)) ) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) norm 0) ) (list '(0 0 0 1)) ) ) ) (list (vlax-safearray->list minpt) (vlax-safearray->list maxpt) ))
(defun c:test (/ E LST MA MI cnt ang) (if (setq e (car (entsel "\n Select object: "))) (progn (setq e (vla-copy (vlax-ename->vla-object e)) cnt 1000 ang (/ pi cnt) ) (repeat cnt (setq lst (cons (OCS-Bbox e) lst)) (vla-rotate e (vlax-3d-point 0. 0.) ang) ) (vla-delete e) (princ "\n Bounding box object with minimal length: ") (princ (assoc (car (apply 'mapcar (cons 'min lst))) lst)) (princ) ) ))