Aller au contenu

Dimensions des objets


Messages recommandés

Posté(e)

Est-il possible de récupérer les dimensions des objets en 3D d' un bloc?

J'aimerai reprendre ces informations, d'une manière simple,afin d'établir une fiche de débit de mes éléments.

Je pense que cela doit être possible mais je ne sais pas bien comment faire.

Roger

 

[Edité le 5/2/2009 par julbute]

Posté(e)

Ils sont construit d'objet en 3D, Solide principalement.

Ce sont des "boites" la majeur partie du temps à 5 ou 6 cotés, des caissons de mobiliers en fait.

Type caisson de cuisine.

Roger

Posté(e)

Je vais essayer d'être clair.

Dans mon dessin général j'ai une serie de bloc (chaque bloc est un mobilier).Il ne sont jamais identique en général.

Ils sont nommés et ils ont des attributs.Avec tout cela j'arrive à créer une liste de mobilier avec le nombre de mobilier identique.J'en extrais le type et le nombre de quincaillerie etc....Jusque là tout va pas trop mal, j'y arrive (en tatonnant mais bon c'est comme cela que l'on progresse aussi).Ou cela ce complique c'est que ces blocs " mobilier" sont formés d'éléments en 3D et ce sont leurs dimensions que j'aimerai récupérer afin d'établir la liste des morceaux et leurs dimensions, afin d'établir une fiche de débit.Je pense que cela est possible etant donné que ces données sont repris dans les "propriété" mais comment faire ?

Roger

Posté(e)

ok pour les attribut en choisisant d'inserer un champ.

Mais quels champs choisir?

Je n'ai peut etre pas bien vu , mais je ne trouve pas de champ correspondant aux dimensions des objets.Lorsque je choisi objet, il n'y a pas de selection dimensions et dans les variables, Je n'ai rien vu.C'est surement tout bête ...Mais c'est le(s)quel(s)?

Il n'existe pas de petit programme ou lisp pouvant extraire les dimensions des l'éléments constituant les blocs?

Merci pour les réponses.

Roger

 

[Edité le 9/2/2009 par julbute]

Posté(e)

Je n'ai toujours rien trouvé avec les champs et les attributs.

Je pensais que cela était possible de récupérer les dimensions d'objet simple en 3D.

Mais j'ai bien peur que cela ne soit pas possible.

Je ne connais pas le langage lisp.

J'ai pu remarquer que l'on pouvait faire pas mal de chose.

Est ce possible en lisp? si oui je suis prét à l'apprendre.

Roger

 

[Edité le 10/2/2009 par julbute]

Posté(e)

Salut,

 

Même en LISP (ou autre), il très difficile (voire impossible) de récupérer les dimensions des solides.

La suele méthode que je voie est celle préconisée par rebcao : un bloc contenant un solide de dimension 1 (boite : 1x1x1, cylindre : h=1 r=1) et de les insérer en jouant sur les échelles X, Y et Z.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

ok, merci pour la réponse...

J'ai bien exploré cette solution.Mais elle ne me permet pas de modifier facilement mes blocs.

Je perds en souplesse, Il me faut plus de temps pour dessiner.

De ce fait le jeu n'en vaut pas la chandelle.

Le temp suplèmentaire à dessiner n'est pas récupéré par l'établisement de la fiche de débit.

Je dessine des ensembles de mobilier n'ayant jamais la même forme...

Bon tampis...

Je cherche une autre solution.

Roger

 

Posté(e)

Même en LISP (ou autre), il très difficile (voire impossible) de récupérer les dimensions des solides.

 

Pas totalement impossible.

Mais il vrai que pour savoir quoi récupérer dans les infos... :casstet:

 

Un début avec le fameux ACISDecode

(defun ACISDecode (Chaine / i AscVal Result)
 (setq Result "" i (strlen Chaine))
 (while (> i 0) ; On scanne la chaine en commencant par son dernier caractère
   (setq 
     AscVal (ascii (substr Chaine i 1)) ; On converti le caractère en code ASCII 
     Result (strcat
       (cond
         ((= AscVal 32) " ") ; Si la valeur est 32, on affiche un espace
         ((= AscVal 86) "I") ; Si la valeur est 86, on affiche un I
         ((if (< (boole 6 AscVal 95) 32) (chr (+ 64 (boole 6 AscVal 95))) (chr (boole 6 AscVal 95))))
                                     ; Sinon on fait un Xor entre la valeur 
                                     ; et le nombre magique 95, puis on reconverti l'entier
                                     ; obtenu en caractère
       )
       Result
     )
     i (1- i) ; On boucle sur les autres caractères de la chaine
   )
 )
 Result
)

 

Après avoir chargé celui-ci en mémoire.

Pour ton cas ou les solides sont dans des blocs, le code retourne les codes dxf de l'entité imbriqué

 

((lambda ( / js dxf_ent)
(while (null (setq js (ssget "_+.:E:S:N"))))
(setq dxf_ent (entget (cadar (ssnamex js 0))))
(foreach n dxf_ent
 (if (eq (car n) 1)
   (print (cons 1 (acisdecode (cdr n))))
   (print n)
 )
)
))

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Une solution peut étre ?

Les blocs sont formés de solide simple, boite et cylindre.

Par contre là j'ai un peu de mal...

Que doie je faire? J'arrive à ma limite.

J'ai sauvegardé la premier partie, que j'ai charger sur autocad.

J'ai fais de même pour la seconde.

Est il me retourne ceci:

Commande: _appload Dim3d.lsp correctement chargé(s)

Dim3d.lsp correctement chargé(s)

Commande: ; erreur: no function definition: CHAINE

Commande: ; erreur: no function definition: CHAINE

Commande:

Commande:

Commande:

Commande: _appload dim3dsuite.lsp correctement chargé(s)

dim3dsuite.lsp correctement chargé(s)

Commande:

Choix des objets:

(-1 . )

(0 . "3DSOLID")

(330 . )

(5 . "2087B5")

(100 . "AcDbEntity")

(67 . 0)

(8 . "FAB Cimaise")

(100 . "AcDbModelerGeometry")

(70 . 1) ; erreur: no function definition: ACISDECODE

Commande:

Choix des objets: *Annuler*

; erreur: Fonction annulée

Commande:

Commande:

Commande:

Commande:

Commande: _refedit

Utilisez CLOREREF ou la barre d'outils Editref pour terminer la session

d'édition de références.

Commande:

Commande:

Commande: _appload dim3dsuite.lsp correctement chargé(s)

dim3dsuite.lsp correctement chargé(s)

Commande:

Choix des objets:

Choix des objets:

(-1 . )

(0 . "3DSOLID")

(330 . )

(5 . "2096E0")

(100 . "AcDbEntity")

(67 . 0)

(410 . "Model")

(8 . "FAB Cimaise")

(62 . 1)

(100 . "AcDbModelerGeometry")

(70 . 1) ; erreur: no function definition: ACISDECODE

Commande:

Choix des objets: *Annuler*

; erreur: Fonction annulée

Commande:

Commande: ACISDECODE

Commande inconnue "ACISDECODE". Appuyez sur F1 pour obtenir de l'aide.

 

Merci

Roger

 

[Edité le 11/2/2009 par julbute]

Posté(e)

Bon aprés quelques essais voici ce que j'arrive à avoir, pour un seul volume de Longueur 350 X450 X550 mm placé en x=375 y =425 mm et z=300.

Un peu indigeste...

 

Commande: APPLOAD lambda.lsp correctement chargé(s)

Commande:

Choix des objets:

(-1 . )

(0 . "3DSOLID")

(330 . )

(5 . "13C")

(100 . "AcDbEntity")

(67 . 0)

(410 . "Model")

(8 . "0")

(100 . "AcDbModelerGeometry")

(70 . 1)

(1 . "21200 86 2 26 ")

(1 . "16 Autodesk AutoCAD 18 ASM 12.0.0.5822 NT 0 ")

(1 . "1 9.9999999999999995e-007 1e-010 ")

(1 . "asmheader $-1 -1 @12 212.0.0.5822 #")

(1 . "body $-1 -1 $-1 $2 $-1 $-1 #")

(1 . "lump $-1 -1 $-1 $-1 $3 $1 #")

(1 . "shell $-1 -1 $-1 $-1 $-1 $4 $-1 $2 #")

(1 . "face $-1 -1 $-1 $5 $6 $3 $-1 $7 forward single #")

(1 . "face $-1 -1 $-1 $8 $9 $3 $-1 $10 reversed single #")

(1 . "loop $-1 -1 $-1 $-1 $11 $4 #")

(1 . "plane-surface $-1 -1 $-1 374.99999999999994 425 850 0 0 1 1 0 0 forward_v

I I I I #")

(1 . "face $-1 -1 $-1 $12 $13 $3 $-1 $14 reversed single #")

(1 . "loop $-1 -1 $-1 $-1 $15 $5 #")

(1 . "plane-surface $-1 -1 $-1 374.99999999999994 425 300 0 0 1 1 0 0 forward_v

I I I I #")

(1 . "coedge $-1 -1 $-1 $16 $17 $18 $19 forward $6 $-1 #")

(1 . "face $-1 -1 $-1 $20 $21 $3 $-1 $22 reversed single #")

(1 . "loop $-1 -1 $-1 $-1 $23 $8 #")

(1 . "plane-surface $-1 -1 $-1 374.99999999999994 200 575 0 1 0 0 0 1 forward_v

I I I I #")

(1 . "coedge $-1 -1 $-1 $24 $25 $26 $27 forward $9 $-1 #")

(1 . "coedge $-1 -1 $-1 $28 $11 $29 $30 forward $6 $-1 #")

(1 . "coedge $-1 -1 $-1 $11 $28 $31 $32 forward $6 $-1 #")

(1 . "coedge $-1 -1 $-1 $33 $34 $11 $19 reversed $35 $-1 #")

(1 . "edge $-1 -1 $-1 $36 -225 $37 225 $18 $38 forward @7 unknown #")

(1 . "face $-1 -1 $-1 $39 $40 $3 $-1 $41 reversed single #")

(1 . "loop $-1 -1 $-1 $-1 $42 $12 #")

(1 . "plane-surface $-1 -1 $-1 199.99999999999994 425 575 1 0 0 0 0 -1

forward_v I I I I #")

(1 . "coedge $-1 -1 $-1 $43 $31 $44 $45 forward $13 $-1 #")

(1 . "coedge $-1 -1 $-1 $46 $15 $43 $47 forward $9 $-1 #")

(1 . "coedge $-1 -1 $-1 $15 $46 $48 $49 forward $9 $-1 #")

(1 . "coedge $-1 -1 $-1 $34 $33 $15 $27 reversed $35 $-1 #")

(1 . "edge $-1 -1 $-1 $50 -225 $51 225 $26 $52 forward @7 unknown #")

(1 . "coedge $-1 -1 $-1 $17 $16 $53 $54 forward $6 $-1 #")

(1 . "coedge $-1 -1 $-1 $55 $56 $16 $30 reversed $40 $-1 #")

(1 . "edge $-1 -1 $-1 $37 -175.00000000000006 $57 175 $29 $58 forward @7

unknown #")

(1 . "coedge $-1 -1 $-1 $23 $59 $17 $32 reversed $13 $-1 #")

(1 . "edge $-1 -1 $-1 $60 -175 $36 175.00000000000006 $31 $61 forward @7

unknown #")

(1 . "coedge $-1 -1 $-1 $26 $18 $59 $62 forward $35 $-1 #")

(1 . "coedge $-1 -1 $-1 $18 $26 $55 $63 reversed $35 $-1 #")

(1 . "loop $-1 -1 $-1 $-1 $33 $39 #")

(1 . "vertex $-1 -1 $-1 $19 0 $64 #")

(1 . "vertex $-1 -1 $-1 $19 1 $65 #")

(1 . "straight-curve $-1 -1 $-1 550 425 850 0 1 0 I I #")

(1 . "face $-1 -1 $-1 $-1 $35 $3 $-1 $66 reversed single #")

(1 . "loop $-1 -1 $-1 $-1 $55 $20 #")

(1 . "plane-surface $-1 -1 $-1 374.99999999999994 650 575 0 -1 0 0 0 -1

forward_v I I I I #")

(1 . "coedge $-1 -1 $-1 $67 $53 $56 $68 forward $21 $-1 #")

(1 . "coedge $-1 -1 $-1 $59 $23 $24 $47 reversed $13 $-1 #")

(1 . "coedge $-1 -1 $-1 $53 $67 $23 $45 reversed $21 $-1 #")

(1 . "edge $-1 -1 $-1 $60 -275 $69 275 $44 $70 forward @7 unknown #")

(1 . "coedge $-1 -1 $-1 $25 $24 $67 $71 forward $9 $-1 #")

(1 . "edge $-1 -1 $-1 $51 -175.00000000000006 $69 175 $43 $72 forward @7

unknown #")

(1 . "coedge $-1 -1 $-1 $56 $55 $25 $49 reversed $40 $-1 #")

(1 . "edge $-1 -1 $-1 $73 -175 $50 175.00000000000006 $48 $74 forward @7

unknown #")

(1 . "vertex $-1 -1 $-1 $27 0 $75 #")

(1 . "vertex $-1 -1 $-1 $62 1 $76 #")

(1 . "straight-curve $-1 -1 $-1 550 425 300 0 -1 0 I I #")

(1 . "coedge $-1 -1 $-1 $42 $44 $28 $54 reversed $21 $-1 #")

(1 . "edge $-1 -1 $-1 $57 -225 $60 225 $53 $77 forward @7 unknown #")

(1 . "coedge $-1 -1 $-1 $48 $29 $34 $63 forward $40 $-1 #")

(1 . "coedge $-1 -1 $-1 $29 $48 $42 $68 reversed $40 $-1 #")

(1 . "vertex $-1 -1 $-1 $30 1 $78 #")

(1 . "straight-curve $-1 -1 $-1 374.99999999999994 650 850 -1 0 0 I I #")

(1 . "coedge $-1 -1 $-1 $31 $43 $33 $62 reversed $13 $-1 #")

(1 . "vertex $-1 -1 $-1 $54 1 $79 #")

(1 . "straight-curve $-1 -1 $-1 374.99999999999994 200 850 1 0 0 I I #")

(1 . "edge $-1 -1 $-1 $36 -275 $51 275 $33 $80 forward @7 unknown #")

(1 . "edge $-1 -1 $-1 $37 -275 $50 275 $34 $81 forward @7 unknown #")

(1 . "point $-1 -1 $-1 550 200 850 #")

(1 . "point $-1 -1 $-1 550 650 850 #")

(1 . "plane-surface $-1 -1 $-1 550 425 575 -1 0 0 0 0 1 forward_v I I I I #")

(1 . "coedge $-1 -1 $-1 $44 $42 $46 $71 reversed $21 $-1 #")

(1 . "edge $-1 -1 $-1 $57 -275 $73 275 $56 $82 forward @7 unknown #")

(1 . "vertex $-1 -1 $-1 $71 0 $83 #")

(1 . "straight-curve $-1 -1 $-1 199.99999999999994 200 575 0 0 -1 I I #")

(1 . "edge $-1 -1 $-1 $69 -225 $73 225 $67 $84 forward @7 unknown #")

(1 . "straight-curve $-1 -1 $-1 374.99999999999994 200 300 -1 0 0 I I #")

(1 . "vertex $-1 -1 $-1 $49 0 $85 #")

(1 . "straight-curve $-1 -1 $-1 374.99999999999994 650 300 1 0 0 I I #")

(1 . "point $-1 -1 $-1 550 650 300 #")

(1 . "point $-1 -1 $-1 550 200 300 #")

(1 . "straight-curve $-1 -1 $-1 199.99999999999994 425 850 0 -1 0 I I #")

(1 . "point $-1 -1 $-1 199.99999999999994 650 850 #")

(1 . "point $-1 -1 $-1 199.99999999999994 200 850 #")

(1 . "straight-curve $-1 -1 $-1 550 200 575 0 0 -1 I I #")

(1 . "straight-curve $-1 -1 $-1 550 650 575 0 0 -1 I I #")

(1 . "straight-curve $-1 -1 $-1 199.99999999999994 650 575 0 0 -1 I I #")

(1 . "point $-1 -1 $-1 199.99999999999994 200 300 #")

(1 . "straight-curve $-1 -1 $-1 199.99999999999994 425 300 0 1 0 I I #")

(1 . "point $-1 -1 $-1 199.99999999999994 650 300 #")

(100 . "AcDb3dSolid")

(350 . )

Commande:

 

On retrouve assez clairement la position mais pour les dimensions c'est moins évident.

Qu'est'il possible de faire avec cela?

 

 

Posté(e)

Bon...

Aprés renseignements pris au prés de l'auteur de "ACISDecode",Il n'est pas vraiment possible de retrouver les dimensions des objets avec autocad.Ceci est du en partie au format des infos.Comme disais bonuscad, "savoir quoi récupérer"!(Voir plus haut...)

Tampis...

Dommage on peut le faire sous solidwork...

Roger

 

  • 3 semaines après...
Posté(e)

J'ai des nouvelles dans ma recherche.

Aprés renseignement voici les info que j'ai pu avoir :

Un objet AutoCAD = un cube.

Un solide composé de plusieurs primitives réunies par une commande UNION = un cube.

 

En plus, ce cube est toujours aligné avec les axes du système de coordonnées générales.

Il est possible de sortir les dimensions des "cubes" d'emcombrement des odjets.Ce qui m'interesse finalement, pour sortir une fiche de débit.Ils est seulement possible d'extraire ces infos que par des parallélépipèdes rectangles alignés avec les axes du SCG.Ce qui est mon cas...

Bon je comprend bien ce qu'il faut faire mais je ne sais pas le faire...

1° dénombrer les objets

2° former les cubes d'emcombrement

3° Extraire les données dans un tableau (tabloblo de tamber par exemple, super d'ailleurs je m'en sers constamment.)

Il y a énormement de morceaux de lisp utilisable sur CADxp à mon avis, mais je ne sais pas les assembler.

Un petit coup de main, s'il vous plait.

Roger

 

[Edité le 4/3/2009 par julbute]

Posté(e)

Dommage...

Ce sujet n'interesse pas grand monde...

J'ai quand même quelques nouvelles.

En VBA il est possible d'extraire du dessin tous les "emcombrements" des volumes 3D (GetBoundingBox).On peut, de ce fait, créer une liste des éléments.

Il y a un tri à faire en choisissant une méthode de dessin permattant d'avoir les objets à extraire aligner sur le SCG, et en mettant sur le même calques les éléments à extraire.Eliminant de ce fait ce dont on n'a pas besoin.

Affaire à suivre.

Roger

Posté(e)

Salut,

 

Quelque chose comme ça ?

- le parallélépipède (box) doit être orienté suivant le SCG.

- les dimensions de la BoundingBox sont retournées dans le fenêtre de texte, triées en ordre décroissant.

 

(defun c:test (/ ent minpt maxpt)
 (vl-load-com)
 (and
   (setq ent (car (entsel "\nSélectionnez un solide: ")))
   (setq ent (vlax-ename->vla-object ent))
   (= (vla-get-ObjectName ent) "AcDb3dSolid")
   (not (vla-GetBoundingBox ent 'minpt 'maxpt))
   (mapcar 'print
    (vl-sort
      (mapcar '-
	      (vlax-safearray->list maxpt)
	      (vlax-safearray->list minpt)
      )
      '>
    )
   )
   (textscr)
 )
 (princ)
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Merci gile,

la fonction a fonctionné mais elle me retourne cet info maintenant:

 

Commande: test

Sélectionnez un solide: ; erreur: no function definition: VLAX-ENAME->VLA-OBJECT

Commande:

 

Sinon, c'est effectivement cela que je recherche.C'est en faisant le dessin qu'il faut penser au débit, et mettre toutes les pièces aligner au SCG.Lorsque je dessine, je définie chaque meuble en bloc.Les pièces sont sur des calques différents.

Roger

Posté(e)

Merci gile cela fonctionne.

 

Cela se précise, voici un code en VBA écrit par maxence delannoy . http://pagesperso-orange.fr/maxence.delannoy/

L'auteur de ASCIDecode

 

Le Voici:

 

Public Sub Debits()

Dim JeuSel As AcadSelectionSet

On Error Resume Next

Set JeuSel = ThisDrawing.SelectionSets("DEBITS")

On Error GoTo 0

If JeuSel Is Nothing Then Set JeuSel = ThisDrawing.SelectionSets.Add("DEBITS")

 

Dim FilterType(3) As Integer

Dim FilterData(3) As Variant

 

FilterType(0) = -4

FilterData(0) = "

FilterType(1) = 0

FilterData(1) = "3DSOLID"

FilterType(2) = 0

FilterData(2) = "INSERT"

FilterType(3) = -4

FilterData(3) = "OR>"

 

JeuSel.Select acSelectionSetAll, , , FilterType, FilterData

 

If JeuSel.Count = 0 Then

MsgBox "Pas de solides 3D dans le dessin.", vbInformation

Exit Sub

End If

 

Dim NomFichierRapport As String

NomFichierRapport = ThisDrawing.Path & "\" & Left(ThisDrawing.Name, Len(ThisDrawing.Name) - 4) & ".txt"

 

On Error GoTo CloseFile

 

Open NomFichierRapport For Output As #1

Print #1, "Nom" & ";" & "X" & ";" & "Y" & ";" & "Z"

 

Dim Entity As AcadEntity

Dim ObjName As String

Dim MinPt, MaxPt

 

For Each Entity In JeuSel

If TypeOf Entity Is AcadBlockReference Then

' C'est un bloc, on utilise son nom

ObjName = Entity.Name

Else

' C'est un solide, on utilise le nom de son calque

ObjName = Entity.Layer

End If

Entity.GetBoundingBox MinPt, MaxPt

Print #1, ObjName & ";" & Round((MaxPt(0) - MinPt(0)), 1) & ";" & Round((MaxPt(1) - MinPt(1)), 1) & ";" & Round((MaxPt(2) - MinPt(2)), 1)

 

Next Entity

 

JeuSel.Delete

 

' Ferme le fichier rapport

Close #1

 

Shell "c:\windows\notepad.exe " & NomFichierRapport, vbNormalFocus

Exit Sub

 

CloseFile:

MsgBox "Une erreur est survenue (" & Err.Description & ")", vbCritical

Close #1

End Sub

 

Il permet de ressortir, dans un fichier, la liste des éléments et leurs dimensions.( Au format .csv pour récuperer sur excel)

C'est ce que je recherchai.Il ne traite pas ce qui se trouve dans les blocs, et j'aimerai pouvoir repérer les "morceaux" en mettant une lettre sur les éléments du dessin( A,B,C etc..) tout en les repérant dans le fichier.

 

Roger

 

 

 

  • 2 semaines après...
Posté(e)

Bonjour à tous,

comment peut on faire pour créer un blocs, en VBA car le début de code est comme cela, contenant la BoundingBox et lui donner un nom afin de trouver dans la liste et le dessin le nom de la pièce? Le nom de la pièce serait un attribut pour qu'il apparait à l'écran.

Il serait peu etre pas mal de mettre les dimensions de la pièce avec des attributs afin de pouvoir les extraire.

C'est peut etre compliqué car il faut que le nom s'inscrit dans la liste et dans le dessin si l'on suit le début de code des messages précédent.

En tout cas c'est le flou complet pour moi...Un peu d'aide peut étre.

Merci roger

 

 

[Edité le 18/3/2009 par julbute]

  • 3 semaines après...
Posté(e)

Bonjour à tous,

Il est passionnant ce sujet...

20 messages dont 13 de moi...

748 Lectures ....

Et pas de réponse pouvant m'aider.

Tampis je potasse des bouquins !...

Le tout c'est d'avancer.

Merci pour les idées qu m'ont permis de ne pas rester sur place.

Roger

 

[Edité le 8/4/2009 par julbute]

  • 2 ans après...
Invité samuelM
Posté(e)

Bonjour (gile)

 

le programme que tu as réalisé mes conviens à merveille. mais comment peut on exporter directement ses informations dans un tableau Exel par exemple?

 

Merci

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é