Aller au contenu

3DSOLID Infos ?


lecrabe

Messages recommandés

Hello

 

Toute la partie 3DSOLID d'AutoCAD est "un peu CACHEE" au developpement !?

 

Soit des 3DSOLIDs qui seraient en fait des extrusions de Polylignes 2D ...

 

SVP peux t-on recuperer par programmation la hauteur d'extrusion et l'angle (Defaut = Verticale)

 

Le TOP serait d'avoir cette ou ces 2 Infos dans un champ dynamique

MAIS BON cela me parait impossible !?

 

LA SANTE, Bye, lecrabe "triste"

Automne 2020, la retraite ...

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Tu peux essayer ça (pour le champ, je crains que ça ne soit plus compliqué).

 

(defun c:extrudata (/ ent)
 (while
   (not
     (and
(setq ent (car (entsel "\nSélectionnez un solide extrudé: ")))
(= (cdr (assoc 0 (entget ent))) "3DSOLID")
(= (getpropertyvalue ent "SolidType") "Extrusion")
     )
   )
    (prompt "\nVous n'avez pas sélectionné un solide extrudé.")
 )
 (prompt
   (strcat
     "\nHauteur = "
     (rtos (getpropertyvalue ent "Height"))
     "\tAngle d'extrusion = "
     (angtos (getpropertyvalue ent "TaperAngle"))
   )
 )
 (princ)
)

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

Lien vers le commentaire
Partager sur d’autres sites

En fait, c'est pas si compliqué.

 

(defun c:extrudechamp (/ ent util oid str)
 (vl-load-com)
 (while
   (not
     (and
(setq ent (car (entsel "\nSélectionnez un solide extrudé: ")))
(= (cdr (assoc 0 (entget ent))) "3DSOLID")
(= (getcname (getpropertyvalue ent "SolidType")) "_EXTRUDE")
     )
   )
    (prompt "\nVous n'avez pas sélectionné un solide extrudé.")
 )
 (setq	util (vla-get-Utility (vla-get-ActiveDocument (vlax-get-acad-object)))
oid  (vla-GetObjectIdString util (vlax-ename->vla-object ent) 0)
str  (strcat
       "Hauteur = "
              "%<\\AcObjProp Object(%<\\_ObjId "
       oid
       ">%).Height \\f \"%lu6\">%"
              "  Angle = "
              "%<\\AcObjProp Object(%<\\_ObjId "
       oid
       ">%).TaperAngle \\f \"%au5\">%"
      )
 )
 (vl-cmdf "_.text" pause pause pause str)
 (princ)
)

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

Lien vers le commentaire
Partager sur d’autres sites

Hello Gilles

 

Cet après-midi, j avais prévu de construire en manuel le champ dynamique voulu en testant les propriétés: Height & TaperAngle ...

 

MERCI beaucoup, tu m as devance !

 

C FOU de voir qu Autodesk cache dans la commande CHAMP les Propriétés 3D POSSIBLES sur les 3DSOLIDs !!

 

 

D ailleurs qu en est il des Propriétés 3D CACHEES sur les 3DSURFACEs ???

 

Notre Grand Maître Gilles saura peut être ?!

 

 

LA SANTE, Bye, lecrabe "triste"

Automne 2020, la retraite...

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Je n'en sais pas plus, je ne fais que tester.

 

Il semblerait que les propriétés qui apparaissent dans la palette des propriétés pour certains types de solides ou de surface (ceux qui ont une propriété "Type de solide" ou "type de surface") soient utilisables dans les champs.

 

