Aller au contenu

Topheur

Membres
  • Compteur de contenus

    93
  • Inscription

  • Dernière visite

Tout ce qui a été posté par Topheur

  1. Bonsoir gile, Désolé du retard, j'ai dû oublié d'activer la notification par mail, du coup le week end étant (enfin) là, je me suis dis, je vais faire un up mais j'ai la réponse à ma question. Sujet résolu ! Merci.
  2. Salut bonuscad C'est vrai qu'avec les commentaires ça fait peur :(rires forts): Mais l'avantage c'est que certaine partie du code peuvent servir pour d'autre lisp ! Je vais regarder ça à tête reposé quand j'aurais un peu plus de temps. Il est vrai qu'un lisp tous fait est le bienvenue mais avec les coms on peut le modifier plus facilement. Bon j'avoue que j'aurais probablement encore des questions mais je vais d'abord bricoler un peu ;)
  3. Messieurs, Dames, bonsoir, Une question à deux euros :(rires forts): , comment fait on lorsque l'on insert un bloc dynamique pour modifier un paramètre dynamique ? Pour un attribut c'est : (setpropertyvalue bloc "NOM_ATTRIBUT" Ex_Nom_Attribut) Pour la visibilité c'est : (setpropertyvalue bloc "AcDbDynBlockPropertyModele" (itoa Nom_Visibilité) ) Mais pour un paramètre de distance... Je sais pas :( Quelqu'un doit bien connaitre cette ligne de commande :P Merci par avance
  4. Bonjour bonuscad, C'est dans cette veine là. Par contre 2 choses : - Il faudrait ne pas avoir à sélectionner les cotes, mais le faire au même moment que l'on trace la cotation, dans l'ordre : 1. point d'origine pt0 2. point de cotation pt 3. point pour placer la cotation ptp 4. cotation aligné avec marge - Il faudrait ajouter la marge uniquement du côté de pt (ton lisp retranche la cotation des deux cotés). Une question(désagréable) de ma part (parce que je suis chiant :D ), pourquoi vous ne commentez pas vos lisps avec des ; Ne le prends pas mal c'est juste que ton lisp est (pour moi) très complexe et je ne comprends pas la moitié des lignes <img src='http://cadxp.com/public/style_emoticons/<#EMO_DIR#>/laugh.gif' class='bbc_emoticon' alt=':(rires forts):' /> J'ai remarqué que les lispeurs ne commentent pas beaucoup leurs codes (à l'intérieur même des lisps pas lorsqu'on leur demande de plus ample infos), y a t-il une raison ? Cela à t-il une incidence sur la rapidité du code ? Merci de ton aide.
  5. Bonjour amis lispeurs :) Comme d'habitude, j'ai besoin de vos connaissance pour un lisp... J'ai réalisé un lisp qui me permet de faire des cotations aligné. Mon problème et que j'aimerais rajouter une marge. Pour ce faire j'ai deux possibilités : - Faire une cotation aligné ex. 100, éditer la cotation et rajouter ma marge ex. 50 se qui me permet d'obtenir une cotation tracé de 100 mais qui affiche 150. Cela fonctionne parfaitement mais peut induire en erreur vu que la cotation tracé n'est pas égale à la cotation inscrite. La deuxième solution (mais je ne trouve pas le code) c'est de déplacer le point utilisateur (normalement cliqué à 100) et le positionner à 50 plus loin. J'ai défini une variable pt0 et pt1 (pt0 étant l'origine et pt1 le point de cote utilisateur) Lors de mes essais, je demande à Autocad de tracer une cotation alignée de pt0 à pt1 +50 cela ne fonctionne pas et dans le message d'erreur je pense comprendre que celui-ci attend une coordonnée... Je sais qu'il y aurait une troisième solution en modifiant le style de cotation (par ex. rajouter à la cotation un signe +50) mais cela n'est pas ce que je veux obtenir visuellement parlant. Je ne veux pas non plus modifier le style de cotation client en affectant un arrondi quelconque. Merci de votre aide. PS : comment passe t-on un sujet en résolu, il me semblait qu'il existé une petite ampoule pour passe le sujet en résolu mais je ne là vois plus B) (ou je suis très fatigué :D )
  6. Tu as parfaitement raison, je l'ai changer par un string. Au début je n'avais que des 1/2/3 puis les 3D/4D sont arrivées :P Mais bien vu ;)
  7. Bonjour didier, Il est vrai qu'il est plus simple de faire les choses dans l'ordre :)
  8. Alors x_all, je t'inscrit au panthéon des lispeurs ! :D Tu as résolu mon problème, j'avais bien essayé le setq et le strcat mais je m'étais ' et je n'utilisais pas rtos. En tous cas, ça fonctionne et je te remercie. A bientôt car mais projets ne sont pas terminés :P
  9. Bonjour x_all, Je vais essayé cette piste et je n'y suis pas parvenu car je l'ai mixé avec un setq. Je te donnerais mon retour dès que j'aurais essayé et si ça marche, je noterais ton pseudo avec celui de gile :(rires forts):
  10. Bonjour à tous et à toutes sans oublier gile :P Je cherche à "assembler" des variables et du texte. Pour faire simple, l'utilisateur rentre un Type Appartement (uniquement 1 2 3 4D etc..) Puis une lettre (ex. A) et un numéro (ex. 01) ;;type APP (setq type_APP (getint "\nEntrer le type appartement (1/2/3/4D...) :")) ;;nom de l'APP (setq lettre_APP (getstring "\nEntrer la lettre de l'appartement :")) ;;numéro APP (setq numero_APP (getint "\nEntrer le n° d'appartement :")) Et j'aimerais obtenir dans une variable (nom_APP_COMPLET) avec le format suivant : T2.A01 T étant du texte rajouter en lisp 2 exemple pour type_APP . texte rajouter en lisp A exemple lettre_APP 01 exemple numero_APP J'ai essayer plusieurs code sans succès en partant d'un setq ;;nom de l'app complet (setq nom_APP_COMPLET 'T type_APP) J'utilise le résultat dans un bloc avec attribut avec la ligne suivante : (setpropertyvalue bloc "APP_COULEUR_1" (itoa type_APP)) J'ai essayé avec itoa ou sans itoa mais ça ne fonctionne pas. Merci de votre aide.
  11. Topheur

    Relier Blocs entre eux

    J'ai réussi avec la fonction sslength !!! :(rires forts): Je n'y arrivais pas car dans le code suivant : (setpropertyvalue bloc "ATTRIBUT_NBRS_BLOCS" (itoa nbs_blocs)) je n'avais pas mis itoa... Pour en revenir au clic, j'étais un peu pressé. En fait je n'ai pas besoin de savoir combien de clic l'utilisateur à fait. Sujet résolu, mais je pense avoir encore besoin de tes lumières dans de futur lisp. @ bientôt :)
  12. Topheur

    Relier Blocs entre eux

    Bonjour Gile, Comme promis, je reviens donner mes impressions. Ce lisp fonctionne parfaitement. Pendant que l'on y est "Où il y a de la gêne, il n'y a pas de plaisir" :D Peut-on inscrire dans une variable, le nombres de blocs sélectionné ? Idem pour un nombre de clic ? J'ai un code similaire que j'utilise avec un clic sur le premier bloc(sans sélection) puis clic (2e point) sur le bloc suivant et ainsi de suite. Je l'utilise dans le cas ou je n'ai que du dessin. J'aimerais avoir le nombre de clic dans ma variable. Merci :)
  13. Topheur

    Relier Blocs entre eux

    Bonjour Gile, Comme c'est la fête des mamans aujourd'hui, je n'ai pas le temps de regarder le code aujourd'hui. Je te ferais un retour après avoir regardé. Merci
  14. Topheur

    Relier Blocs entre eux

    Bonjour Gile, C'est ce que je cherche mais j'aimerais connaitre le nom de la variable enregistrant les points de base car lorsque le lisp trace le trait, j'aimerais insérer un bloc dynamique au point d'insertion du bloc. J'ai compris que pt est le point de départ mais pour le reste... Moi, pour tracer un trait j'utilise command ... Merci de ton aide.
  15. Bonjour les lispeurs et les lispeuses :) J'ai besoin de votre aide pour comprendre ce lisp ;;;Taper GAGB pour utiliser (defun c:gagb (/ ss n lst) (if (setq ss (ssget '((0 . "INSERT")))) (progn (setq n -1) (while (setq pt (ssname ss (setq n (1+ n)))) (setq lst (cons (cdr (assoc 10 (entget pt))) lst)) ) (command "_.pline") (mapcar '(lambda (x) (command "_non" x)) lst) (command) ) ) (princ) ) Il permet de relier les blocs sélectionnés par leur point de base entre eux. J'aimerais adapter ce code en choisissant mon PREMIER BLOC OU mon PREMIER POINT (si c'est plus simple). Puis relier de ce PREMIER bloc (ou point) les autres blocs que je sélectionnerais. Un petit dessin... Sur le dessin j'ai mis de la couleur car je ne veux pas comme le lisp actuel une seule polyligne, je voudrais une ligne par bloc mais la couleur serais toujours la même. En bref je clique pour avoir mon premier point puis je sélectionne TOUS les blocs que je veux ramener à ce premier point, j'appuie sur entrée et mes lignes sont tracées automatiquement. Dans l'idée, je voulais définir un premier point via ;point de départ (setq pdep (getpoint "\nSpécifiez le premier point: ")) ;; point de départ Puis faire une boucle while qui ferait avec une(command "_.line" qui aurait pour point pdep => point base bloc 1 puis pdep => point base bloc 2 etc... Si on ne peut pas tracer dans l'ordre de sélection, se n'ai pas grave, c'est juste la solution qui me parais la plus simple... ou pas :D Merci de votre aide :)
  16. Topheur

    Changer variable lisp

    Bonjour, Merci Gile, c'est exactement se que je voulais ;) Merci à tous pour votre aide :)
  17. Topheur

    Changer variable lisp

    J'espère ne pas t'offusquer avec ma réponse mais ... Je sais que l'anglais m'aiderais grandement mais je sais aussi que l'on peut faire sans (je développe en VBA des applications relativement complexe sans comprendre l'anglais) Par contre pour arriver à ce résultat, il m'a fallut un nombre d'années, de test, etc. J'ai commençais l'arduino (pseudo codage en C), je fais quelques bricoles, et quelques programmes complexe et encore une fois, sans comprendre l'anglais. J'avoue ne pas avoir envie d'apprendre le lisp par manque de temps et parce que mes petits programme font le boulot mais ne sont pas optimisé. Pour en revenir au fait, le seul point de blocage et que j'arrive à avoir la phrase utilisateur : entrer le numéro du premier tube : MAIS je n'arrive pas à avoir entrer le numéro du premier tube : 21 (21 étant la variable numero_tube et que celle ci soit modifiable) Merci de votre aide.
  18. Topheur

    Changer variable lisp

    Tous d'abord merci de ces premières réponses :) - Mon premier problème, je dispose de l'aide autocad mais en anglais... - Mon deuxième problème c'est que je ne sais pas utiliser getkword avec une variable. Je m'en sers sur une autre macro mais avec un choix simple (désirez vous une boite ? réponse oui ou non et insert un bloc ou non) Dans mon cas, je ne sais pas comment l'utiliser :( J'avoue manquer de culture en lisp... J'ai essayer (initget 1 numero_tube) (setq numero_tube (getkword "\nentrer le numéro du premier tube : "(numero_tube))) ;; récupère le numéro du premier tube mais ça ne marche pas, je n'arrive pas à avoir en choix utilisateur numero_tube et pouvoir le modifier. Je reviens donc vous demander un indice pour réussir au résultat escompter ;) Merci de votre aide
  19. Bonjour au roi du lisp :) Comme à mon habitude, j'ai besoin des experts pour modifier un de mes lisps... J'ai un lisp qui demande un point de base puis un numéro de tube à l'utilisateur via cette ligne de code : setq numero_tube (getint "\nentrer le numéro du premier tube :")) ;; récupère le numéro du premier tube Ensuite, le lisp demande le 2e point de cotation et place se numéro au point de cotation. Une boucle while permet d'incrémenter la variable numero_tube et demande le point de cotation pour placer le numéro suivant. J'aimerais que lorsque mon code incrémente la variable numero_tube, celle ci demande à l'utilisateur de valider ou de modifier la variable car le prochain chiffre est incrémenté dans 80% des cas mais peut aussi sauter plusieurs numéro. Donc aujourd'hui je sors de mon lisp et relance avec le numero_tube, le problème c'est que je dois reprendre mon point de base et je perds de précieuses secondes. Exemple On lance le lisp, l'utilisateur entre 20 en numero_tube, il place sa cote le lisp continue mais demande à l'utilisateur si 21 est le prochain numero_tube setq numero_tube (getint "\nentrer le numéro du premier tube :" 21)) (j'ai essayé setq numero_tube (getint "\nentrer le numéro du premier tube :" numero_tube)) mais ça ne fonctionne pas :( ) Merci de votre aide Le code est dispo à la demande, je ne le note pas pour éviter un message trop long ;)
  20. Topheur

    Spline en 2 points

    Merci, plus qu'à adapter à mon code. Sujet clos
  21. Topheur

    Spline en 2 points

    Bonsoir Gile, Merci pour ce premier jet. Le seul soucis c'est qu'avec 2 arcs, si je veux déplacer un point c'est beaucoup moins jolie (ça ne trace pas une polyligne mais 2 arcs). Ce que je ne comprends pas c'est que le lisp trace deux arcs sans connaitre le milieu (défini par calcul) donc pourquoi ne sait il pas me tracer un arc et définir son point milieu (p2 divisé par 2 et comme on est sur le même plan que p1, pour la hauteur, on peut la définir dans le lisp) ? Ou passer par un autre point ? De plus sur le lisp que j'ai mis dans mon post, il ne connait que 2 points (le point d'insertion d'un bloc et un 2e point utilisateur) et il trace quand même une spline (ou je me trompe). Merci d'éclairer ma lanterne
  22. Bonjour à tous et à toutes :) Encore une fois, j'ai besoin des maitres du lisp sinon je vais devenir chauve à force de me tirer les cheveux <img src='http://cadxp.com/public/style_emoticons/<#EMO_DIR#>/laugh.gif' class='bbc_emoticon' alt=':(rires forts):' /> Je suis à la recherche d'un lisp pour tracer une spline entre 2 points (ou un arc mais j'ai parcouru la toile et avec deux points début/fin ce n'est pas possible de tracer un arc). Du coup, je décide de remplacer l'arc par une spline et je tombe sur ce post : http://cadxp.com/topic/32138-splines-automatiques/ Malheureusement les liens sont mort. J'ai également trouver ce lisp qui serait encore mieux mais je ne veux pas choisir des blocs mais des clics. Le problèmes c'est que là c'est du très haut niveau pour moi <img src='http://cadxp.com/public/style_emoticons/<#EMO_DIR#>/laugh.gif' class='bbc_emoticon' alt=':(rires forts):' /> (defun l-coor2l-pt (lst flag / ) (if lst (cons (list (car lst) (cadr lst) (if flag (+ (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) (caddr lst)) (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) ) ) (l-coor2l-pt (if flag (cdddr lst) (cddr lst)) flag) ) ) ) (defun c:dyn_pieuvre ( / js dxf_cod mod_sel n lremov ename l_pt l_pr key alpha ori1 tg1 tg2) (princ "\nChoix d'un objet modèle pour le filtrage: ") (while (null (setq js (ssget "_+.:E:S" (list '(0 . "*LINE,POINT,ARC,CIRCLE,ELLIPSE,INSERT") (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) ) ) ) ) (princ "\nCe n'est pas un objet valable pour cette fonction!") ) (vl-load-com) (setq dxf_cod (entget (ssname js 0))) (foreach m (foreach n dxf_cod (if (not (member (car n) '(0 67 410 8 6 62 48 420 70))) (setq lremov (cons (car n) lremov)))) (setq dxf_cod (vl-remove (assoc m dxf_cod) dxf_cod)) ) (initget "Unique Tout Manuel _Single All Manual") (if (eq (setq mod_sel (getkword "\nMode de sélection filtrée, choix [unique/Tout/Manuel]<Manuel>: ")) "Single") (setq n -1) (if (eq mod_sel "All") (setq js (ssget "_X" dxf_cod) n -1) (setq js (ssget dxf_cod) n -1) ) ) (repeat (sslength js) (setq ename (vlax-ename->vla-object (ssname js (setq n (1+ n))))) (setq l_pr (list 'StartPoint 'EndPoint 'Center 'InsertionPoint 'Coordinates 'FitPoints)) (foreach n l_pr (if (vlax-property-available-p ename n) (setq l_pt (if (or (eq n 'Coordinates) (eq n 'FitPoints)) (append (if (eq (vla-get-ObjectName ename) "AcDbPolyline") (l-coor2l-pt (vlax-get ename n) nil) (if (and (eq n 'FitPoints) (zerop (vlax-get ename 'FitTolerance))) (l-coor2l-pt (vlax-get ename 'ControlPoints) T) (l-coor2l-pt (vlax-get ename n) T) ) ) l_pt ) (cons (vlax-get ename n) l_pt) ) ) ) ) ) (cond (l_pt (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (redraw) (cond ((eq (car key) 5) (foreach n l_pt (grdraw (trans n 0 1) (cadr key) 3) ) ) ) ) (if (eq (car key) 3) (foreach n l_pt (setq alpha (angle (trans n 0 1) (cadr key))) (cond ((and (>= alpha (* pi 0.25)) (< alpha (* pi 0.5))) (setq ori1 pi) ) ((and (>= alpha (* pi 0.5)) (< alpha (* pi 0.75))) (setq ori1 0.0) ) ((and (>= alpha (* pi 0.75)) (< alpha pi)) (setq ori1 (* pi 1.5)) ) ((and (>= alpha pi) (< alpha (* pi 1.25))) (setq ori1 (* pi 0.5)) ) ((and (>= alpha (* pi 1.25)) (< alpha (* pi 1.5))) (setq ori1 0.0) ) ((and (>= alpha (* pi 1.5)) (< alpha (* pi 1.75))) (setq ori1 pi) ) ((and (>= alpha (* pi 1.75)) (< alpha (* pi 2))) (setq ori1 (* pi 0.5)) ) (T (setq ori1 (* pi 1.5))) ) (if (and (>= alpha 0) (< alpha pi)) (setq tg2 (polar (cadr key) (* pi 0.5) (distance (trans n 0 1) (cadr key)))) (setq tg2 (polar (cadr key) (* pi 1.5) (distance (trans n 0 1) (cadr key)))) ) (setq tg1 (polar (trans n 0 1) ori1 (distance (trans n 0 1) (cadr key)))) (command "_.spline" "_none" (trans n 0 1) "_none" (cadr key) "" "_none" tg1 "_none" tg2) ) ) (redraw) ) ) (prin1) ) Voilà, vous savez tous, merci de votre aide.
  23. Bonjour les lispeurs, Je vous ai dérangé pour rien, je voulais absolument modifier la ligne getpoint et je n'ai pas pensé à regarder la ligne d'insertion du bloc ! J'aurais pu trouvé tous seul si j'avais réfléchis ! Grrr ! Du coup cela amène une nouvelle question (qui n'a rien à voir), dans mon lisp, je demande à l'utilisateur de rentré un premier numéro, je fais une boucle et le lisp effectue une cotation, l'insertion d'un bloc puis incrémente le numéro puis effectue une cotation, insert le bloc incrémente, etc... Le soucis c'est qu'à de rare cas, le numéros suivant ne fait pas partie d'une suite logique. Par exemple, je peux avoir 1 2 3, puis avoir 1 2 31 4 5 par exemple (car le numéro 3 est déjà utilisé par le client du coup il deviens x1). Un autre exemple : 1 2 3 4 5 61 7 8 9 (là 6 est déjà utilisé, il deviens 61) Comment je peux donner le choix de modifier le numéro à incrémenter à la demande du client ? Dans l'idée, lorsque le lisp incrémente, il faudrait un getstring avec noté Incrément ? x (valeur du nombre)puis à la fin le code ré-incrémente avec la dernière valeur de la suite logique. Exemple : 1 2 3 51 6 7 donnera lorsque 3 est inséré Incrément ? 4 => l'utilisateur appuie sur entrée pour valider puis donnera lorsque 4 est inséré Incrément ? 5 => l'utilisateur note 51 l'utilisateur insère 51 et avoir Incrément ? 6 Voici la partie avec ma boucle ;boucle tant que numero_piece inférieur à 14 (while (<= numero_piece 14) ;afficher un message en bas de l'écran (grtext -1 "Tracer de la Cote...") ;point de départ de la cote (setq pdep (getpoint "\nCliquer sur le centre de la PIECE: ")) ;t=true la boucle se répétera tant que l'on n'en sortira pas avec un echap (while T ;; t=true la boucle se répétera tant que l'on n'en sortira pas avec un echap ;defini le calque cotation comme courant (command "calque" "CH" "_COT. PIECE" "") ;trace la cote alignée en demandant le dernier point (setq pfin_cot (getpoint pdep "\nSpécifiez le point de cotation: ")) (command "_dimaligned" pdep pfin_cot pause) ;; dessine la côte ;défini la longueur de la cotation (setq LC (rtos (distance pdep pfin_cot))) ;création (si le calque existe pas) et defini le calque A SUPP comme courant (command "-calque" "e" "_A SUPP" "") ;afficher un message en bas de l'écran (grtext -1 "Infos Cotation...") ;gère l'insertion du bloc et du remplissage des attributs '---------------------------------------------------- ;; enregistrement des valeurs initiales de la variable système (setq attreq (getvar "ATTREQ")) ;; modification des valeurs courantes de la variable système (setvar "ATTREQ" 0) ;; insère le bloc (command "_insert" "00_N_PICE" pfin_cot 1 1 0) ;; restauration des valeurs initiales de la variable système (setvar "ATTREQ" attreq) ;; nom d'entité du bloc inséré (setq bloc (entlast)) ;; assignation des valeurs d'attribut (setpropertyvalue bloc "NUM_PIECE" numero_piece) (setpropertyvalue bloc "NOM_PIECE" nom_piece) (setpropertyvalue bloc "NUM_PIECE_INT" (itoa numero_piece)) (setpropertyvalue bloc "COTE_PIECE" LC) '---------------------------------------------------- ;incrémente le numéro de piece (setq numero_tube (1+ numero_piece)) ) ) ;while (princ) )
  24. Bonjour à tous les forumeurs et les forumeuses et joyeux 14 Juillet à tous :) Comme d'habitude, j'ai un problème de code lisp. J'aimerais récupérer le dernier clique utilisateur pour insérer un bloc. Mon code permet de créer une cotation alignée avec toujours le même point de départ ;trace la cote alignée en demandant le dernier point (setq pfin_cot (getpoint pdep "\nSpécifiez le point de cotation: ")) (command "_dimaligned" pdep pfin_cot pause) ;; dessine la côte et insert un bloc en demandant le point d'insertion du bloc ;(setq pins (getpoint "\nInsertion ?\n")) J'aimerais insérer mon bloc au bout de ma cote (le point pfin_cot). J'ai essayé ça (setq pins (getpoint (pfin_cot)) Mais ça ne fonctionne pas :( Merci de votre aide :P
  25. Hello, Là c'est pas cool <_< J'utilise le lisp pour gagner du temps, c'est quand même hallucinant de ne pas pouvoir voir le tracer ! Appuyer 3 fois sur entrer je trouve ça idiot mais bon tracé un arc sans voir le tracé passe encore mais pour une spline c'est problématique. Mais si le magicien du lisp n'y parviens pas, je pense qu'il va falloir que je me contente de mes 3 fois entrée :( Merci en tous cas, il me reste encore un peu de chose à développer dans mon code mais j'approche du but grace à toi. Mille merci
×
×
  • 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é