Aller au contenu

mon premier lisp


bonux

Messages recommandés

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:

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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,Y

Rotation 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 !

;)

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

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 patrick35

il y a une différence de language pour le même lisp?

 

bye

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

coucou

j'arrive avec mon exemple,

car je suis géomètre et je me demande bien

ce que vous a fait ce métier, pour être cité aussi souvent,

voilà un exemple qui va orienter un texte

en lui indiquant une ligne de référence

pour que le texte s'aligne avec la direction de cette ligne,

suivant le sens de construction de la ligne, il est proposé une rotation

sur 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

Lien vers le commentaire
Partager sur d’autres sites

;) salut a tous

 

:D je suis bien heureux de voir que mon message sucite autant de réponse

bref :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

Lien vers le commentaire
Partager sur d’autres sites

Salut

J'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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

bonjour

en réponse à Bonux :

pas obligé de mettre un defun

si tu copies ce code dans un bouton

ou dans un Fichier

(que tu prendras soin de sauvegarder avec l'extension . lsp

dans 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 commande

utile souvent à l'intérieur même d'un programme Lisp.

sinon çà n'a rien de vital.

en espérant t'avoir renseigné

amicalement

 

 

Lien vers le commentaire
Partager sur d’autres sites

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+ ;)

Lien vers le commentaire
Partager sur d’autres sites

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é