Aller au contenu

(gile)

Moderateurs
  • Compteur de contenus

    12 247
  • Inscription

  • Dernière visite

  • Jours gagnés

    208

Tout ce qui a été posté par (gile)

  1. Ceux qui auraient déjà fini leur devoirs (et qui s'ennuient) peuvent se pencher sur la variante "Spirale d'or".
  2. Il n'y a aucune urgence à répondre et je pense qu'il y a de la place pour de nombreuses réponses différentes.
  3. Salut, Je propose un challenge pour l'été (profiter des vacances pour apprendre ou se perfectionner en LISP). Tout le monde a entendu parler de la suite de Fibonacci. Une spirale de Fibonacci est une succession d'arcs de cercle de 90° connectés tangentiellement dont les rayons sont les termes de la suite de Fibonacci. Un exemple de spirale de Finonacci composée de 7 arcs : Challenge Il s'agit d'écrire une routine qui prend en argument le point de départ de la spirale et le nombre d'arcs pour dessiner la spirale dans AutoCAD (plusieurs arcs ou une polyligne). La routine (ici nommée spiralFib) devra pouvoir être appelée depuis une commande LISP (ici nommée c:TEST) pour pouvoir être testée dans AutoCAD pour dessiner des spirales ayant au minimum 4 arcs. (defun c:test (/ p i) (and (setq p (getpoint "\nPoint de départ: ")) (setq i (getint "\nNombre d'arcs [4-32]: ")) (< 3 i) (spiralFib p i) ) (princ) ) Un screencast montrant un exemple. Variante On peut, sur le même principe faire une routine pour une "Spirale d'or".
  4. As-tu compris pourquoi tu n'y arrivais pas ? C'est ça qui est important.
  5. _$ (gc:SubstAt 1 3 '(0 0 0 0 0)) (0 0 0 1 0)
  6. Salut, Un truc du genre: If ent.ObjectName = "AcDbPolyline" AndAlso ent.Layer = "Polygonale" ...
  7. Salut, Est-ce qu'on peut proposer plusieurs réponses ?
  8. Salut, Avec (vlax-get-property object property) tout dépend de ce qu'est object. Dans tous les cas, c'est l'aide pour les références VBA Excel que tu trouveras les listes de propriétés. Si object est l'Application Excel, les propriétés sont listées ici. Si object est un classeur, les propriétés sont listées ici. Si object est une feuille, les propriétés sont listées ici. etc.
  9. Certes, si on décompose un solide 3d comme le suggèrent @Tramber et @Fraid , les faces planes génèreront des régions dont on peut obtenir l'aire mais guère plus, le régions fournissent aussi peu d'informations géométriques que les solides 3d et il faudra les décomposer à leur tour pour obtenir leurs contours. On est à peu près rendu au même point qu'avec la "représentation des contours" (CF ce sujet). Pour ma part je reste convaincu que les solides 3d d'AutoCAD (avec les régions et surfaces) sont les entités les moins bien adaptées quand il s'agit de récupérer des données géométriques ou autre. Si on veut utiliser un dessin AutoCAD comme "base de donnée" avec représentation graphiques, ce sont les blocs qui permettent le plus facilement de stocker des données facilement récupérables (via les attributs et, éventuellement les propriétés dynamiques) en affichant des entités graphiques. Créer des blocs qui contiennent des attributs pour les données et un ou plusieurs solides 3d pour l'illustration graphique est à mon avis, le moyen le plus adapté pour pouvoir à la fois présenter un dessin en 3d et pouvoir utiliser ces données.
  10. Salut, Comme l'a dit @didier les données des solides 3D AutoCAD autres que les "propiétés mécaniques" sont pas accessibles en LISP (ni en Visual LISP/VBA) et dans des environnements de programmation plus puissants (donc plus complexes) comme ObjectARX ou .NET, Autotodesk n'expose que la "représentation des contours" (Boundary Representation) qui n'est pas simple du tout à exploiter. Il me semble que le problème n'est pas pris dans le bon sens. Au moment où les solides 3D sont construits, les données géométriques que tu cherches à obtenir a posteriori sont connues puisqu'elle servent à construire ledit solide. Une solution serait donc de construire ce solide via un petit programme LISP en récupérant ces données et en les attachant au solide créé via les données étendues ou un dictionnaire d'extension. Il suffirait ensuite de récupérer ces données.
  11. Si je peux me permettre, il vaut mieux laisser la fonction 'polymake' le plus générique possible,donc sans l'expression (vlax-put-ldata ...) et utiliser sa valeur de retour : (setq ent (polymake ptlist)) (vlax-ldata-put ent "MetroHaHo" MetroHaHo) ou, directement : (vlax-ldata-put (polymake ptlist) "MetroHaHo" MetroHaHo)
  12. (defun c:TAB (/ dis ent) (vl-load-com) (if (setq dis (getdist (strcat "\nLargeur totale du Tableau <" (rtos (getvar "OFFSETDIST")) ">: " ) ) ) (setvar "OFFSETDIST" dis) (setq dis (getvar "OFFSETDIST")) ) (if (setq ent (car (entsel "\nChoix de l'Axe : "))) (progn (setq ent (vlax-ename->vla-object ent) clayer (getvar 'clayer) ) (foreach obj (vlax-safearray->list (vlax-variant-value (vla-Offset ent (* 0.5 dis)) ) ) (vla-put-Layer obj clayer) ) (foreach obj (vlax-safearray->list (vlax-variant-value (vla-Offset ent (* -0.5 dis)) ) ) (vla-put-Layer obj clayer) ) ) ) (princ) )
  13. Salut, Avec la fonction vla-Offset on peut décaler des deux côtés dans intervention de l'utilisateur. (defun c:TAB (/ dis ent) (vl-load-com) (if (setq dis (getdist (strcat "\nLargeur totale du Tableau <" (rtos (getvar "OFFSETDIST")) ">: " ) ) ) (setvar "OFFSETDIST" dis) (setq dis (getvar "OFFSETDIST")) ) (if (setq ent (car (entsel "\nChoix de l'Axe : "))) (progn (setq ent (vlax-ename->vla-object ent)) (vla-Offset ent (* 0.5 dis)) (vla-Offset ent (* -0.5 dis)) ) ) (princ) )
  14. " action = \"(setq Cou \\\"_YELLOW\\\")\";" Un caractère d'échappement (\) devant chaque guillemet (") et chaque caractère d'échappement (\).
  15. Salut, Avant la première expression (command ...) : (setq echo (getvar 'cmdecho)) (setvar 'cmdecho 0) Après la dernière expression (command ...) : (setvar 'cmdecho echo) Comme avec toute modification de variable système, il est préférable de restaurer les valeurs initiales dans une fonction de gestion des erreurs (redéfinition locale de la fonction *error*) au cas où une erreur intervienne avant la restauration (ne pas oublier qu'une annulation avec Echap génère une erreur).
  16. Ce code est vieux, il date d'une époque où on utilisait des bbcodes pour formater les message. Il en restait dans le code ([surligneur]). Le code est corrigé.
  17. Qu'en déduit-tu ? Que dit l'aide à propos de la fonction getangle ?
  18. Salut, Que renvoie l'expression suivante quand tu réponds 35 ? (setq AngBeche (getangle "\nAngle de la bèche (degrés) : "))
  19. J'ai écrit cette routine juste avant de la poster. Je l'avais appelée c:denish parce c'était le premier truc qui m'est venu à l'esprit, mais ce n'est vraiment pas le nom de la commande qui est important. J'ai modifié la routine : - correction d'un dysfonctionnement avec la commande _UCS (comme ça il n'y a plus de mapcar*) - valeur par défaut stockées dans des variables globales - changement de nom pour éviter toute équivoque. * comprendre et apprivoiser mapcar est une étape majeure dans l'apprentissage du LISP, idem pour la récursivité.
  20. Tu devrais pouvoir t'inspirer de ça : (setq *angle* (* pi 0.75)) (setq *rayon* 3.0) (setq *enrobage* 5.0) (setq *prolongement* 8.5) (defun c:toto (/ a r e p ptA ptB ptC os c pt1 pt2 tp3 tp4 pt5 pt6) (if (setq a (getangle (strcat "\nAngle <" (angtos *angle*) ">: "))) (setq *angle* a) (setq a *angle*) ) (if (setq r (getdist (strcat "\nRayon <" (rtos *rayon*) ">: "))) (setq *rayon* r) (setq r *rayon*) ) (if (setq e (getdist (strcat "\nEnrobage <" (rtos *enrobage*) "> "))) (setq *enrobage* e) (setq e *enrobage*) ) (if (setq p (getdist (strcat "\nProlongement <" (rtos *prolongement*) ">: "))) (setq *prolongement* p) (setq p *prolongement*) ) (if (and (setq ptA (getpoint "\nPoint de base A: ")) (setq ptB (getpoint ptA "\nPoint de base B: ")) (setq ptC (getpoint ptA "\nPoint de base C: ")) ) (progn (setq os (getvar 'osmode)) (setvar 'osmode 0) (command-s "_UCS" "_3p" ptA ptB ptC) (setq pt3 (list (+ e r) e) c (list (car pt3) (car pt3)) pt2 (polar c (- (* 1.5 pi) a) r) pt1 (polar pt2 (- pi a) p) pt4 (list (- (distance ptA ptb) e r) 5) c (list (car pt4) (car pt3)) pt5 (polar c (- a (* 0.5 pi)) r) pt6 (polar pt5 a p) ) (command-s "_pline" pt1 pt2 "_arc" pt3 "_line" pt4 "_arc" pt5 "_line" pt6 "" ) (command-s "_UCS" "_previous") (setvar 'osmode os) ) ) (princ) )
  21. Donc sur ton dessin, c'est 135° au lieu de 45° ? Ou alors c'est entre 0° (demi-tour) et 90° (droit) ?
  22. Salut, Pour faire simple, pas besoin de "bulge". Une fois les points calculés, il suffit d'utiliser les options de la commande POLYLIGN (_PLINE). (command "_pline" pt1a pt2a "_arc" pt3a "_line" pt4a "_arc" pt5a "_line" pt6a "")
  23. (gile)

    pb de trigo

    Salut, Le sinus du demi angle est égal à la demi corde (côté opposé à l'angle) divisée par le rayon (hypoténuse). Donc l'angle est égal deux fois l'arcsinus de la demi corde divisée par le rayon. Sinon, il y a cette page.
  24. Le format DWG n'a pas changé depuis AutoCAD 2018 (AC1032)...
  25. Ça, c'est balaise :
×
×
  • 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é