Aller au contenu

Lisp rotation texte


GéoFab

Messages recommandés

Bonjour à tous,

Alors voilà j'vais un lisp qui fonctionné sur autocad mais ne fonctionne pas sur ZwCad.
Ce lisp me permet en gros de sélectionner un texte, activé l'accroche objet, orienter le texte par 2 points, le déplacer, et passer la couleur dans "du calque".

Est-ce que quelqu'un serait ce qui ne va pas ?

Voici mon lisp:

(Defun C:tz (/ *error*);Define new command line function
    ;DEBUT TRAPPE ERREUR (SORTIE ESCAPE)
    (defun *error* (msg)
      (if (not (member msg '("console break" "Function cancelled" "quit / exit abord")))
          (princ (strcat "\nError: " msg))
      )
       (setvar "osmode" oldosmode)
       (princ)
    )
   ;FIN TRAPPE ERREUR
(setq oldosmode (getvar "osmode"))

(setq E null)

  (while (= E null)
  (command "-accrobj" "pro")
  (princ "\nSélectionnez un objet TEXTE")
(setq na (acet-ui-single-select '((-4 . "<OR")
                           (0 . "TEXT")
                   (-4 . "<AND")
                            (0 . "POLYLINE")
                            (-4 . "<NOT")
                              (-4 . "&")
                              (70 . 112)
                            (-4 . "NOT>")
                           (-4 . "AND>")
                          (-4 . "OR>")
                                  )
                         T
         );acet-ui-single-select
);setq
(if na
  (progn
  
   (Command "changer" na "" pause "" "" pause "")
   (command "-accrobj" "")
   (command "deplacer" "p" "" "@" pause)
   (Command "changer" na  "" "p"  "co"  "ducalque" "")
   
   );progn
    );if

 (if (not na)
   (progn
     (setq E "fin")
     ;(command "-accrobj" "nod,int,ext")
     (setvar "osmode" oldosmode)
     );progn
   );if
 (princ)

       
    );while

 
);Defun


(Defun C:tzx (/ *error*);Define new command line function
    ;DEBUT TRAPPE ERREUR (SORTIE ESCAPE)
    (defun *error* (msg)
      (if (not (member msg '("console break" "Function cancelled" "quit / exit abord")))
          (princ (strcat "\nError: " msg))
      )
       (setvar "osmode" oldosmode)
       (princ)
    )
   ;FIN TRAPPE ERREUR
(setq oldosmode (getvar "osmode"))

(setq E null)

  (while (= E null)
  (command "-accrobj" "pro")
  (princ "\nSélectionnez un objet TEXTE")
(setq na (acet-ui-single-select '((-4 . "<OR")
                           (0 . "TEXT")
                   (-4 . "<AND")
                            (0 . "POLYLINE")
                            (-4 . "<NOT")
                              (-4 . "&")
                              (70 . 112)
                            (-4 . "NOT>")
                           (-4 . "AND>")
                          (-4 . "OR>")
                                  )
                         T
         );acet-ui-single-select
);setq
(if na
  (progn
    (command "copier" na "" "@" "@")
   (Command "changer" na "" pause "" "" pause "")
   (command "-accrobj" "")
    (command "deplacer" "p" "" "@" pause)

    );progn
    );if

 (if (not na)
   (progn
     (setq E "fin")
     ;(command "-accrobj" "nod,int,ext")
     (setvar "osmode" oldosmode)
     );progn
   );if
 (princ)

       
    );while

 
);Defun


Merci beaucoup pour votre aide. 🙂

Cela m'handicape énormément pour l'instant j'effectue la rotation avec la commande texte rotation de GeogexFR mais c'est fastidieux.

Bonne journée 

Lien vers le commentaire
Partager sur d’autres sites

Coucou,

Je ne connais pas ZWCAD mais j'ai envie de supposer que la fonction (acet-ui-single-select) pose un soucis. Je ne connais pas cette fonction mais d'après son nom je suppose qu'il s'agit d'une manière détournée de faire un

(ssget "_+.:E:S")

permettant ainsi d'appliquer un filtre sur une sélection similaire à un (entsel) ou (nentsel). Essaye peut-être avec ceci ?

 (Defun C:tz (/ *error*);Define new command line function
    ;DEBUT TRAPPE ERREUR (SORTIE ESCAPE)
    (defun *error* (msg)
      (if (not (member msg '("console break" "Function cancelled" "quit / exit abord")))
          (princ (strcat "\nError: " msg))
      )
       (setvar "osmode" oldosmode)
       (princ)
    )
   ;FIN TRAPPE ERREUR
(setq oldosmode (getvar "osmode"))

(setq E null)

  (while (= E null)
  (command "-accrobj" "pro")
  (princ "\nSélectionnez un objet TEXTE")
(setq na (ssget "_+.:E:S" 
                '((-4 . "<OR")
                    (0 . "TEXT")
                    (-4 . "<AND")
                      (0 . "POLYLINE")
                      (-4 . "<NOT")
                        (-4 . "&")
                        (70 . 112)
                      (-4 . "NOT>")
                    (-4 . "AND>")
                  (-4 . "OR>"))
         );ssget
);setq
(if na
  (progn
  
   (Command "changer" na "" pause "" "" pause "")
   (command "-accrobj" "")
   (command "deplacer" "p" "" "@" pause)
   (Command "changer" na  "" "p"  "co"  "ducalque" "")
   
   );progn
    );if

 (if (not na)
   (progn
     (setq E "fin")
     ;(command "-accrobj" "nod,int,ext")
     (setvar "osmode" oldosmode)
     );progn
   );if
 (princ)

       
    );while

 
);Defun


(Defun C:tzx (/ *error*);Define new command line function
    ;DEBUT TRAPPE ERREUR (SORTIE ESCAPE)
    (defun *error* (msg)
      (if (not (member msg '("console break" "Function cancelled" "quit / exit abord")))
          (princ (strcat "\nError: " msg))
      )
       (setvar "osmode" oldosmode)
       (princ)
    )
   ;FIN TRAPPE ERREUR
(setq oldosmode (getvar "osmode"))

(setq E null)

  (while (= E null)
  (command "-accrobj" "pro")
  (princ "\nSélectionnez un objet TEXTE")
(setq na (ssget "_+.:E:S" 
                '((-4 . "<OR")
                    (0 . "TEXT")
                    (-4 . "<AND")
                      (0 . "POLYLINE")
                      (-4 . "<NOT")
                        (-4 . "&")
                        (70 . 112)
                      (-4 . "NOT>")
                    (-4 . "AND>")
                  (-4 . "OR>"))
         );ssget
);setq
(if na
  (progn
    (command "copier" na "" "@" "@")
   (Command "changer" na "" pause "" "" pause "")
   (command "-accrobj" "")
    (command "deplacer" "p" "" "@" pause)

    );progn
    );if

 (if (not na)
   (progn
     (setq E "fin")
     ;(command "-accrobj" "nod,int,ext")
     (setvar "osmode" oldosmode)
     );progn
   );if
 (princ)

       
    );while

 
);Defun 

Je n'ai pas testé. Je me pose également la question à quoi sert le filtre de sélection justement car tu parles uniquement de texte donc pourquoi le filtre autorise-t-il une polyligne également ? Car de ce que j'entends, on pourrait fortement simplifier le filtre au vue de ton utilisation...
Il serait également judicieux de mettre le nom des commandes et choix d'options en anglais.

Bisous
Luna

Lien vers le commentaire
Partager sur d’autres sites

Merci Luna 🙂

En effet, c'est bien cette fonction qui posait problème sur ZWCAD.

Cela fonctionne maintenant à part que j'ai un souci dans la rotation du texte.

Lorsque je lance la commande, je sélectionne mon texte clique un point sur la polyligne directrice et quand je clique le seconds j'ai une rotation de 100gon vers le sud.

Je ne sais pas comment régler le problème.

Je te remercie pour tes lumière si tu sait d'où pourrait venir le problème.

Le filtre utilise une polyligne car je m'appuie sur une polyligne pour faire ma rotation ou bien avec deux points dans le vide.

Bonne soirée et encore merci 🙃

 

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é