Invité ingoenius Posté(e) le 14 juin 2007 Posté(e) le 14 juin 2007 en ligne de commande si je envoi la commande _list , et ensuite je chosi' un object j'obtien ceci hoix des objets: 3DSOLID Calque: "CDE" Espace: Espace objet Maintien = 524 Historique = RecordAfficher l'historique = NonZone de contour: Limite inférieure X = -1.4932 , Y = 0.4691 , Z = -2.4074 Limite supérieure X = -0.4932 , Y = 1.4691 , Z = -1.3003 comment faire si je veux faire en sorte que ces donnes aient dans des variables autolisp?je voudrais pouvoir recuperer les donnees:Limite superieure et Limite inferieuredes objets selectionnes , et si plusieurs objets selectionne trouver la plus rande limite superieure et la plus grande limite inferieure
(gile) Posté(e) le 14 juin 2007 Posté(e) le 14 juin 2007 Salut, si tu fait : (vla-getBoundingBox (vlax-ename->vla-object ent) 'Minpt 'Maxpt) La limite inférieur de l'objet ent est Minpt, la limite supérieure Maxpt Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité ingoenius Posté(e) le 14 juin 2007 Posté(e) le 14 juin 2007 merci jile excuse le double post, mais ces info sup et inferieres sont valable dans tous les scu possibles??de plus j'arrive pas a les mettres dans des variables ex(setq N1 Minpt ) ;-( ca m'enerve beaucoup visual lisp car j'arrive pas de tout a comprendre ;-([Edité le 14/6/2007 par ingoenius] j'arrive pas a detecter les erreurs que ke fait (defun c:K2 () (setq h_max nil) ;point max (setq h_min nil)) (prompt "\nSel Objet to KUT :") (setq Obj (ssget)) (setq Quanti (sslength Obj)) (setq m 0 ) (while (setq ent (ssname Obj m)) (vla-getBoundingBox (vlax-ename->vla-object ent) 'Minpt 'Maxpt ) (setq bb_lst (cons (caddr (vlax-safearray->list Maxpt)) bb_lst)) (setq bb_lst1 (cons (caddr (vlax-safearray->list Minpt)) bb_lst1) m (1+ m) ) ) (setq h_max (apply 'max bb_lst)) ;point max (setq h_min (apply 'min bb_lst1)) ) [Edité le 14/6/2007 par ingoenius]
Invité ingoenius Posté(e) le 14 juin 2007 Posté(e) le 14 juin 2007 en fait j'ai trouvé sur le dorum quelque chose qui porrait etre modifiéé ici le script que j'ai trouvé dessine une bounding box autour de l'objet selectionne pour etre parfait pour moi il faudrait 1) qu'il travaille sur une selections de plusieurs objects et pas seulement sur un seul2) qu'il me retourne les coordonnes 3d des point de la bounding box 3) qu'il efface la bounding box en sortie merci encore pour la patience ;-) ; Doug C. Broad, Jr. ;; can be used with vla-transformby to ;; transform objects from the UCS to the WCS (defun UCS2WCSMatrix () (vlax-tmatrix (append (mapcar '(lambda (vector origin) (append (trans vector 1 0 t) (list origin)) ) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 0 1) ) (list '(0 0 0 1)) ) ) ) ;; transform objects from the WCS to the UCS (defun WCS2UCSMatrix () (vlax-tmatrix (append (mapcar '(lambda (vector origin) (append (trans vector 0 1 t) (list origin)) ) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 1 0) ) (list '(0 0 0 1)) ) ) ) ;;; Crée une entité (polyligne ou boite) figurant la "bounding box" de l'objet sélectionné. (defun c:bbox (/ bbox_err AcDoc Space obj bb minpoint maxpoint pt1 pt2 lst poly box cen norm) (vl-load-com) (defun bbox_err (msg) (if (or (= msg "Fonction annulée") (= msg "quitter / sortir abandon") ) (princ) (princ (strcat "\nErreur: " msg)) ) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)) ) (setq *error* m:err m:err nil ) (princ) ) (setq AcDoc (vla-get-activedocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) m:err *error* *error* bbox_err ) (vla-startUndoMark AcDoc) (while (not (setq obj (car (entsel))))) (setq obj (vlax-ename->vla-object obj)) (vla-TransformBy obj (UCS2WCSMatrix)) (setq bb (vl-catch-all-apply 'vla-getboundingbox (list obj 'minpoint 'maxpoint ) ) ) (if (vl-catch-all-error-p bb) (progn (princ (strcat "; erreur: " (vl-catch-all-error-message bb)) ) (vla-TransformBy obj (WCS2UCSMatrix)) ) (progn (setq pt1 (vlax-safearray->list minpoint) pt2 (vlax-safearray->list maxpoint) ) (if (or (equal (car pt1) (car pt2) 1e-007) (equal (cadr pt1) (cadr pt2) 1e-007) (equal (caddr pt1) (caddr pt2) 1e-007) ) (progn (cond ((equal (car pt1) (car pt2) 1e-007) (setq lst (list pt1 (list (car pt1) (cadr pt1) (caddr pt2)) pt2 (list (car pt1) (cadr pt2) (caddr pt1)) ) ) ) ((equal (cadr pt1) (cadr pt2) 1e-007) (setq lst (list pt1 (list (car pt1) (cadr pt1) (caddr pt2)) pt2 (list (car pt2) (cadr pt1) (caddr pt1)) ) ) ) ((equal (caddr pt1) (caddr pt2) 1e-007) (setq lst (list pt1 (list (car pt1) (cadr pt2) (caddr pt1)) pt2 (list (car pt2) (cadr pt1) (caddr pt1)) ) ) ) ) (setq box (vlax-invoke Space 'add3dPoly (apply 'append lst)) ) (vla-put-closed box :vlax-true) ) (progn (setq cen (mapcar '(lambda (x y) (/ (+ x y) 2)) pt1 pt2) pt2 (mapcar '- pt2 pt1) box (vla-addBox Space (vlax-3d-point cen) (car pt2) (cadr pt2) (caddr pt2) ) ) ) ) (if (= (vla-get-ObjectName obj) "AcDbText") (progn (setq norm (vlax-get obj 'Normal) ) (vla-Move box (vlax-3d-point (trans '(0 0 0) norm 0)) (vlax-3d-point (trans (list 0 0 (caddr (trans (vlax-get obj 'InsertionPoint) 0 norm ) ) ) norm 0 ) ) ) ) ) (mapcar '(lambda (x) (vla-TransformBy x (WCS2UCSMatrix))) (list obj box) ) ) ) (vla-endUndoMark AcDoc) (setq *error* m:err m:err nil ) (princ) )
(gile) Posté(e) le 14 juin 2007 Posté(e) le 14 juin 2007 Une petite routine qui retourne les coordonnées dans le SCU courant de la "bounding box" de tous les objets d'un jeu de sélection.Le résultat est une liste dont le premier élément est le point minimum, le deuxiéme le point maximum. ;; Doug C. Broad, Jr. ;; can be used with vla-transformby to ;; transform objects from the UCS to the WCS (defun UCS2WCSMatrix () (vlax-tmatrix (append (mapcar '(lambda (vector origin) (append (trans vector 1 0 t) (list origin)) ) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 0 1) ) (list '(0 0 0 1)) ) ) ) ;; transform objects from the WCS to the UCS (defun WCS2UCSMatrix () (vlax-tmatrix (append (mapcar '(lambda (vector origin) (append (trans vector 0 1 t) (list origin)) ) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 1 0) ) (list '(0 0 0 1)) ) ) ) (defun ss-bbox (ss / n obj Minlst Maxlst bbox) (vl-load-com) (repeat (setq n (sslength ss)) (setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n))))) (vla-TransformBy obj (UCS2WCSMatrix)) (vla-getBoundingBox obj 'Minpt 'Maxpt) (setq Minlst (cons (vlax-safearray->list Minpt) Minlst) Maxlst (cons (vlax-safearray->list Maxpt) Maxlst) ) (vla-TransformBy obj (WCS2UCSMatrix)) ) (list (apply 'mapcar (cons 'min Minlst)) (apply 'mapcar (cons 'max Maxlst)) ) ) un petit programme pour tester la routine : (defun c:test (/ ss lst) (and (setq ss (ssget)) (setq lst (ss-bbox ss)) (if (equal (caddar lst) (caddr (cadr lst)) 1e-9) (command "_.rectangle" "_non" (car lst) "_non" (cadr lst)) (command "_.box" "_non" (car lst) "_non" (cadr lst)) ) ) (princ) ) [Edité le 15/6/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité ingoenius Posté(e) le 15 juin 2007 Posté(e) le 15 juin 2007 merci a vous tous, je suis en train de travailles dessous , masi sens vos aides serai mission impossoble pour moi je crois que mantenat commence a fonctionner si quelq'un veux le tester il faur creer des solides dans plusieres posizion de l'espace 3d e voir si ca coupe ;; Doug C. Broad, Jr. ;; can be used with vla-transformby to ;; transform objects from the UCS to the WCS (defun UCS2WCSMatrix () (vlax-tmatrix (append (mapcar '(lambda (vector origin) (append (trans vector 1 0 t) (list origin)) ) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 0 1) ) (list '(0 0 0 1)) ) ) ) ;; transform objects from the WCS to the UCS (defun WCS2UCSMatrix () (vlax-tmatrix (append (mapcar '(lambda (vector origin) (append (trans vector 0 1 t) (list origin)) ) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 1 0) ) (list '(0 0 0 1)) ) ) ) (defun ss-bbox (ss / n obj Minlst Maxlst bbox) ;(defun ss-bbox () (vl-load-com) (repeat (setq n (sslength ss)) (setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n))))) (vla-TransformBy obj (UCS2WCSMatrix)) (vla-getBoundingBox obj 'Minpt 'Maxpt) (setq Minlst (cons (vlax-safearray->list Minpt) Minlst) Maxlst (cons (vlax-safearray->list Maxpt) Maxlst) ) (vla-TransformBy obj (WCS2UCSMatrix)) ) (list (apply 'mapcar (cons 'min Minlst)) (apply 'mapcar (cons 'max Maxlst)) ) ) ;(defun c:test (/ ss lst) (defun c:test () (setq ss (ssget)) (setq Q(sslength ss)) (setq lst (ss-bbox ss));il primo punto é il minimo il secondo il massimo (setq Nscu (car lst)) (setq Hmax (abs (caddr (cadr lst)))) (setq Hextr (+ Hmax (abs (caddr nscu))));hauteur extrusion (command "_ucs" "_origin" Nscu "");deplacement du scu ;(command "_ucs" "_v" "" ) ;creation du couteau ;(setvar "osmode" 0) (setq P (getpoint "\nGet Point?\n")) (command "_line" P pause "" ) (setq Kutter (entlast)) ;nom ligne (setq K1 (entget Kutter)) (command "_extrude" Kutter "" Hextr "" "") ;estrude le couteau (setq K2 (entlast));nom de l'estrusion (setq P2 (list (car P)(cadr P)(caddr Nscu))) ;(command "_move" K2 "" "" P P2) ;fase de coupe (setq n 0 ) (repeat Q (setq ent (ssname ss n)) (command "section" ent "" "s" K2 "" ) ;KUT (setq n (+ 1 n)) );fin repeat (command "_erase" K2 "" "");efface le couteau (command "_ucs" "g" "" ) (princ) ) [Edité le 15/6/2007 par ingoenius]
Invité ingoenius Posté(e) le 15 juin 2007 Posté(e) le 15 juin 2007 subsiste seulement un probleme! selon l'orientation du scu peut arriver que l'extrusion de couteau ce fasse dans la movaise direction, comment faire pour detecter la bonne direction cette a dire celle qui fa intercequer les object selectionnes?? enfait je cherce de toutes les facons possible de detecter la posizion en Z d'un solide box , mais je ne trouve pas ni en autolisp ni la fonction visuallisp elle existe ou pas?? [Edité le 15/6/2007 par ingoenius]
(gile) Posté(e) le 16 juin 2007 Posté(e) le 16 juin 2007 Salut, Pour placer le SCU en fonction de la bbox des objets sélectionnés : (command "_.ucs" "3" (car lst) (list (caadr lst) (cadar lst) (caddar lst)) (list (caar lst) (cadadr lst) (caddar lst)) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité ingoenius Posté(e) le 18 juin 2007 Posté(e) le 18 juin 2007 Routine de Coupe droite pour objets solides Voila enfin la routine complete merci encore pour l'aide precieux (j'ai mis le lisp en "autoload" de facon que la simple commande K suivi de enter lance la coupe ) a dispo pour tout le monde ci dessous (defun c:K () ;KUT de base avec simple selection de 2 point sur l'ecran (SETQ Old-OS (GETVAR "OSMODE"));sauvegarde os mode ;Enregistrement su SCU (if (= "" (getvar "UCSNAME")) (setq scu_init (vla-add (vla-get-UserCoordinateSystems (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (trans '(0 0 0) 1 0)) (vlax-3d-point (trans '(1 0 0) 1 0)) (vlax-3d-point (trans '(0 1 0) 1 0)) "SCU_init")) (setq scu_init (vla-get-ActiveUCS (vla-get-ActiveDocument (vlax-get-acad-object))))) (setvar "OSMODE" 0) ;os mode sur 0 (command "_ucs" "_v" "") (setq ss (ssget)) (setq Q (sslength ss)) (setq lst (ss-bbox ss)) (setq Nscu (car lst)) (setq Hmax (abs (caddr (cadr lst)))) (setq Hextr (+ Hmax (abs (caddr nscu)))) ;hauteur extrusion (command "_ucs" "3" (car lst) "" "" "") ;creation du couteau (setvar "osmode" 0) (setq P (getpoint "\nGet Point?\n")) (command "_line" P pause "") (setq Kutter (entlast)) ;nom ligne (setq K1 (entget Kutter)) (command "_extrude" Kutter "" Hextr "" "") ;estrusion du couteau (setq K2 (entlast)) ;nom de l'estrusion ;fase de coupe (setq n 0) (repeat Q (setq ent (ssname ss n)) (command "section" ent "" "s" K2 "") ;KUT (setq n (+ 1 n)) ) ;fin repeat (command "_erase" K2 "" "") ;efface le couteau (SETVAR "OSMODE" Old-Os) ;remet os mode ;Restauration du SCU (vla-put-activeucs (vla-get-activedocument (vlax-get-acad-object)) scu_init) (vla-delete scu_init) (princ) ) ;---------------------------------- ;; Doug C. Broad, Jr. ;; can be used with vla-transformby to ;; transform objects from the UCS to the WCS (defun UCS2WCSMatrix () (vlax-tmatrix (append (mapcar '(lambda (vector origin) (append (trans vector 1 0 t) (list origin)) ) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 0 1) ) (list '(0 0 0 1)) ) ) ) ;; transform objects from the WCS to the UCS (defun WCS2UCSMatrix () (vlax-tmatrix (append (mapcar '(lambda (vector origin) (append (trans vector 0 1 t) (list origin)) ) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 1 0) ) (list '(0 0 0 1)) ) ) ) (defun ss-bbox (ss / n obj Minlst Maxlst bbox) ;(defun ss-bbox () (vl-load-com) (repeat (setq n (sslength ss)) (setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n))))) (vla-TransformBy obj (UCS2WCSMatrix)) (vla-getBoundingBox obj 'Minpt 'Maxpt) (setq Minlst (cons (vlax-safearray->list Minpt) Minlst) Maxlst (cons (vlax-safearray->list Maxpt) Maxlst) ) (vla-TransformBy obj (WCS2UCSMatrix)) ) (list (apply 'mapcar (cons 'min Minlst)) (apply 'mapcar (cons 'max Maxlst)) ) ) ;fin routines
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant