Aller au contenu

commande _list


Invité ingoenius

Messages recommandés

Invité ingoenius
Posté(e)

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 = Record

Afficher l'historique = Non

Zone 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 inferieure

des objets selectionnes , et si plusieurs objets selectionne trouver la plus rande limite superieure et la plus grande limite inferieure

 

 

 

 

Posté(e)

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)

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)

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 seul

2) 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)
)

Posté(e)

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)

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)

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]

Posté(e)

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)

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 

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité