Aller au contenu

info objet 3d vers exel


Messages recommandés

Invité samuelM
Posté(e)

Bonjour

 

Voici un début de programme que j'aimerai bien sur fini mais je n'y arrive pas. il permet de sortir les section d'un objet3d et je voudrai pouvoir l'enregistrer sur une feuille exel.

 

Je demande donc votre aide pour m'aider à le rendre opérationnel.

 

voici la routine :

 (defun c:a1 (/ ent clq lo la ep name descr file )

 (vl-load-com)

 (and

   (setq ent (car (entsel "\nSélectionnez un solide: ")))
(setq name (getstring "\nNommer l'objet :"))
   
 
   (setq ent (vlax-ename->vla-object ent))

   (= (vla-get-ObjectName ent) "AcDb3dSolid")

(setq lo (+ lo (vla-get-Length ent))
      la (+ la (vla-get-Length ent))
      ep (+ ep (vla-get-Length ent))
)
     	      
	
(setq descr (strcat
      "\nNom de l'objet.......\t"name
      "\nLongeur..............\t"(rtos lo)
      "\nLargeur..............\t"(rtos la)
      "\nEpaisseur............\t"(rtos ep)
      "\nSurface..............\t"(rtos (* lo la))
    )
     )
   (textscr)

)

 (princ)
     (initget "Oui Non")
     (if (= (getkword
       "\nEnregistrer dans un fichier ? [Oui/Non] < Non >: "
     )
     "Oui"
  )
(progn
  (setq
    file
     (open
       (getfiled "Créez ou sélectionnez un fichier" "" "xls" 33)
       "a"
     )
  )
  (princ descr file)
  (close file)
)
     )
     (graphscr)
   
 (princ)
)

 

 

Merci à ceux qui répondront

 

Posté(e)

Je voudrais bien t'aider mais il faudrais que tu déffinisse se que tu entend par section.

selon quel plans par exemple

 

il faut aussi que tu dise sous quelle forme tu souhaite obtenir les resultats

 

dans tout les cas a mon sens il te faut :

 

1 extraire les donné des point du dessin (sont inculs dans la liste des ton solide (entget (entsel)) pour voir a quoi elle ressemeble et quel code tu devras rechercher

 

2 avec des outil matématique tel que le produit vectoriel

et deux ou trois notion d'intersection droite plans

 

définir les point dessinant ta coupe

a partir de la tu fait tout ce que tu veut

 

 

J'espere avoir était clair

mais mon niveau actuel en lisp rend difficile l'explication de maniere claire...

 

a bientot

Invité samuelM
Posté(e)

Merci de ta réponse.

 

Voici le programme de base qui donne les info que je souhaite :

(defun c:dimsection (/ 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)

      )

      '>

    )

   )

   

 )

 (princ)

)

 

à partir de là, je souhaite envoyer ses info dans une feuille exel tout en stockant ses données pour ajouter à chaque sélection et ne pas créer une feuille à chaque sélection.

 

Mon niveau en lisp est vraiment très médiocre :(

Posté(e)

Salut,

As-tu penser à écrire un fichier .csv (séparateur ";") ?

C'est le même principe que d'écrire un fichier .txt

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Invité samuelM
Posté(e)

Bonjour,

 

Là je commence à ne plus comprendre! Peux tu m’éclaircir?

Merci

Posté(e)

Re,

 

Cela écris dans un fichier .csv que Excel peut lire.

Tu changes de colonne avec un ";"

Lance ça, puis va ouvir le fichier c://TAB.csv

 

(setq f (open "c://TAB.csv" "w")
     i 0)
(repeat 5
 (princ (strcat "Col1;Col2;Col3; Ligne" (rtos (setq i (1+ i))) "\n") f)
 )
(close f)

 

Ensuite, pour écrire en dessous, il suffit de relire le tableau en l'enregistrant dans une variable, puis de rajouter les choses à la suite.

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Invité samuelM
Posté(e)

Bonjour,

 

Merci bred pour ces info et ce code mais je n'arrive pas à m'en sortir :(

Invité samuelM
Posté(e)

Bonjour,

 

Après plusieurs heures d'essai et de recherche, je n'arrive pas à en finir et faire que ce programme fonctionne.

je remet mes deux programme que j'ai :

 

Ce premier qui permet de donner les sections d'un objet 3D

 

 (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)
      )
      '>
    )
   )
 )
 (princ)

 

ce deuxième qui permet d'enregistrer :

 

(initget "Oui Non")
     (if (= (getkword
       "\nEnregistrer dans un fichier ? [Oui/Non] < Non >: "
     )
     "Oui"
  )
(progn
  (setq
    file
     (open
       (getfiled "Créez ou sélectionnez un fichier" "" "xls" 33)
       "a"
     )
  )
  (princ descr file)
  (close file)
)
     )
     (graphscr) 
 (princ) 

 

et ce troisième que "Bred" m'a gracieusement donné mais que je n'arrive pas à intégrer :

 

(setq f (open "c://TAB.csv" "w")
     i 0)
(repeat 5
 (princ (strcat "Col1;Col2;Col3; Ligne" (rtos (setq i (1+ i))) "\n") f)
 )
(close f) 

 

Je résume ce que je souhaite :

Sortir sur une feuille exel, sous forme de tableau, les sections des objets que je sélectionne (Longueur, largeur, epaisseur)

 

J'en appelle donc à vous pour m'aider à m'en sortir car je ne sais pas comment avancer d'avantage.

 

Merci d'avance pour ceux qui prendrons le temps de m'aider.

Posté(e)

Bonjour,

 

Peut-être quelque chose comme ça :

 

(defun c:dimsection (/ *error* file ent minpt maxpt dims dim i)
(vl-load-com)

(defun *error* (msg)
	(and msg
		(or
			(member (strcase msg) '("FUNCTION CANCELLED" "QUIT / EXIT ABORT" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON"))
			(princ (strcat "\nErreur : " msg))
		)
	)
	(if file
		(close file)
	)
	(princ)
)
 
(initget "Oui Non")
(if (= (getkword "\nEnregistrer dans un fichier ? [Oui/Non] : ") "Oui")
	(progn
		(setq file
			(open
				(getfiled "Créez ou sélectionnez un fichier" "" "csv" 1)
				"w"
			)
		)
	)
)

(while T
	(if (and
			(setq ent (car (entsel "\nSélectionnez un solide (Echap pour terminer): ")))
			(setq ent (vlax-ename->vla-object ent))
			(= (vla-get-ObjectName ent) "AcDb3dSolid")
			(not (vla-GetBoundingBox ent 'minpt 'maxpt))
			(setq dims
				(vl-sort
					(mapcar '-
						(vlax-safearray->list maxpt)
						(vlax-safearray->list minpt)
					)
					'>
				)
			);setq dims
		)
		(progn
			(setq i (length dims))
			(foreach dim dims
				(if file
					(progn
						(princ dim file)
						(if (= i 1)
							(princ "\n" file)
							(princ ";" file)
						)
						(setq i (1- i))
					)
				)
				(princ (strcat " " (rtos dim)))
			);foreach dim
		);progn
	);if
);while T

(*error* nil)
)

Invité samuelM
Posté(e)

Bonjour!

 

C'est super Bryce. merci pour cette remise en ordre et ce programme. Pour le moment ça me va mais j'aurai peut être des modif à apporter plus tard. mais c'est déjà super.

 

Merci beaucoup

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

Bonjour,

 

je reviens pour avoir de l'aide pour des modifications sur ce programme.

 

je voudrai pouvoir nommer chaque sélection que je fais et qu'elle apparaisse dans la feuille exel.

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é