Aller au contenu

COPIER-ROTATION AVEC REF.


Messages recommandés

Posté(e)

Idem !

 

Moi je trace une ligne provisoire jusqu'au centre de rotation et je fais tout par les poignées avec Espace 2 fois + C comme Copie puis le REF de l'option (R ne marche pas, ce bug me gave depuis plusieurs versions).

Ensuite j'efface ma ligne.

Voilà comment je m'y prends.

 

Et pourtant je programme à l'année des kilos et des kilos de code. Comme quoi cette bonne vieille méthode sans prog me suffit largement.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Bonjour à toutes et tous,

 

Merci de ta réponse Tramber,

 

Effectivement, la ligne (ou droite) de référence semble inévitable, mais c'est bien dommage de ne pas pouvoir coupler les deux commandes. Sur "_.MOCORO" des express, il ne manquerait plus que le choix d'une référence,...

 

D'autres idées ou méthodes ?

 

Merci d'avance.

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Salut Lilian , essaye ça :

 

(defun c:XEDIT (/ SS1 P1 IN INP YN ELAST groupobj)
 (setq SS1 nil SS1 (ssget)
        P1 (getpoint "\nPoint de Reference:")
        IN 1 YN 1)

 (setq groupobj (getvar "pickstyle"))
 (setvar "pickstyle" 0) ; groupe inactif

 (while YN
   (while (/= IN 2)
     (prompt "\nCopier/Deplacer/Rotation/Echelle/Miroir/Pt ref/Quitter :")
   (setq INP (grread)
           IN (car INP))
      (if (= IN 2)
        (setq YN (strcase (chr (cadr INP))))))
   (cond ((= YN "C")
     (setq ELAST (entlast))
     (command "_COPY" SS1 "" P1 pause)
     (setq P1 (getvar "LASTPOINT")
          SS1 nil SS1 (ssadd))
     (while (entnext ELAST)
       (ssadd (entnext ELAST) SS1)
       (setq ELAST (entnext ELAST))))
     ((= YN "D")
       (command "_MOVE" SS1 "" P1 pause)
       (while (not (zerop (getvar "cmdactive")))(command pause))
       (setq P1 (getvar "LASTPOINT")))
     ((= YN "R")
       (command "_ROTATE" SS1 "" P1 pause )
        (while (not (zerop (getvar "cmdactive")))(command pause))
       )
     ((= YN "P")
       (setq P1 (getpoint "\n-XEDIT- Nouveau Point de Reference :")))
     ((= YN "E")
       (command "_SCALE" SS1 "" P1 pause )
        (while (not (zerop (getvar "cmdactive")))(command pause))      
       )       
     ((= YN "M")
       (setq ELAST (entlast))
       (command "_MIRROR" SS1 "" pause pause pause)
     (setq P1 (getpoint "\n-XEDIT- Nouveau Point de Reference :")
               SS1 nil SS1 (ssadd))
     (while (entnext ELAST)
       (ssadd (entnext ELAST) SS1)
       (setq ELAST (entnext ELAST))))
     ((= YN "Q")
       (setq YN nil SS1 nil)
       (gc)))
(setq IN 1))
(setvar "pickstyle" groupobj) ; groupe objet restore
(princ))

 

Les options de départ fonctionnent avec une seule touche , pas besoin de taper "entrée".

Pour "référence" le fonctionnement est ordinaire.

Il faut penser à quitter par la touche "Q".

 

 

 

 

Posté(e)

Re,

 

Pas mal pour un "bricoleur de lisp", je te cite usegomme,

 

Si cela te semble facile à réaliser, est-ce que l'on peut avoir les différentes options (Copier/Deplacer/Rotation/Echelle/Miroir/Pt ref/Quitter ) sur la souris via le dyn (F12) ??

 

Sinon, c'est exactement ce que je recherche,...

 

Un grand merci à toi,

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Il n'est pas de moi ce bon lisp qui a au moins 10 ans , je ne connais pas l'auteur, je ne me souviens plus où je l'ai récupéré.

Je peux te le passer en menu contextuel ,mais il te faudra patienter un peu , ça implique également le retour à l'usage de la touche "entrée pour l'utilisation clavier.

A+

 

Posté(e)

Salut Tramber

le REF de l'option (R ne marche pas, ce bug me gave depuis plusieurs versions

Sur la 2008 c'est un bug volontaire puisqu'il faut taper : ef pour réference . Pas franchement pratique car inhabituel et il faut être attentif à la ligne de cde.

Posté(e)

Salut,

 

Le LISP que j'utilise, le point de déplacement sert de centre de rotation.

 

(defun c:crr (/ elast ss ent)
 (setq elast (entlast))
 (if (vl-cmdf "_copy" (ssget) "" pause pause)
   (progn
     (setq ss	(ssadd)
    ent	(if elast
	  (entnext elast)
	  (entnext)
	)
     )
     (while ent
(ssadd ent ss)
(setq ent (entnext ent))
     )
     (vl-cmdf "_rotate" ss "" (getvar "LASTPOINT") "_r" "@" pause pause)
   )
 )
 (princ)
) 

 

[Edité le 11/9/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut,

 

Cette routine utilise les commandes COPIER et ROTATION natives, les options sont celles de ces commandes (elle pourrait être écrite en MACRO de commande).

L'option "Point" de l'option "Reference" de la commande ROTATION permet de spécifier l'angle avec deux points indépendant du centre de rotation.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut , voilà "xedit" revu selon ta demande Lilian , il y a encore qlq amélioration à faire notamment avec la cde miroir , mais pour l'essentiel ça marche bien.

 

Version améliorée

;; adaptation v 1.2 par usegomme de XEDIT auteur inconnu

(defun nsel-xe () ;; nouv objet-> nouv sélection
 (setq sel nil sel (ssadd))
 (while (entnext elast)
   (ssadd (entnext elast) sel)
   (setq elast (entnext elast))
 )
)

(defun c:xe (/ sel pdr npdr act elast nelast)
 (setq  act T sel (ssget))
;;;; (if sel (command "_move" sel ""))  ;; pour surbrillance
 (if sel (setq pdr (getpoint "\nSpécifiez le point de base:")))
;;;;  (command)                            ;; fin surbrillance
 (while (and sel pdr act)   
   (initget   "Copier Deplacer Rotation Echelle Scale-ref Miroir Pt-base Quitter") 
   (setq act (getkword "\n [Copier/Deplacer/Rotation/Echelle/Scale-ref/Miroir/Pt-base/Quitter] :")) 
   
   (cond
     ((= act "Copier")
       (setq elast (entlast))
       (command "_copy" sel "" pdr pause)
       (setq pdr (getvar "LASTPOINT"))
       (nsel-xe)   
     ) 
     
     ((= act "Deplacer")
       (command "_move" sel "" pdr pause)
       (while (not (zerop (getvar "cmdactive")))(command pause))
       (setq pdr (getvar "LASTPOINT"))
     )
     
     ((= act "Rotation")
       (setq elast (entlast))
       (command "_rotate" sel "" pdr pause )
       (while (not (zerop (getvar "cmdactive")))(command pause))
       (setq nelast (entlast))
       (if (not (equal elast nelast))(nsel-xe))
     )
     
     ((= act "Pt-base")
       (setq pdr (getpoint "\n Spécifiez le nouveau point de base :"))
     )
     
     ((= act "Echelle")
       (setq elast (entlast))
       (command "_scale" sel "" pdr pause )
       (while (not (zerop (getvar "cmdactive")))(command pause))
       (setq nelast (entlast))
       (if (not (equal elast nelast))(nsel-xe))              
     )  
     
     ((= act "Scale-ref")
       (setq elast (entlast))
       (command "_scale" sel "" pdr "_r" )
       (while (not (zerop (getvar "cmdactive")))(command pause))
       (setq nelast (entlast))
       (if (not (equal elast nelast))(nsel-xe))              
     ) 
     
     ((= act "Miroir")
       (setq elast (entlast))
       (command "_mirror" sel "" pause pause pause)
       (setq npdr (getpoint "\n Nouveau Point de base <>:"))
       (if npdr (setq pdr npdr npdr nil))
       (setq nelast (entlast))
       (if (not (equal elast nelast))(nsel-xe))       
     )
     
     ((= act "Quitter")
       (setq act nil) 
     )
   )  ;;; fin cond          
 ) ;; fin while
 
 (princ)
 
)  ;;; fin xe 

[Edité le 15/9/2008 par usegomme]

 

[Edité le 17/9/2008 par usegomme]

Posté(e)

Je viens de remplacer le code par une version améliorée, + une commande au nom barbare "scale-ref" pour avoir echelle référence directement car c'est ce que j'utilise presque toujours.

 

Posté(e)

Bonjour

ERREUR d'application: irfcld

Je suis dans la même config que lesourd2 que je remercie au passage, et donc je ne sais pas ce que c'est . Désactive les 2 lignes que j'ai mis pour la surbrillance avec un point virgule pour voir.

Sinon il y a peut être un doublon avec tes applications déjà chargées.

---> irfcld quoitesse ?

Posté(e)

Bonjour à toutes et tous,

 

Sur une V2009 en l'état =>

 

Commande: XED

 

Choix des objets: Spécifiez le coin opposé: 2 trouvé(s)

 

Choix des objets:

deplacer

Choix des objets: 2 trouvé(s)

 

Choix des objets:

Spécifiez le point de base ou [Déplacement] :

Spécifiez le point de base:*Incorrect*

ERREUR d'application: irfcld

 

Commande:

Commande: ; erreur: commande AutoCAD incorrecte: nil

 

Idem en renommant le lisp,...

 

Quant à =>

et aussi peut être de renommer la variable "action" , je ne la sens pas celle-là ,
,

 

je ne te suis pas là,...!!!

 

lesourd2, peux-tu me montrer ta ligne de commande ????,

 

Merci d'avance,

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Ce matin je l'ai testé sur une 2009 fraichement installée , sans rencontrer le moindre problème !

Variable "action" parce que ce nom "action" est peut être utilisé dans une de tes appli.

Pour essayer remplace tout par "xed:action" ou "a" peu importe .

A moins qu'un expert sache à quoi correspond ton message.

Posté(e)

Pour lili 2006

 

Commande: xed

Choix des objets: 1 trouvé(s)

Choix des objets:

deplacer

Choix des objets: 1 trouvé(s)

Choix des objets:

Spécifiez le point de base ou [Déplacement] :

Spécifiez le point de base:

Commande:

[Copier/Deplacer/Rotation/Echelle/Scale-ref/Miroir/Pt-base/Quitter] :c _copy

Choix des objets: 1 trouvé(s)

Choix des objets:

Spécifiez le point de base ou [Déplacement/Multiple] : Spécifiez

le deuxième point ou :

Commande:

[Copier/Deplacer/Rotation/Echelle/Scale-ref/Miroir/Pt-base/Quitter] :d _move

Choix des objets: 2 trouvé(s)

Choix des objets:

Spécifiez le point de base ou [Déplacement] : Spécifiez le

deuxième point ou :

Commande:

[Copier/Deplacer/Rotation/Echelle/Scale-ref/Miroir/Pt-base/Quitter] :r _rotate

Angle positif courant dans SCU: ANGDIR=sens horaire contraire ANGBASE=0.00

Choix des objets: 2 trouvé(s)

Choix des objets:

Spécifiez le point de base:

Spécifiez l'angle de rotation ou [Copier/Référence] <231.64>:

Commande:

[Copier/Deplacer/Rotation/Echelle/Scale-ref/Miroir/Pt-base/Quitter] :e _scale

Choix des objets: 2 trouvé(s)

Choix des objets:

Spécifiez le point de base:

Spécifiez le facteur d'échelle ou [Copier/Référence] <1.000>: 2.

Commande:

[Copier/Deplacer/Rotation/Echelle/Scale-ref/Miroir/Pt-base/Quitter] :s _scale

Choix des objets: 2 trouvé(s)

Choix des objets:

Spécifiez le point de base:

Spécifiez le facteur d'échelle ou [Copier/Référence] <2.000>: _r

Spécifiez la longueur de référence <1.000>: 10

Spécifiez la nouvelle longueur ou [Points] <2.000>:

Commande:

[Copier/Deplacer/Rotation/Echelle/Scale-ref/Miroir/Pt-base/Quitter] :m

_mirror

Choix des objets: 2 trouvé(s)

Choix des objets: Spécifiez le premier point de la ligne de symétrie: Spécifiez

le deuxième point de la ligne de symétrie:

Effacer les objets source ? [Oui/Non] : n

Commande:

-XED- Nouveau Point de base <>:

[Copier/Deplacer/Rotation/Echelle/Scale-ref/Miroir/Pt-base/Quitter] :P

-XED- Spécifiez le nouveau point de base :

[Copier/Deplacer/Rotation/Echelle/Scale-ref/Miroir/Pt-base/Quitter] :

.

 

@+

Posté(e)

Re,

 

J'ai suivi tes conseils, j'ai donc ceci =>

 

;; un xed comme xorro v 1.1
;; adaptation par usegomme de XEDIT auteur inconnu

(defun nsel_xed () ;; nouv objet-> nouv sélection
(setq sel nil sel (ssadd))
(while (entnext elast)
(ssadd (entnext elast) sel)
(setq elast (entnext elast))
)
)

(defun c:xed (/ sel pdr npdr action elast nelast)
(setq xed:action T sel (ssget))
(if sel(command "deplacer" sel "")) ;; pour surbrillance
(if sel (setq pdr (getpoint "\nSpécifiez le point de base:")))
(command) ;; fin surbrillance
(while (and sel pdr action)
(initget "Copier Deplacer Rotation Echelle Scale-ref Miroir Pt-base Quitter")
(setq xed:action (getkword "\n [Copier/Deplacer/Rotation/Echelle/Scale-ref/Miroir/Pt-base/Quitter] :"))

(cond
((= xed:action "Copier")
(setq elast (entlast))
(command "_copy" sel "" pdr pause)
(setq pdr (getvar "LASTPOINT"))
(nsel_xed)
)

((= xed:action "Deplacer")
(command "_move" sel "" pdr pause)
(while (not (zerop (getvar "cmdactive")))(command pause))
(setq pdr (getvar "LASTPOINT"))
)

((= xed:action "Rotation")
(setq elast (entlast))
(command "_rotate" sel "" pdr pause )
(while (not (zerop (getvar "cmdactive")))(command pause))
(setq nelast (entlast))
(if (not (equal elast nelast))(nsel_xed))
)

((= xed:action "Pt-base")
(setq pdr (getpoint "\n-XED- Spécifiez le nouveau point de base :"))
)

((= xed:action "Echelle")
(setq elast (entlast))
(command "_scale" sel "" pdr pause )
(while (not (zerop (getvar "cmdactive")))(command pause))
(setq nelast (entlast))
(if (not (equal elast nelast))(nsel_xed))
)

((= xed:action "Scale-ref")
(setq elast (entlast))
(command "_scale" sel "" pdr "_r" )
(while (not (zerop (getvar "cmdactive")))(command pause))
(setq nelast (entlast))
(if (not (equal elast nelast))(nsel_xed))
)

((= xed:action "Miroir")
(setq elast (entlast))
(command "_mirror" sel "" pause pause pause)
(setq npdr (getpoint "\n-XED- Nouveau Point de base :"))
(if npdr (setq pdr npdr npdr nil))
(setq nelast (entlast))
(if (not (equal elast nelast))(nsel_xed))
)

((= xed:action "Quitter")
(setq action nil)
)
) ;;; fin cond
) ;; fin while

(princ)

) ;;; fin xed 

 

Réaction à la ligne de commande =>

 

Commande:

Commande: xed

Choix des objets: 1 trouvé(s)

Choix des objets:

deplacer

Choix des objets: 1 trouvé(s)

Choix des objets:

Spécifiez le point de base ou [Déplacement] :

Spécifiez le point de base:*Incorrect*

ERREUR d'application: irfcld

Commande:

Commande: ; erreur: commande AutoCAD incorrecte: nil

 

D'autres idées ?

 

Merci d'avance,

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

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é