Matt666 Posté(e) le 27 septembre 2007 Posté(e) le 27 septembre 2007 Salut ! Petite suggestion de dév, Perso je suis trop mauvais avec les grread et grdraw pour pouvoir faire ça... Cahier des charges : :P Créer un lisp permettant de reproduire l'accroche repérage de AutoCAD LT.Procédure :Dessin de base :http://images2.hiboox.com/vignettes/3907/0vlcm5gu.jpg1- Commande ligne (ou n'importe quelle autre !)2- Premier point (comme l'exemple mais on n'est pas obligé)3- Maj+Clic droit (ou autre pour appeler la commande)3a- Passage en mode ortho4- Clic sur un point pour le repérage (le dessin est verrouillé sur l'ortho, donc si on clic sur une extrémité, avec l'accroche, la ligne reste sur l'ortho et fait la longueur X ou Y de la distance entre le premier pt de la ligne et le réperage temporaire)5- Entrée pour terminer le repérage5a - 2ème pt de la ligne au niveau de pt de repérage temporaire.http://img294.imageshack.us/img294/9938/ex7by2.jpg6- Maj+Clic droit (ou autre pour rappeler la commande)7- clic sur autre point pour le repérage tempo (etc.)(8- Entrer une longueur pour un autre pt de repérage) ça je sais plus si ça le fait ou pas9- Entrée pour terminer la commande.10- La ligne est crée.http://img120.imageshack.us/img120/4144/ex8vr8.jpgFin de la commande ligne.Contraintes : :casstet: Si possible en autolisp pur, ou en tout cas avec les vl dispo dans les équivalences de (Gile) ..Voilà !Dites moi ce que vous en pensez ! A bientot.Matt. [Edité le 30/9/2007 par Matt666] "Chacun compte pour un, et nul ne compte pour plus d'un."
nomutt Posté(e) le 27 septembre 2007 Posté(e) le 27 septembre 2007 Bonjour, AutoCAD LT ne dispose pas de l'interpréteur LISP.Bon à savoir : depuis la version 2007, le mode Reperobj est inclu comme dans AutoCAD.Sinon pour les versions précedentes, il y a les filtres de coordonnées en .X pour des segments horizontaux et en .Y pour les segments verticaux.Tu les obtiens avec SHIFT & Clic droit > Filtres de coordonnées ou plus simplement en les saisissant au clavier. Exemple : .X & Entrée Nomutt,Consultant, Responsable Projets CAD/PLM'Add-ins pour Inventor + Trucs et Astuces.Disponible pour un poste administrateur CAO/PLM.
Matt666 Posté(e) le 27 septembre 2007 Auteur Posté(e) le 27 septembre 2007 AutoCAD LT ne dispose pas de l'interpréteur LISP.Oui oui je sais bien... C'est pour AutoCAD, ou clones... Je travaillais avant sous LT, et je trouvais ça vachement pratique !! Voilà... "Chacun compte pour un, et nul ne compte pour plus d'un."
Matt666 Posté(e) le 29 septembre 2007 Auteur Posté(e) le 29 septembre 2007 Et bah ça marche pas fort cette suggestion.... :( personne ne se lance ?Ptet que ce message est posté au mauvais endroit... "Chacun compte pour un, et nul ne compte pour plus d'un."
Matt666 Posté(e) le 4 octobre 2007 Auteur Posté(e) le 4 octobre 2007 Toujours pas...Peut-être que la demande n'est pas claire... Je vais essayer de la poster dans routines lisp... A bientot.Matt. "Chacun compte pour un, et nul ne compte pour plus d'un."
(gile) Posté(e) le 4 octobre 2007 Posté(e) le 4 octobre 2007 Salut, Peut-être que la demande n'est pas claire... Je vais essayer de la poster dans routines lisp... Ce n'est pas en changeant de forum quela demande s'éclaicira ;) Il y deux raisons possible à l'absence de réponse. La première, tu la donnes : la demande n'est pas très claire. La seconde, c'est que ceux qui seraient succeptibles de répondre par un développement (LISP VBA ou autre) à priori ne travaillent pas sur des versions LT et ne connaissent donc pas forcément le fonctionnement d'une commande spécifique à cette version. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Matt666 Posté(e) le 4 octobre 2007 Auteur Posté(e) le 4 octobre 2007 Merci pour ta réponse Gile ! Ouf ! Ce n'est pas en changeant de forum que la demande s'éclaicira Bah oué je me doute bien... la demande n'est pas très claire. J'ai essayé d'être le plus clair possible... Faut croire que c'est raté ! Tu comprends ce que je veux, toi, par exemple ? Toi qui maitrise parfaitement les grdraw et consorts ;) La seconde, c'est que ceux qui seraient succeptibles de répondre par un développement (LISP VBA ou autre) à priori ne travaillent pas sur des versions LT et ne connaissent donc pas forcément le fonctionnement d'une commande spécifique à cette version.Ce qui revient à la première raison... Grmbl... Le pire cet que je vois pas vraiment comment être plus clair !!a la limite j'aurais peut être pas du parler de Autocad LT...Bon je cherche un moyen d'être plus clair.. Merci Gile ! Matt. "Chacun compte pour un, et nul ne compte pour plus d'un."
(gile) Posté(e) le 4 octobre 2007 Posté(e) le 4 octobre 2007 Je ne suis pas sûr que l'utilisation de grread soit une solution. Pendant une boucle grread on pert l'accrochge aux objets. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Matt666 Posté(e) le 4 octobre 2007 Auteur Posté(e) le 4 octobre 2007 Ah oui, effectivement... Ca va pas fonctionner !!Dc il faut ptet faire une ligne fictive pour chaque pt temporaire que l'on créé ? Sinon je vois pas trop... Mais je vais tenter un truc comme ça.. "Chacun compte pour un, et nul ne compte pour plus d'un."
Matt666 Posté(e) le 7 novembre 2007 Auteur Posté(e) le 7 novembre 2007 Bon ben je crois que j'ai trouvé !! Si, si... Encore un problème incompréhensible sur l'inertion de blocs (??? Peut être du à BricsCAD...), mais sinon ça fonctionne très bien ! Voici la routine principale, EN EXCLUSIVITE MONDIALE ( :) );;; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;;; Repérage temporaire (defun rpd ( / pt1 pt2) (setq pt1 nil pt2 nil) (if (setq pt1 (getpoint "\nPremier point : ")) (progn (initget 128) (if (setq pt2 (getpoint pt1 "\nPoint de repérage temporaire : ")) (while pt2 (if (/= (type pt2) 'list) (setq pt1 (getcrd pt2 pt1)) (setq pt1 pt2) ) (initget 128) (setq pt2 (getpoint pt1 "\nPoint de repérage temporaire : ")) ) ) pt1 )) )Ensuite viennent se greffer quelques sous-routines, assez pratiques !!;;;**************************************************************** ;;; Read en prenant en compte le point (defun read2 (str) (if (/= str ".") (read str) str ) ) ;;;**************************************************************** ;;; Retourne les coordonnées en fonction de la casse de la chaîne de caractères (defun getcrd (str first / ) (cond ((eq (substr str 1 1) "@") (+ (str2lst (substr str 2 (strlen str)) ",") first) ) ((vl-string-position (ascii ",") str nil nil) (str2lst (substr str 1 (strlen str)) ",") ) ((vl-string-position (ascii "<") str nil nil) (polar '(0 0 0) (atof (cadr (str2lst str "<"))) (str2lst str "<") (car (str2lst str "<")) ) ) ((and (vl-string-position (ascii "<") str nil nil) (eq (substr str 1 1) "@") ) (polar first (atof (substr (str2lst str "<") 2 (strlen (car (str2lst str "<"))) )) (str2lst str "<") (car (str2lst str "<")) ) ) ((not (vl-string-position (ascii ",") str nil nil)) (polar first (angtof (itoa (proch (atoi (angtos (angle pt1 (cadr (grread 3))))) '(0 45 90 135 180 225 270 315 360) ) )) (read2 str) ) ) ) ) ;;;**************************************************************** ;;; Retourne l'élément de la liste le plus proche du nombre demandé. (defun proch (nb lst / ) (setq lst (cons (nth (1- (vl-position nb (sort (cons nb lst) '<))) lst ) (list (nth (vl-position nb (sort (cons nb lst) '<)) lst )) ) ) (if (<= (- nb (car lst)) (- (last lst) nb)) (car lst) (last lst) ) ) ;;;**************************************************************** ;;; STR2LST ;;; Retourne une liste à partir d'une chaîne de caractères concaténée avec un caratère de séparation ;;; str = Chaîne de caractères ;;; sep = caractère de séparation ;;; ;;; (str2lst "0,1,,,,2,3,4,5,6,7,8,9" ",") -> (0 1 "" "" "" 2 3 4 5 6 7 8 9) ;;; (str2lst "0,1,2,3,4,5,6,7,8,9" "" ) -> ("0" "," "1" "," "2" "," "3" "," "4" "," "5" "," "6" "," "7" "," "8" "," "9") (defun str2lst (str sep / pos lst ) (if (/= sep "") (progn (while (setq pos (vl-string-search sep str nil)) (setq lst (cons (read2 (substr str 1 pos)) lst) str (substr str (+ (strlen sep) pos 1) ) ) ) (setq lst (cons (read2 str) lst)) ) (progn (while (/= str "") (setq lst (cons (read2 (substr str 1 1)) lst) str (substr str 2) ) ) ) ) (if lst (reverse lst)) )Voilà... Le cahier des charges initial a été quelque peu modifié... Mais sinon ça tourne plutôt po mal !!! Attention, non testé sur Autocad !! Si des testeurs sont motivés, qu'ils n'hésitent pas !J'ai du oublier quelques "VL-" au passage... Voilà ! Dites moi ce que vous en pensez ! PS : C'est une routine d'accrochage temporaire ! par exemple on veut commencer une ligne à 2 unités en X et deux unités en Y d'une extrémité d'une ligne existante... Voilà !A bientot.Matt. "Chacun compte pour un, et nul ne compte pour plus d'un."
lili2006 Posté(e) le 7 novembre 2007 Posté(e) le 7 novembre 2007 Bonsoir à toutes et tous, Je veux bien tester, mais comment charge t-on la routine principale, les sous-routines et quels noms donne t-on ?? Ensuite, comment ça s'utilise. Bref, je ne sais rien faire mais suis prêt à apprendre. Merci d'avance. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Matt666 Posté(e) le 8 novembre 2007 Auteur Posté(e) le 8 novembre 2007 Salut lili2006 ! merci de t'intéresser à ce post !! quels noms donne t-on Bon la routine principale commence par (defun rpd...) (rapide quoi). S'il n'y a pas de c: avant le nom, il faut taper (rpd) sur la ligne de commande d'AutoCAD. Si la routine commençait par (defun C:rpd...) il aurait fallu taper rpd sur la ligne de commande. J'ai fait parce que le logiciel que j'utilise N'EST PAS AutoCAD ! C'est BricsCAD, et il ne veut pas de commande directe au sein d'une autre commande. Car c'est là l'utilité de cette routine. De créer des points temporaires au sein d'une commande.Regarde l'exemple plus haut... comment charge t-on la routine principale, les sous-routines Il faut créer un fichier LISP avec la routine principale et les sous-routines à l'intérieur. Ensuite je pense que tu sais comment faire ;) _appload et tout le tintouin ! Voilà en espérant avoir été aidant ! A bientot.Matt. "Chacun compte pour un, et nul ne compte pour plus d'un."
lili2006 Posté(e) le 8 novembre 2007 Posté(e) le 8 novembre 2007 Bonsoir à toutes et à tous, Tout d'abord, merci de tes explications Matt666, j'ai donc nommé mon fichier ("rpd.lsp en rajoutant C:), chargé,.... Quand je lance la routine seule, pas de pb, elle me propose bien de choisir les pts temporaires. Ou cela se gate, c'est là : 3- Maj+Clic droit (ou autre pour appeler la commande) Je ne sais pas comment apeller cette routine durant une commande en cours, alors évidemment pour le test, c'est raté,...Mais, comme tu as dû le constater déjà, je suis tétu (et oui, encore un Breton !) et j'aime bien comprendre (un minimun dans certains sujet, dont les tiens, car je n'y connais pas grand chose, pour ne pas dire rien en programmation,..). Donc, te serais t-il possible de me débloquer de cette étape ? merci de t'intéresser à ce post !! Plein de personnes s'y intéressent, seulement, comme l'a souligné (gile), au début on croit que c'est un outil pour une VLight (en tous cas moi !) et ensuite on ne sait qu'une chose (pour la plupart d'entres nous), c'est que l'on ne pourra pas résoudre ce problème;..Par contre, on attend le résultat impatiemment pour voir comment ça marche,... Merci d'avance de ta réponse. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Matt666 Posté(e) le 9 novembre 2007 Auteur Posté(e) le 9 novembre 2007 Salut Lili2006 ! Ok un breton de plus !! (moi aussi en même temps)... Enfin bon après de là à dire que l'Ille et vilaine est en bretagne, c'est tout un débat ! rpd.lsp en rajoutant C: J'ai pas été assez clair... Désolé ! Personnellement je ne peux pas appeler de commande (par exemple RPD) au sein d'une autre commande. Par contre si je tape (rpd), là ça fonctionne. Vive BricsCAD !!! Je ne sais pas comment apeller cette routine durant une commande en cours, alors évidemment pour le test, c'est raté,...Mais nan, t'inquiète !! Si tu regarde comment sont appelées les accroches objets dans AutoCAD, par exemple, tu verras qu'il faut insérer une quote avant le nom de la commande... genre 'RPD (bon par contre j'ai un doute, quand même ! je ne sais plus s'il faut mettre cette quote dans le MNU ou si on peut directement le mettre dans la ligne de commande... A tester !) 3- Maj+Clic droit (ou autre pour appeler la commande)Oui, je sais bien... Ca il faut le paramétrer toi même, et puis Le cahier des charges initial a été quelque peu modifié... Donc, procédure :1- Tu lances une commande ligne2- Premier point de la ligne où tu veux3- Là tu tapes 'RPD (si tu as fait comme tu as dit, a savoir (defun c:rpd)... Si tu as laissé comme tel, tu devras entrer (rpd).La routine se lance au sein de l'autre, et tu peux choisir les points temporaires !Lorsque ton dernier point temporaire correspond à ton extrémité de ligne, tu appuyes sur Entrée.La ligne est construite avec le dernier point que tu as choisi ! J'ai conscience que ce n'est pas très clair, et à première vue cette routine ne semble pas très pratique... Mais personnellement je l'utilise toutes les 2 minutes !!! Le cahier des charges initial a été quelque peu modifié...A savoir, que cette routine utilise les repères rapides (lorsque'on "allume" une accroche sur une entité en passant dessus) N'hésite à me dire si tu n'as pas compris... J'ai conscience de ne pas être très clair ! Merci pour ces tests !A bientot.Matt. "Chacun compte pour un, et nul ne compte pour plus d'un."
lili2006 Posté(e) le 9 novembre 2007 Posté(e) le 9 novembre 2007 Bonjour à toutes et tous, tape (rpd), là ça fonctionne. Vive BricsCAD !!! Sur AutoCAD aussi ! J'ai pas été assez clair... Désolé ! SI SI, je voulais juste savoir si on pouvait lancer un lisp durant l'édition d'une commande, ça aurait été vachement pratique,... Mais nan, t'inquiète !! Si tu regarde comment sont appelées les accroches objets dans AutoCAD, par exemple, tu verras qu'il faut insérer une quote avant le nom de la commande... genre 'RPD Commande transparente, non ?ça marche en apellant le lisp sur la ligne de commande : '(C:rpd)J'ai testé sur un bouton avec la macro :'rpd, lorsque je clique sur ce bouton, la commande en cours s'arrête.(Sans commande en cours, ça marche !). J'ai conscience que ce n'est pas très clair, et à première vue cette routine ne semble pas très pratique... Mais personnellement je l'utilise toutes les 2 minutes !!! Au contraire, c'est trés clair, pourquoi penses-tu ça ? Peux-tu me donner un ou deux cas concrêt de l'utilisation que toi tu en fait, je vois déjà un petit peu dans les domaines que j'utilises, mais je voudrais (si c'est possible), d'autres exemples d'utilisation.(J'ai compris également ton Application donnée en exemple !) Merci surtout à toi de proposer des idées et des outils (et surtout de les partager aussi gracieusement) Au plaisir.[Edité le 9/11/2007 par lili2006] [Edité le 9/11/2007 par lili2006] Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Matt666 Posté(e) le 9 novembre 2007 Auteur Posté(e) le 9 novembre 2007 Petit exemple d'utilisation ici ! On a une ligne de base (en vert). Sur celle ci, on veut créer une deuxième ligne qui commence à @20,-20 de l'extrémité droite et à @0,50 de l'extrémité gauche. Procédure sur la vidéo : 1- Commande Ligne 2- On tape (rpd) sur la ligne de commande puis entrée 3- Premier point de l'accroche rapide à l'extrémité droite de la ligne existante (verte) 4- Deuxième point (point de repérage temporaire) à x=20 5- Autre point de repérage temporaire à y=-20 6- Entrée pour valider le dernier point de repérage. On voit sur la ligne de commande que la commande ligne est repassée en commande courante. Le dernier point de repérage est devenu le premier point de la ligne 7- On tape (rpd) sur la ligne de commande puis entrée 8- Premier point de l'accroche rapide à l'extrémité gauche de la ligne existante (verte) 9- Deuxième point (point de repérage temporaire) correspondant à l'intersection entre l'extension du premier point de la ligne en cours de création et le premier point de l'accroche rapide 10- Autre point de repérage temporaire à y=-10 11- Entrée pour valider le dernier point de repérage. On voit sur la ligne de commande que la commande ligne est repassée en commande courante. Le dernier point de repérage est devenu l'extrémité de la ligne 12- Entrée pour finir la commande ligne... Bien évidemment on peut faire beaucoup plus court, mais c'est un exemple qui montre aussi l'utilisation de l'extension dans la commande. Voilà, j'espère que tu (vous ?) verras l'utilité de cette accroche après ça !durant l'édition d'une commandeIci tu vois bien que j'utilise la routine au sein d'une commande existante.. C'est une routine transparente, comme tu dis. J'ai testé sur un bouton avec la macro :'rpd, lorsque je clique sur ce bouton, la commande en cours s'arrête.(Sans commande en cours, ça marche !).C'est bizarre, chez moi ça fonctionne bien... tu n'as pas mis de ^c^c^c avant ?? Si c'est la cas, enlève les, ça veut dire 3 fois échap... Peux-tu me donner un ou deux cas concrêt de l'utilisation que toi tu en faitJe travaille dans l'agencement... Donc, par exemple, - je veux que ma porte ait 1,5 millimètres de jeu Tout autour du caisson. On pourrait faire un rectangle puis le décaler de 1,5mm, mais perso j'utilise (rpd) - Le fond de mon tiroir commence à x=10mm et y=8mm de la façade Plein de trucs comme ça !!Je doute que ces exemples te soient utiles, mais ils ont le mérite d'être concrets ! Merci surtout à toi de proposer des idées et des outils (et surtout de les partager aussi gracieusement)Bah de rien !! Ce n'est pas grand chose à coté du travail fourni par (gile) ou Patrick_35 sur ce site... Mais c'est gentil de me le dire ! :) A bientot !Matt. "Chacun compte pour un, et nul ne compte pour plus d'un."
lili2006 Posté(e) le 9 novembre 2007 Posté(e) le 9 novembre 2007 Re, Alors là, si on comprend pas, c'est qu'on le fait exprés !!!!!!!!!!! Merci encore pour tes exemples et cet outil Matt666. On sent qu'il faudra y penser quand le besoin s'en fera sentir. Je vais essayer d'être vigileant sur les occasions d'utiliser l'accroche temporaire et te ferai un retour. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 9 novembre 2007 Posté(e) le 9 novembre 2007 Re, 5- Autre point de repérage temporaire à y=-20 AutoCAd me renvoi : Spécifiez le premier point: Spécifiez le premier point: 'rpdPremier point : 20Point de repérage temporaire : 20; erreur: nombre d'arguments trop important Mode ortho ou non !??? Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Matt666 Posté(e) le 9 novembre 2007 Auteur Posté(e) le 9 novembre 2007 Premier point : 20Point de repérage temporaire : 20; erreur: nombre d'arguments trop important Arrr... Bon je récupère mon PC ce WE, et avec tautocad dessus, on verra bien !! Par contre juste un truc, j'ai l'impression que pour ton premier point, (Premier point : 20) tu as mis une valeur, alors qu'il attend simplement un point (getpoint)... Il faut d'abord spécifier un point, puis entrer les valeurs à partir de ce point. Mais je vois ça ce WE.. Merci pour ce test ! "Chacun compte pour un, et nul ne compte pour plus d'un."
lili2006 Posté(e) le 9 novembre 2007 Posté(e) le 9 novembre 2007 Re, Oui, j'ai peut-être rentré le chiffre "20", je vais reprendre les tests plus tard dans la soirée. Merci à toi. [Edité le 9/11/2007 par lili2006] Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant