Aller au contenu

enchainer copie et -pan


x_all

Messages recommandés

bonjour

 

je voudrai écrire un lisp super simple, mais je m'en sort pas... comme d'hab...

 

on travaille beaucoup avec des niveaux de bâtiments recopiés verticalement tous les N mètres généralement en Y, (mais pas toujours). Donc, quand on dessine une gaine, pour voir ou elle plombe, il suffit de la recopier N mètres plus bas (ou plus haut selon de quel étage à quel étage on va) puis de faire un -pan de la même valeur (dans le sens opposé car -pan marche en sens inverse) pour aller voir ou ça tombe.

 

malheureusement, je me trouve vite confronté à la difficulté de récupérer la direction de la souris avant de donner la distance comme dans la commande copier. Du coup mon lisp tout simple ne l'est plus... et j'aurai bien besoin d'un coup de main :)

 

dans l'idéal, le lisp demande la valeur du pas de recopie, (ou reprend la valeur précédente propre au dessin)

puis il fait la copie des éléments sélectionnés, et replace la vue sur l'autre étage avec un -pan... bref 2 pauvres commandes mais je voie pas bien comment leur indiquer une direction simplement...

 

merci pour votre aide

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Très sommairement, pour t'inspirer...

 

(defun dir_choice (sel / key)
 (princ "\n<2/4/6/8> pour choix direction")
 (if sel
   (command "_.copy" sel "" "_none" (getvar "VIEWCTR"))
   (command "_.pan" "_none" (getvar "VIEWCTR"))
 )
 (setq key (grread nil 2 1))
 (cond
   ((eq (cadr key) 50)
     (command "_none" (list (car (getvar "VIEWCTR")) (- (cadr (getvar "VIEWCTR")) (getvar "USERR1"))))
   )
   ((eq (cadr key) 52)
     (command "_none" (list (- (car (getvar "VIEWCTR")) (getvar "USERR1")) (cadr (getvar "VIEWCTR"))))
   )
   ((eq (cadr key) 54)
     (command "_none" (list (+ (car (getvar "VIEWCTR")) (getvar "USERR1")) (cadr (getvar "VIEWCTR"))))
   )
   ((eq (cadr key) 56)
     (command "_none" (list (car (getvar "VIEWCTR")) (+ (cadr (getvar "VIEWCTR")) (getvar "USERR1"))))
   )
 )
)
(defun c:my_copypan ( / )
 (setvar "cmdecho" 0)
 (if (zerop (getvar "USERR1"))
   (progn
     (initget 7)
     (setvar "USERR1" (getdist "\nDistance de déport: "))
   )
 )
 (princ "Selectionner les objets à copier ou rien pour un pan")
 (dir_choice (ssget))
 (setvar "cmdecho" 1)
 (prin1)
)

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

Yo

 

merci pour la piste, je n'ai pas bien éplucher ton code et je ne comprend pas pourquoi le -pan ne se fait pas, mais je note l'astuce, c'est vrai que demander la direction avec 2,4,8,6 est une bonne idée qui va permettre de demander la direction en s'affranchissant de la capture de la direction de la souris (qui en plus impose un F8 avant)

 

J'explorai une autre piste en lançant la commande copier puis en appelant une macro en mode transparent, mais je suis tout aussi nul en disel qu'en lisp.

Aujourd'hui, il faut que je rende le boulot que je fait pour les plombiers, et mon vrai chef des VRD me tanne car il a lui aussi des "urgences" à me faire faire. Je vais donc pas pouvoir m'y replonger de suite.

 

Il y a 2 super bonnes idées que je vais essayer de mettre en oeuvre dans ton code, le fait de demander la direction au clavier, et la possibilité de faire seulement le pan qui peut être pratique pour jeter un coup d’œil à l'étage sup inf avant de tracer...

 

je reviendrai poser mes coquilles quand j'aurai un peu bosser, mais cette commande va bien nous servir quand on fait des immeubles en Plb et Ventil

 

merci :)

Lien vers le commentaire
Partager sur d’autres sites

bon, effectivement avec ce principe, c'est plutôt simple. c'est codé avec les pieds mais ça marche.

 

Pour des question de simplicité d'utilisation, j'ai préféré définir 5 fonctions. J'aurai aimer m'inspirer du lisp vue_pavé de (gile) qui fait un tour de magie pour écrire à la volée les defun c:... mais j'ai rien compris. J'améliorerai bien aussi ce code pour que ça marche avec un SCU mais j'ai un peu du mal avec trans... il faut que je bosse...

 

Il y a aussi un mystère avec le test de USERR1. Mais mon messages ici n'a pas eu trop de succès . c'est moche mais ça marche :)

 

En espérant que ce bout de code rende service à d'autre...

et merci bonuscad pour l'astuce

 

;| enchaine une copie et un pan 
5 fonctions définies
2 4 8 6 copie la sélection dans la direction cardinale désignée
5 invite à définir un pas pour la fonction
si rien n'est sélectionné, pan seul
auteur joch04
|;

;;;fonction de changement de pas de déplacement
(defun c:5 (/ pas test)
 (setq test 0)
 (princ "\nPas du décalage des niveaux enregistré: ")
 (princ (getvar "USERR1"))

 (or (setq pas (getreal "\nChanger cette valeur ou entrée "))
 	(progn
(setq pas (getvar "USERR1"))
(setq test 1)
(princ "\n pas de changement : ")
 	)
 )
 (if (= test 0)
(setvar "USERR1" pas)
 )
 (princ "\n nouveau pas de décalage : ")
 (princ (getvar "USERR1"))
 (princ)
)

;;;fonctions de copie pan

(defun c:2 (/ tmp P1 P0)
 (setq tmp (getvar "USERR1"))
 (princ tmp)
 (if (= 0.0 tmp)
(princ
 	"\nPour deffinir un décalage des déplacements tapper 5 puis entrée"
)
(progn
 	(setq P0 (list 0 0))
 	(setq P1 (list 0 (* -1 (getvar "USERR1"))))
 	(setq sel (ssget))
 	(command "_.copy" sel "" "_none" P0 P1)
 	(command "-pan" P1 P0)
)
 )
 (princ)
)

(defun c:4 (/ tmp P1 P0)
 (setq tmp (getvar "USERR1"))
 (princ tmp)
 (if (= 0.0 tmp)
(princ
 	"\nPour deffinir un décalage des déplacements tapper 5 puis entrée"
)
(progn
 	(setq P0 (list 0 0))
 	(setq P1 (list (* -1 (getvar "USERR1")) 0))
 	(setq sel (ssget))
 	(command "_.copy" sel "" "_none" P0 P1)
 	(command "-pan" P1 P0)
)
 )
 (princ)
)

(defun c:8 (/ tmp P1 P0)
 (setq tmp (getvar "USERR1"))
 (princ tmp)
 (if (= 0.0 tmp)
(princ
 	"\nPour deffinir un décalage des déplacements tapper 5 puis entrée"
)
(progn
 	(setq P0 (list 0 0))
 	(setq P1 (list 0 (getvar "USERR1")))
 	(setq sel (ssget))
 	(command "_.copy" sel "" "_none" P0 P1)
 	(command "-pan" P1 P0)
)
 )
 (princ)
)

(defun c:6 (/ tmp P1 P0)
 (setq tmp (getvar "USERR1"))
 (princ tmp)
 (if (= 0.0 tmp)
(princ
 	"\nPour deffinir un décalage des déplacements tapper 5 puis entrée"
)
(progn
 	(setq P0 (list 0 0))
 	(setq P1 (list (getvar "USERR1") 0))
 	(setq sel (ssget))
 	(command "_.copy" sel "" "_none" P0 P1)
 	(command "-pan" P1 P0)
)
 )
 (princ)
)


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é