Aller au contenu

bonuscad

Membres
  • Compteur de contenus

    5 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    56

Tout ce qui a été posté par bonuscad

  1. Pour voir le "pas à pas" d'une fonction récursive, il y a la fonction (trace function) Exemple ici, avant d'utiliser test3 on ferait (trace sub), ce qui fait que les appels de la fonction sub est tracé avec une indentation pour chaque profondeur d'appel avec les arguments soumis et en retour le résultat à chaque niveau. NB: fonction (untrace) pour arrêter de tracer une fonction, ici (untrace sub) et des (print variable) bien placé dans le code peuvent bien aider à la compréhension du déroulement d'une routine lorsqu'on ne saisi pas tout. Je place aussi des fois un (getkword) ou (grread) dans une boucle pour faire défiler le pas à pas à ma convenance. Voilà pour les astuces pour décortiquer un lisp un peu complexe et aider à sa compréhension. Ceci pour ceux qui n'utilise pas ou peu l'éditeur vlide comme moi (les dinosaures quoi) ;) alors qu'il présente des fonctions évolués pour faire la même chose. (points d'arrêt, espions...)
  2. bonuscad

    RETICUL INTELLIGENT ?

    Peut être en se mettant en mode "Tracking" ou repere objet si vous préférez. Là effectivement on peut avoir des infos de distances et d'angle au réticule.
  3. Une réponse un peu bancale, mais si ça peut t'aider... La seule solution que j'ai trouvé est par (entmake) ex: (if (not (tblsearch "LAYER" "gele_nouvelle_fenetre")) (entmake '((0 . "LAYER") (100 . "AcDbSymbolTableRecord") (100 . "AcDbLayerTableRecord") (2 . "gele_nouvelle_fenetre") (70 . 2) (62 . 4) (6 . "Continuous") (290 . 1) (370 . -3) ) ) ) Si la solution t'intéresse regarde le code dxf 70 dans l'aide des tables
  4. Bon ben moi j'ai par encore gouter a celles nouvelles options de "décaler" en 2006 :( Je reviens à ton sujet Joffoon, vu que tu veux un nombre précis de décalage, j' ai revu entièrement le lisp: (grread) n'est plus d'aucune utilité pour avoir un effet visuel. Voici à quoi j'arrive, en espérant qu'il n'a pas trop de défaut. :P (defun C:Mul_Offset ( / obj ent vla-ent pt_sel param deriv alpha dis_offset where_pt v1 v2 det_or e_last) (while (not (setq obj (entsel "\nSélectionner l'objet à décaler: ")))) (setq ent (car obj) vla-ent (vlax-ename->vla-object ent)) (cond ((member (vlax-get-property vla-ent 'ObjectName) '("AcDbLine" "AcDbXline" "AcDbPolyline" "AcDb2dPolyline" "AcDbSpline" "AcDbEllipse" "AcDbArc" "AcDbCircle") ) (setq pt_sel (vlax-curve-getClosestPointTo vla-ent (trans (cadr obj) 1 0)) param (vlax-curve-getparamatpoint vla-ent pt_sel) deriv (vlax-curve-getfirstderiv vla-ent param) alpha (atan (cadr deriv) (car deriv)) ) (redraw ent 3) (initget "Par _Through") (setvar "OFFSETDIST" (if (not (setq dis_offset (getdist (strcat "\nSpécifiez la distance de décalage ou [Par] <" (if (< (getvar "OFFSETDIST") 0) "Par" (rtos (getvar "OFFSETDIST"))) ">: ")))) (progn (if (< (getvar "OFFSETDIST") 0) (setq dis_offset "Through")) (getvar "OFFSETDIST")) (if (eq dis_offset "Through") -1 dis_offset) ) ) (if (< (getvar "OFFSETDIST") 0) (princ "\nAttribuez une valeur à \"Par le point\": ") (princ "\nSpécifiez un point sur le côté à décaler: ") ) (initget 9) (setq where_pt (getpoint)) (if (< (getvar "OFFSETDIST") 0) (setvar "OFFSETDIST" (distance (vlax-curve-getClosestPointToProjection vla-ent (trans where_pt 1 0) (mapcar '- (trans (getvar "VIEWDIR") 1 0) (trans '(0 0 0) 1 0)) T ) (list (car (trans where_pt 1 0)) (cadr (trans where_pt 1 0))) ) ) ) (redraw ent 4) (setq alpha (atan (cadr deriv) (car deriv))) (setq v1 (mapcar '- (polar pt_sel alpha 1.0) pt_sel) v2 (mapcar '- (trans where_pt 1 0) pt_sel) ) (setq det_or (apply '(lambda (x1 y1 z1 x2 y2 z2) (- (* x1 y2) (* y1 x2))) (append v1 v2))) (cond ((> det_or 0.0) (setvar "OFFSETDIST" (- (abs (getvar "OFFSETDIST"))))) ((< det_or 0.0) (setvar "OFFSETDIST" (abs (getvar "OFFSETDIST")))) ) (if (member (vlax-get-property vla-ent 'ObjectName) '("AcDbLine" "AcDbXline")) (setvar "OFFSETDIST" (abs (getvar "OFFSETDIST")))) (setq e_last ent) (initget 7) (repeat (getint "\nNombre de répétition : ") (if (and e_last (vl-catch-all-error-p (vl-catch-all-apply 'vla-Offset (list (vlax-ename->vla-object e_last) (getvar "OFFSETDIST") ) ) )) (progn (setq e_last nil) (princ "\nL'objet ne peut pas être décalé.")) (setq e_last (entlast)) ) ) ) (T (princ "\nL'objet ne peut pas être décalé.")) ) (princ) )
  5. Donc c'est totalement l'inverse de ce que j'ai énoncé :( J' étais persuadé du contraire, merci de ta confirmation en tout cas Je vais essayer de le retenir pour les prochaines fois :P , j'ai rarement travaillé avec des LT... malgré que j'ai créé quelques macros à la demande d'utilisateurs. NB: SETENV et GETENV existent par contre sous le format lisp en version pleine (setenv) (getenv), bien sur cela change la syntaxe de la macro, mais elle peut être adapté pour une version pleine. [Edité le 15/5/2007 par bonuscad]
  6. Il y avait eu ce sujet , Il peut de pas fonctionner correctement, s'il faut on améliora (tout peu évoluer dans les sujet ancien) ;)
  7. En effet USERS n'existe pas, mais USERS1, USERS2, USERS3, USERS4 et USERS5 ... EXISTENT! Par contre USERI de 1 à 5 et USERR de 1 à 5 n'existent pas sous LT, pourquoi? Parce que je pense quel le diesel n'interprète que les chaines et que seules les variables UserS (String de 1 à 5) fournissent de tel valeurs. Donc utilise dans tes macros, une des variables (ou plusieurs) UserS (1-5)
  8. Esbe, Tout d'abord j'utilise FireFox avec le plug-in "bloqueur de pub", je dis cela car ça peut avoir son importance sur la procédure qui suit. Sur le site MegaUpLoad, tu vas être invité à saisir 3 lettres qui sont affiché aléatoirement dans une case en haut à droite, une fois saisie tu clique sur dowload et un compte à rebours de 45s va commencer (il faut bien, comme c'est gratuit, quel le temps de connexion puisse rapporter à l'hébergeur) Après ce temps imparti tu sera invité à cliquer sur la case "Cliquez ici pour télécharger" et le téléchargement va alors débuter. Voilà c'est tout pour la procédure d'utilisation pour la récupération. Si il n'y a pas de bloqueur de pub, il est possible que des pop-up te masque la fenêtre initiale... Je m'en sert souvent, quand je dois faire parvenir des fichiers de taille importante que je ne peux joindre par courriel. Ces fichiers sont environ disponible 1 semaine. Je crois que le délai est rallongé automatiquement si ce fichier est téléchargé régulièrement. Pour mettre un fichier tu va sur le site http://www.megaupload.com/fr/ tu clique sur parcourir, tu sélectionne un fichier sur ton disque, tu rentre une description, tu accepte les conditions et tu fais envoyer (taille 500Mb maxi) Le site peut donner des signes de lenteur (est ce un fait exprès?, pour le temps de connexion), mais cela fonctionne
  9. Beaucoup d'échecs avec ta routine, je l'ai essayé avec ce fichier dont je me sert pour tester des routines avec les polylignes. NB: testé sous 2002 et 2005
  10. De rien ;) Pour moi c'est plus une coquille, normal quand on manipule autant de lignes de code que toi, que parfois des erreurs se glissent ou qu'on oublie de rectifier un copier-coller. Même un bon journaliste fait un jour une "coquille" dans son article. Tu es pardonné "Coco" :P
  11. Ne pas oublier la commande basique d'autocad "MESURER". Elle fait ce que tu désires, les routines de Gilles sont plus évolués pour l'alignement des blocs. NB: Gilles, c'est vrai que MES3D présente une anomalie, elle me refuse les nombre réels !!! Une particularité des PR (Point Routier, anciennement PK : Point Kilométrique) et qu'ils ne sont pas représentatif de la longueur réelle de la route. En effet les PR d'extrémités restent invariable malgré les aménagements intermédiaires (déviations, rectification de virages etc...). Ce qui fait qu'une route mesurant réellement 23,450 KM n'ait un PR final de 25.800 par exemple. Ce sont plus des repères et non plus des points Kilomètrique fiables. Donc quelque chose m'échappe dans ta demande, peut être que DIVISER serait plus approprié... Tu connais tes PR d'extrémités?
  12. Une manière... (setq chaine "ben Kenobi ben ben") (while (wcmatch chaine "*ben*") (setq chaine (vl-string-subst "qsxqsx" "ben" chaine)) )
  13. bonuscad

    selectionner similaire

    En résumé la commande: FILTER ,'filter pour être appelé en transparence Il y a (avait) la commande SSX qui permet de faire des filtres en s'appuyant sur une sélection (ssx) pour un appel en transparence Ce lisp similaire à ssx pour rajouter aux possibilités proposées par Gilles [Edité le 4/5/2007 par bonuscad]
  14. Ou en gardant le même esprit, utiliser la fonction vl-directory-files (foreach $tmp (vl-directory-files "c:/" "*.plt") (print $tmp))
  15. bonuscad

    Un ptit jeu pour bonuscad...

    En effet, pas simple du tout :exclam: , mais sympathique :P Merci encore, j'en garde un peu pour mes soirées, Je crois que le bouton RESET va beaucoup servir :casstet:
  16. Le lisp fonctionne avec les parenthèses, l'exécution se faisant par profondeur d'imbrication. (a (b (c (d)))) ici par exemple d sera évaluer en premier, puis c , puis b et enfin a. Une fois qu'on a compris, ça va beaucoup mieux ;)
  17. Hé non, du moins pas à ma connaissance. Le diesel empêche l'usage des guillemets "" et les macros dans les menu l'usage de l'anti-slash \, ce symbole étant affecté à la pause pour l'utilisateur. Je pense pas que tu sois obligé de passer par une expression lisp pour définir USERS1 ^C^CUSERS1;"NEUTRE", devrait fonctionner aussi, je dis ça pour un usage sur une LT (ce qui n'a pas l'aire d'être ton cas) Dans ce cas une expression lisp aurait été peut être plus facile, quitte à employer (lambda ...) pour avoir une fonction anonyme dans ton bouton.
  18. Le diesel est un évaluateur de chaine, pour qu'il ne l'évalue pas directement, il n'y a pas moyen. Je tenterais de passer par la variable USERS1 en lui plaçant la chaine "NEUTRE" et non pas NEUTRE. Essayes ceci (je ne peux pas tester) $M=$(if,$(eq,$(getenv,Gestion_Projet),"1"),^C^C(rcalque $(getvar,users1));_line;,^C^C(@mess 1)) Si cela fonctionne, il te faudra définir dans ta macro la variable USERS1 AVANT le $M= qui lance l'évaluateur diesel
  19. bonuscad

    extrude comment ?

    bonjour, Dans l'ordre les conseils que je pourrais te donner pour que ton programme se déroule correctement: Faire un contrôle des entrées utilisateurs en t'aidant (iniiget) voir l'aide pour les bits de contrôle Une suggestion: utilser (gesdist) au lieu de (getreal) pour permettre une saisie graphique. Ex: (Setq P (getdist O "\nProfondeur du cote : ")) Vérifier l'accrochage aux objets. Soit en utilisant la variable OSMODE soit en incluant "aucun" dans la commande. Pas besoin d'utiliser "pedit" prends simplement l'option "clore" de la commande polyligne Ex: (command "_.pline" "_none" O "_Width" 0 0 "_none" P1 "_none" P2 "_none" P3 "_none" P4 "_none" P5 "_none" P6 "_none" P7 "_none" P8 "_close") Pour extruder ta polyligne tu peux faire: (command "_.extrude" "_last" "" h "") Mais pour que celle-ci fonctionne, il faut être sur que la figure obtenue ne soit pas auto-coupante: Un contrôle logique des variables fournies peut être fait à l'aide des fonction "> " ou "< " pour éviter ce cas. Voilà pour mes principales observations. Bonne continuation ;)
  20. bonuscad

    appli profil

    Là il y a une part de "rêve", une application sous LT qui ferais ce que fais COVADIS sous une version pleine.... Franchement impossible, à la rigueur si LT-Extender est disponible sur ta machine et cela reste encore à voir!
  21. Que veux tu dire? La procédure pour créer un bouton et y assimiler une macro? Quand le pointeur est sur une barre de bouton, tu fais un click-droit, et tu dois avoir un menu contextuel qui apparait avec à la fin l'option "personnaliser" Si tu clique dessus, tu vas avoir une boite de dialogue nommée "barres d'outil" avec un encore un bouton "personnaliser..." Tu clique dessus et une nouvelles boite "Personnalise les barres d'outils" apparait. Dans la liste choisis encore une fois "personnalisé" La tu as 2 icones vierge, 1 normal et un avec 1 petit triangle noir Prends le normal et en maintenant le click-enfoncé tu le fais glisser sur une barre ou tu veux le placer. Une fois placé dans ta barre, relache et fais un click-droit sur celui-ci et tu vas avoir une boite qui apparait "propriétés du bouton" Il ne te reste plus qu'a remplir celui-ci avec dans la zone macro, les lignes fournies dans les posts précédent. Le reste tu le rempli à ta convenance...
  22. bonuscad

    Flocon

    Pour info, j'ai mis le doigt là où ça coince pour les version inférieure à 2007: c'est la fonction (vlax-put pl 'Coordinates lors du premier appel pour (unfract) (unfract) retourne bien une liste, mais elle n'est pas accepté par (vlax-put Je ne peux te dire si la liste est bonne car trop longue (elle est tronquée à l'affichage) Voilà si ça peux t'aider ...
  23. bonuscad

    Flocon

    Ben non, toujours pareil pour moi sous 2000, 2002 ou 2005. Je pense pas que cela vienne de la récursivité car j'ai essayé les fractals de CHEN QING JUN dont on peut avoir le code sur TheSwamp et elles fonctionnent. Les fonctions vlax sont capricieuses avec les versions d'Autocad. Le code que j'ai fais offset_vertex fonctionne sous 2005, mais sous 2002 et 2000 (avec quelque incohérence pour cette dernière) me sort d'Autocad avec un message d'erreur lors de la 2ème utilisation si elle est relancé de suite ?!?! Je crois qu'il ne faut pas trop chercher, mais l'ennuyeux c'est qu'on ne peut guère pondre un code qui soit compatible sans problème d'une version à l'autre dès qu'on utilise l'activeX. Vu l'éventail des versions encore utilisées, je dirais que ça facilite pas le partage :mad:
  24. bonuscad

    Points X,Y

    La page principale ou lien direct fichier
  25. bonuscad

    Flocon

    A priori il n'a plus de segment mémoire libre, j'ai glissé un (mem) dans ton code et voici le retour J'avais essayé aussi de faire un (trace) des fonctions, mais là c'est digne d'un écran de MATRIX ;) Un (gc) glissé aussi dans le code n'a rien résolu :mad:
×
×
  • 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é