bonux Posté(e) le 30 juin 2004 Posté(e) le 30 juin 2004 salut a tous enfin je me lance ,j'essaye de faire mon premier lisp mais je crois que je vais avoir besoin de votre aide. j' aimerai créer un lisp ( peut être qu'il existe déjà ?!) pour pouvoir déplacer un texte et lui appliqué une rotation en même temps sans étre obligé d'applique les 2 commandes l'une aprés l'autre.les géomêtre me comprendront , car quand il faut déplacer les altitudes d'un point çà va mais quand il y en a 500 c'est déjà plus long.bref vous aller me trouver ridicule avec mon début de lisp mais si vous pouvait m'éclairé un peu je vous en serez trés reconnaissant (defun c:DEPLACETEXTE() (command"_move") (command"_rotate) (princ "\n==> DEPLACETEXTE")(princ) :casstet:
chrchat Posté(e) le 30 juin 2004 Posté(e) le 30 juin 2004 Voila pour toi Bonux : (defun c:mr () ;definition de la commande (prompt "\nselectionner les objets à déplacer") ;selection des objets (setq obj (ssget)) ;creation de la variable obj qui contient la selection (setq a (getpoint "\npoint de base")) ;comme son nom l'indique (setq b (getpoint a "\npoint de destination")) ;comme son nom l'indique (command "deplacer" obj "" a b) ;la commande déplacer (setq rot (getpoint "\nPoint origine de la rotation")) ;comme son nom l'indique (setq ang (getreal "\nangle de rotation")) ;comme son nom l'indique (command "rotation" obj "" rot ang) ;la commande rotation (princ) ) Voila c'est fini CCAD la DAO au service de l'Energie - http://c.cad.free.fr
Pako Posté(e) le 30 juin 2004 Posté(e) le 30 juin 2004 Tu peux toujours t'inspirer de la commande Copy/Move/Rotate ( _.MOCORO) dans les Express Tools. Bonne Chance ! il y a un début à tous ! Voici un pti coup de main ..... my friend ! ;CR.lsp;Pour faire une copie et une rotation en une seule commande;(par rapport a un point) (defun c:cr() ;(savevar) (setq sel(ssget)) (setq pivot(getpoint "\nEntrez le point de pivot: ")) (setvar "orthomode" 1) (command "copy" sel "" pivot pivot) (command "rotate" sel "" pivot pause) ;(restvar) (princ)) l'ACADien ! http://img124.exs.cx/img124/7999/start.gif
Patrick_35 Posté(e) le 30 juin 2004 Posté(e) le 30 juin 2004 Salut,C'est bien de se lancer, et je vais essayer de d'aider dans la mesure du possible Donc à mon tour pour de donner un exemple (defun c:deplacetexte(/ sel cmd) ; définition de la fonction (setq cmd (getvar "cmdecho")) ; récuperer la valeur de cmdecho (setvar "cmdecho" 0) ; commandes maintenant invisibles (setq sel (entsel)) ; selection d'un objet qui sera "stocké" dans la variable sel (if sel ; condition si une sélection à été faite (progn ; condition vrai (princ "\nDépacement de l'objet : ") ; message (command "_.move" (car a) "" pause pause) ; déplacement (princ "\nRotation de l'objet : ") ; message (command "_.rotate" (car a) "" pause pause) ; rotation ) ; fin du progn ) ; fin du if (setvar "cmdecho" 0) ; remettre cmdecho à la valeur d'origine (princ) ; silence ) ; fin du defun @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Patrick_35 Posté(e) le 30 juin 2004 Posté(e) le 30 juin 2004 Oupps...Je viens de voir qu'une chose n'est pas bonne dans mon exemple (defun c:deplacetexte(/ sel cmd) (setq cmd (getvar "cmdecho")) (setvar "cmdecho" 0) (setq sel (entsel)) (if sel (progn (princ "\nDépacement de l'objet : ") (command "_.move" (car sel) "" pause pause) (princ "\nRotation de l'objet : ") (command "_.rotate" (car sel) "" pause pause) ) ) (setvar "cmdecho" 0) (princ) ) Voila, maintenant corrigée @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Patrick_35 Posté(e) le 30 juin 2004 Posté(e) le 30 juin 2004 Et avec une variante sans demander le point de base pour la rotation (defun c:deplacetexte(/ sel cmd) (setq cmd (getvar "cmdecho")) (setvar "cmdecho" 0) (setq sel (entsel)) (if sel (progn (princ "\nDépacement de l'objet : ") (command "_.move" (car sel) "" pause pause) (princ "\nRotation de l'objet : ") (command "_.rotate" (car sel) "" "@" pause) ) ) (setvar "cmdecho" 0) (princ) ) @+ (bon, j'arrête là, c'est promis) ;) Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
fabcad Posté(e) le 1 juillet 2004 Posté(e) le 1 juillet 2004 Bonjour bonux, Cette routine existe déjà en commande autocad, elle a pour nom ALIGN qui te permet de deplacer, faire une rotation et si tu dis oui au dernier message de l'invité Commande de mettre a l'échelle. Fabcad
extrusion Posté(e) le 1 juillet 2004 Posté(e) le 1 juillet 2004 Salut à tous, Et bien, Merci Fabcad pour ALIGN : Mais je ne comprend rien à tous ces points de départ et d'arrivée !! Les textes tournent tous....mais alors si j'avais voulu les mettre dans un sens précis ... Pour Bonux, je suis aussi géometre...je ne sais pas du tout faire de lisp, cela m'interesse mais Covadis fait tout ! Rotation d'attributs de bloc point. autant que tu veux, d'1 coup.Repositionnement des attributs ALT ou MAT (de tous les pts) par rapport au point en delta X,YRotation des attributs de points suivant une polyligne : celle la est bien, toutes les altitudes s'orientent sur un fil d'eau, un pieds de talus... Je vais quand meme tester vos divers astuces, pour me mettre le pied à l'étrier ! ;)
bonux Posté(e) le 1 juillet 2004 Auteur Posté(e) le 1 juillet 2004 :D Merci pour votre aidegrâce a ce lisp je enfin pouvoir comprendre certaine chosela prochaine fois j' essaierai d'y arrivé tout seul, avec vous comme correcteura moin que j' y arrive du premier coup :D a + et encore merci
bonux Posté(e) le 1 juillet 2004 Auteur Posté(e) le 1 juillet 2004 Tu peux toujours t'inspirer de la commande Copy/Move/Rotate ( _.MOCORO) dans les Express Tools. Bonne Chance ! il y a un début à tous ! Voici un pti coup de main ..... my friend ! ;CR.lsp;Pour faire une copie et une rotation en une seule commande;(par rapport a un point) (defun c:cr() ;(savevar) (setq sel(ssget)) (setq pivot(getpoint "\nEntrez le point de pivot: ")) (setvar "orthomode" 1) (command "copy" sel "" pivot pivot) (command "rotate" sel "" pivot pause) ;(restvar) (princ)) je me suis inspiré de se lisp en changeant "copy "par "move"et remplaçant le deuxième "pivot" par "pause" dans la ligne(command "copy" sel "" pivot pivot)ce qui fait:(command "copy" sel "" pivot pause) car sinon çà ne marche pas Pour patrick35 :je n'ai pas réussie a les faire marchéje ne sais pas pourquoi, peut être a cause des décalages que j'ai mal fait entre ligne Il faudrait m'expliqué pourquoi entre pako et patrick35il y a une différence de language pour le même lisp? bye
bonuscad Posté(e) le 1 juillet 2004 Posté(e) le 1 juillet 2004 Salut Bonux Tu vas crouler sous les exemples.En voici un autre que j'ai commenté.Il permet de tourner tous les textes d'une valeur donnée. ex: 1 plan géometre dont les écritures sont orientés par rapport au nord (cas classique),Si on veut retourner la planche, les écritures seront à l'envers, à l'aide de la routine en répondant "TOUT" à choix des objets et en donnant un angle de 180 (si unités en degré) ou 200 (si en grade, ATTENTION à angbase), tous les texte seront pivotés de 2PI sur eux mêmes (defun c:pivotext (/ jsel angplus nboucl txtmod nbelem ent rot nrot) (prompt "\nSélectionner les textes à faire pivoter sur leur point d'insertion: ") ;créer un jeu de séléction en excluant les entités qui ne sont pas des textes (setq jsel (ssget '((-4 . "")))) ;le jeu de séléction dot contenir au moins un élément TEXT ou MTEXT valide (if jsel (progn ;alors on demande l'angle que l'on veut rajouter à la rotation initial du texte. ;on met le compteur à zéro pour le nombre de textes modifiés. ;le nombre d'élément contenu dans le jeu de sélection (initget 1) (setq angplus (getorient "\nAngle à rajouter pour faire pivoter les textes selectionnés: ") nbrtxtmod 0 nbrelemjs (sslength jsel) ) ;on execute la boucle jusqu'à ce que le nombre de texte modifiés ;soit inférieur au nombre d'élément du jeu de sélection (while (< nbrtxtmod nbrelemjs) ;on récupère la définition de l'entité n ;on extrait la rotation existante ;on ajoute l'angle saisi en gardant une valeur comprise entre 0 et 2PI ;on replace la nouvelle valeur dans la définition d'entité (setq ent (entget (ssname jsel nbrtxtmod)) rot (cdr(assoc 50 ent)) nrot (rem (+ rot angplus) (* 2 pi)) ent (subst (cons 50 nrot) (assoc 50 ent) ent) ) ;on met à jour la base de donnée interne ;on incrémente le compteur des textes modifiés (entmod ent) (setq nbrtxtmod (1+ nbrtxtmod)) ); fin while ;on affiche le résultat de l'action (terpri) (princ nbrtxtmod) (princ " ligne(s) de texte a (ont) tourné de ") (princ (angtos angplus)) ) )fin if (princ);silence ) Bon apprentissage Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Pako Posté(e) le 1 juillet 2004 Posté(e) le 1 juillet 2004 Intéressant bonuscad ! l'ACADien ! http://img124.exs.cx/img124/7999/start.gif
Patrick_35 Posté(e) le 1 juillet 2004 Posté(e) le 1 juillet 2004 C’est le même langage, mais avec deux logiques un peu différentes et de plus, il est sur une version américaine et moi sur une française Mon lisp fonctionne, je viens de faire un copier/coller et de lancer, et pas de soucis Dans l’exemple de Pako, il fait une sélection sur plusieurs objets et ne vérifie pas si rien n’est sélectionné alors que dans le mien, tu ne sélectionnes qu’un seul objet, et je vérifie que la sélection n’est pas vide Maintenant, c’est selon la fibre de chacun @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
didier Posté(e) le 1 juillet 2004 Posté(e) le 1 juillet 2004 coucouj'arrive avec mon exemple,car je suis géomètre et je me demande bience que vous a fait ce métier, pour être cité aussi souvent,voilà un exemple qui va orienter un texteen lui indiquant une ligne de référencepour que le texte s'aligne avec la direction de cette ligne,suivant le sens de construction de la ligne, il est proposé une rotationsur lui même et un déplacement final(setq tex(car(entsel"\nChoix du Texte ... \n")))(setq ref (car(entsel"\n\tDroite de Référence\n")))(setq p1 (cdr(assoc 10(entget ref))))(setq p2 (cdr(assoc 11(entget ref))))(setq dir (angle p1 p2))(setq dir2 (- dir pi ))(setq ang1 (cdr(assoc 50 (entget tex))))(setq tex1 (entget tex))(setq pins (cdr (assoc 10 tex1)))(setq pins (trans pins 0 1))(setq tex2 (assoc 50 tex1))(setq tex3 (subst (cons 50 dir) tex2 tex1))(entmod tex3)(entupd tex)(setq rep1 (getstring "Demi tour ? "))(if (or ( = rep1 "O")( = rep1 "o")) (progn (setq tex3 (subst (cons 50 dir2) tex2 tex1)) (entmod tex3) (entupd tex) ) )(command "_move" tex "" pins pause )ben voilà, au suivant Éternel débutant... Mon site perso : Programmer dans AutoCAD
bonux Posté(e) le 2 juillet 2004 Auteur Posté(e) le 2 juillet 2004 ;) salut a tous :D je suis bien heureux de voir que mon message sucite autant de réponsebref :D je répète pour certain que a la base je veux que déplacer un seul texte a la fois (voir deux ou trois) mais tout déplacer,c'est pas un problème. Pour Patrick 35 ton lisp doit marché mais je n'y arrive pas car (d'après le 1er cours de lisp que j'ai lu) il faut déplacer la seconde ligne et les autres aussi, et c'est a ce moment que je dois me trompe (je très débutant je le rappel). Pour didier je vais essayé ton lisp, mais je ne comprend rien :exclam: :mad: Normalement il ne faut pas commencer un lisp par defun....????et le terminé par princ...???? Ou est ce que c'est encore un autre language? MERCI A TOUS
Patrick_35 Posté(e) le 2 juillet 2004 Posté(e) le 2 juillet 2004 SalutJ'avoue ne pas tout comprendre, tu fais fonctionner les autres exemples et pas le mien ? (seulement les deux derniers, le premier est buggé)Enfin, ce n'est pas grave, suit cette procédure donnée par Nobless ou encore dans cette discution @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
didier Posté(e) le 3 juillet 2004 Posté(e) le 3 juillet 2004 bonjouren réponse à Bonux :pas obligé de mettre un defunsi tu copies ce code dans un boutonou dans un Fichier(que tu prendras soin de sauvegarder avec l'extension . lspdans un répertoire du chemin de recherche défini dans Options) tu n'as plus qu'à faire : (load"NomduFichier")et le programme se lance,çà peut être utile dans les menus, par exemple.le Defunsert à définir une commandeutile souvent à l'intérieur même d'un programme Lisp.sinon çà n'a rien de vital.en espérant t'avoir renseignéamicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
bonux Posté(e) le 5 juillet 2004 Auteur Posté(e) le 5 juillet 2004 SALUT a tous Pour PATRICK_35 je t'es déjà expliqué pourquoi je n'ai pas utilisé t'es exemples (voir les mesages précédent) ce n'es pas faute d'avoir essayé, merci beaucoup pour ton aide Pour DIDIER merci a toi aussi, j'ai tout bien saisi. a+ ;)
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