Aller au contenu

Messages recommandés

Posté(e)

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.jpg

1- 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 ortho

4- 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érage

5a - 2ème pt de la ligne au niveau de pt de repérage temporaire.

http://img294.imageshack.us/img294/9938/ex7by2.jpg

6- 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 pas

9- Entrée pour terminer la commande.

10- La ligne est crée.

http://img120.imageshack.us/img120/4144/ex8vr8.jpg

Fin 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."

Posté(e)

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.

Posté(e)
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."

Posté(e)

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."

Posté(e)

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."

Posté(e)

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

Posté(e)

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."

Posté(e)

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."

  • 1 mois après...
Posté(e)

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."

Posté(e)

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."

Posté(e)

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/

Posté(e)

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 ligne

2- Premier point de la ligne où tu veux

3- 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."

Posté(e)

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/

Posté(e)

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 commande

Ici 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 fait

Je 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."

Posté(e)
Premier point : 20

Point 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."

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é