Ce qui est curieux (mais on n'en est pas à une incohérence près chez Autodesk) c'est qu'il semble que, pour les solides, ces propriétés ne soient accessible par programmation qu'en AutoLISP via les fonctions getpropertyvalue ou setpropertyvalue.

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

Lien vers le commentaire
Partager sur d’autres sites

La commande CHAMPSOLIDE accepte tous les solides "primitifs" ("Boîte" "Cylindre" "Cône" "Sphère" "Pyramide" "Biseau" "Tore").

Elle fonctionnera uniquement sur des versions françaises (la propriété SolidType est localisée).

Elle affiche dans des champs les dimensions du solide sélectionné en utilisant les formats courants (LUNITS, LUPREC).

 

 

;; Affiche dans des champs les dimensions du solide primitif sélectionné
;; Version française uniquement
(defun c:CHAMPSOLIDE (/ ent solidType str)
 (vl-load-com)

 (while
   (not
     (and
(setq ent (car (entsel "\nSélectionnez un solide (primitive uniquement): ")))
(= (cdr (assoc 0 (entget ent))) "3DSOLID")
(not (vl-catch-all-error-p
       (setq solidType (vl-catch-all-apply 'getpropertyvalue (list ent "SolidType")))
     )
)
(member solidType '("Boîte" "Cylindre" "Cône" "Sphère" "Pyramide" "Biseau" "Tore"))
     )
   )
    (prompt "\nSélection non valide.")
 )

 (setq	id  (vla-GetObjectIdString
      (vla-get-Utility
	(vla-get-ActiveDocument
	  (vlax-get-acad-object)
	)
      )
      (vlax-ename->vla-object ent)
      0
    )
str (cond
      ((= solidType "Boîte")
       (strcat "Longueur = %<\\AcObjProp Object(%<\\_ObjId "
	       id
	       ">%).Length \\f \"%lu6\">%"
	       "\\PLargeur = %<\\AcObjProp Object(%<\\_ObjId "
	       id
	       ">%).Width \\f \"%lu6\">%"
	       "\\PHauteur = %<\\AcObjProp Object(%<\\_ObjId "
	       id
	       ">%).Height \\f \"%lu6\">%"
       )
      )
      ((= solidType "Cylindre")
       (if (zerop (getpropertyvalue (car (entsel)) "Elliptical"))
	 (strcat
	   "Rayon = %<\\AcObjProp Object(%<\\_ObjId "
	   id
	   ">%).Radius \\f \"%lu6\">%"
	   "\\PHauteur = %<\\AcObjProp Object(%<\\_ObjId "
	   id
	   ">%).Height \\f \"%lu6\">%"
	 )
	 (strcat
	   "Grand rayon = %<\\AcObjProp Object(%<\\_ObjId "
	   id
	   ">%).MajorRadius \\f \"%lu6\">%"
	   "\\PPetit rayon = %<\\AcObjProp Object(%<\\_ObjId "
	   id
	   ">%).MinorRadius \\f \"%lu6\">%"
	   "\\PHauteur = %<\\AcObjProp Object(%<\\_ObjId "
	   id
	   ">%).Height \\f \"%lu6\">%"
	 )
       )
      )
      ((= solidType "Cône")
       (if (zerop (getpropertyvalue (car (entsel)) "Elliptical"))
	 (strcat
	   "Rayon de base = %<\\AcObjProp Object(%<\\_ObjId "
	   id
	   ">%).BaseRadius \\f \"%lu6\">%"
	   "\\PRayon supérieur = %<\\AcObjProp Object(%<\\_ObjId "
	   id
	   ">%).TopRadius \\f \"%lu6\">%"
	   "\\PHauteur = %<\\AcObjProp Object(%<\\_ObjId "
	   id
	   ">%).Height \\f \"%lu6\">%"
	 )
	 (strcat
	   "Grand rayon de base = %<\\AcObjProp Object(%<\\_ObjId "
	   id
	   ">%).BaseMajorRadius \\f \"%lu6\">%"
	   "\\PPetit rayon de base = %<\\AcObjProp Object(%<\\_ObjId "
	   id
	   ">%).BaseMinorRadius \\f \"%lu6\">%"
	   "\\PGrand rayon supérieur = %<\\AcObjProp Object(%<\\_ObjId "
	   id
	   ">%).TopMajorRadius \\f \"%lu6\">%"
	   "\\PPetit rayon supérieur = %<\\AcObjProp Object(%<\\_ObjId "
	   id
	   ">%).TopMinorRadius \\f \"%lu6\">%"
	   "\\PHauteur = %<\\AcObjProp Object(%<\\_ObjId "
	   id
	   ">%).Height \\f \"%lu6\">%"
	 )
       )
      )
      ((= solidType "Sphère")
       (strcat
	 "Rayon = %<\\AcObjProp Object(%<\\_ObjId "
	 id
	 ">%).Radius \\f \"%lu6\">%"
       )
      )
      ((= solidType "Pyramide")
       (strcat
	 "Côtés = %<\\AcObjProp Object(%<\\_ObjId "
	 id
	 ">%).Sides >%"
	 "\\PRayon de base = %<\\AcObjProp Object(%<\\_ObjId "
	 id
	 ">%).BaseRadius \\f \"%lu6\">%"
	 "\\PRayon supérieur = %<\\AcObjProp Object(%<\\_ObjId "
	 id
	 ">%).TopRadius \\f \"%lu6\">%"
	 "\\PHauteur = %<\\AcObjProp Object(%<\\_ObjId "
	 id
	 ">%).Height \\f \"%lu6\">%"
       )
      )
      ((= solidType "Biseau")
       (strcat
	 "Longueur = %<\\AcObjProp Object(%<\\_ObjId "
	 id
	 ">%).Length \\f \"%lu6\">%"
	 "\\PLargeur = %<\\AcObjProp Object(%<\\_ObjId "
	 id
	 ">%).Width \\f \"%lu6\">%"
	 "\\PHauteur = %<\\AcObjProp Object(%<\\_ObjId "
	 id
	 ">%).Height \\f \"%lu6\">%"
       )
      )
      ((= solidType "Tore")
       (strcat
	 "Rayon de tore = %<\\AcObjProp Object(%<\\_ObjId "
	 id
	 ">%).TorusRadius \\f \"%lu6\">%"
	 "\\PRayon de tube = %<\\AcObjProp Object(%<\\_ObjId "
	 id
	 ">%).TubeRadius \\f \"%lu6\">%"
       )
      )
    )
 )
 (vl-cmdf "_.mtext" pause "_width" 0.0 str "")
 (princ)
)

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

Lien vers le commentaire
Partager sur d’autres sites

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é