Aller au contenu

Rotation / Echelle en gardant l\'objet original


Messages recommandés

Posté(e)

 

Hello

 

SVP je desire un petit programme (mais je pense que ca peut se faire en Macro) qui permette la commande Rotation ou Echelle en gardant "en place" les objets sélectionnés !

 

Car de temps en temps, ça m'énerve de copier sur lui même ou dans un coin, les objets sur lesquels je vais faire une commande Echelle ou Rotation !

 

Le Decapode "en place"

 

Autodesk Expert Elite Team

Posté(e)

Salut,

pour info, depuis la version 2006 (je crois), la rotation/copie ou echelle/copie est une option dans ces outils...

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

bonjour,

 

voila 2 programmes (qui ne sont pas de moi) que j'utilise sous V2002,

 

j'ai juste ajouté le SCG puis revient en SCU particulier si c'est le cas

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; ch_ech.lsp - gratuiciel

; Version 1.1 pour Autocad 13 F et US ou superieur

; Revision du : 25/01/98

; Ecrit par Didier Lourdelle

;

;http://www.didier-lourdelle.fr/

;

;E-mail N°1:dlourdelle@didier-lourdelle.fr

;

;Vous êtes libres de diffuser ce gratuiciel

;

;**************************

;***c'est même conseillé***

;**************************

;

;Vous êtes libres de diffuser ce gratuiciel

;

;

;

; Modification de l'echelle sur plusieur entites / a leur point de base

;

;

(defun c:ch_ech ( / n js ent pt1 ech)

(SETQ CMDE (GETVAR "cmdecho"))

(SETVAR "CMDECHO" 0)

 

;;modif.Vosges CR - PV - 07/02/2000

;;Dans un SCU particulier les objets s'effacent,

;;Se place provisoirement dans le SCG -

 

(command "scu" "ef" "CH_ECH");efface le SCU particulier CH_ECH si il existe déja dans le dessin

(command "scu" "s" "CH_ECH" );sauve le SCU particulier en CH_ECH

(command "scu" "g")

 

(setq n 0 )

(command "_undo" "_m")

(prompt "\nSelection des objets :")

(setq js (ssget))

(initget 1)

(setq ech (getstring "/Reference :"))

(if (or (= ech "R") (= ech "r"))

(progn

(setq long_ref (getreal "Longueur de reference <1>:"))

(if (= nil long_ref) (setq long_ref 1.0000000))

(initget (+ 1 2 4))

(setq long_new (getreal "Nouvelle Longueur:"))

)

)

(repeat (sslength js)

(setq ent (ssname js n))

(SETQ PT1 (cdr (assoc 10 (entget ent))))

(if (or (= ech "R") (= ech "r"))

(command "_SCALE" ent "" pt1 "r" long_ref long_new)

(command "_SCALE" ent "" pt1 ech)

)

(setq n (1+ n))

(IF (= (/ n 5.00) (/ n 5)) (prompt "."))

);repeat

 

;;Revient dans le SCU précédent

 

(command "scu" "R" "CH_ECH" )

 

(SETVAR "CMDECHO" CMDE)

(terpri)

);

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun c:ch_rotat ( / n js ent pt1 ang)

(SETQ CMDE (GETVAR "cmdecho"))

(SETVAR "CMDECHO" 0)

 

;;modif.Vosges CR - PV - 07/02/2000

;;Dans un SCU particulier les objets s'effacent,

;;Se place provisoirement dans le SCG -

 

(command "scu" "ef" "CH_ROTAT");efface le SCU particulier CH_ROTAT si il existe déja dans le dessin

(command "scu" "s" "CH_ROTAT" );sauve le SCU particulier en CH_ROTAT

(command "scu" "g")

 

(setq n 0 )

(command "_undo" "_m")

(prompt "\nSelection des objets :")

(setq js (ssget))

(setq ang (getreal "Angle de rotation:"))

(repeat (sslength js)

(setq ent (ssname js n))

(SETQ PT1 (cdr (assoc 10 (entget ent))))

(command "_rotate" ent "" pt1 ang)

(setq n (1+ n))

(IF (= (/ n 50.00) (/ n 50)) (prompt "."))

);repeat

 

;;Revient dans le SCU précédent

 

(command "scu" "R" "CH_ROTAT" )

 

(SETVAR "CMDECHO" CMDE)

(terpri)

);

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Posté(e)

Ou tout simplement avec les Grips (poignées), l'option "Copier" en mode Rotation. Cela avec toute version...

 

Il y a aussi le "MOCORO.ARX" des express (MOve,COpy,ROtate)

 

Moi je vote pour les "Grips", on peut changer le point de base de rotation à tout moment.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Salut,

 

Bien que partisant des méthodes évoquées plus haut (option Copier avrc ou sans grip), je proposes deux petits LISP façon "macro" pour mettre dans des boutons ou entrer directement à la ligne commande ...

 

Rotation avec copie (RC) :

(defun c:rc (/ ss)
 (if
   (setq ss (ssget))
    (progn
      (command "_.copy" ss "" "" "")
      (command "_.rotate" ss "")
      (while (/= 0 (getvar "cmdactive"))
 (command pause)
      )
    )
 )
 (princ)
) 

 

Echelle avec copie (EC) :

(defun c:ec (/ ss)
 (if
   (setq ss (ssget))
    (progn
      (command "_.copy" ss "" "" "")
      (command "_.scale" ss "")
      (while (/= 0 (getvar "cmdactive"))
 (command pause)
      )
    )
 )
 (princ)
) 

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

Posté(e)

 

Hello

 

Merci à tous, j'avais déjà utilisé les options @ @ de Copier (pour copier "en place") t aussi le MOROCO.ARX mais sincèrement j'ai quand même une préférence pour les 2 petites routines Lisp de Gilles ! :)

 

Le Decapode "utilisateur fanatique des routines de Gilles"

 

Autodesk Expert Elite Team

Posté(e)

Ou tout simplement avec les Grips (poignées), l'option "Copier" en mode Rotation. Cela avec toute version...

 

C'est quoi cette méthode ??? Je comprends pas bien... Pourrais-tu développer stp le Crabe ?

 

Merci !

A bietot.

matt.

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

Encore plus concis :

 

(defun c:ec ()
 (and
   (vl-cmdf "_.copy" (ssget) "" "" "")
   (vl-cmdf "_.scale" "_p" "")
   (while (/= 0 (getvar "cmdactive"))
     (vl-cmdf pause)
   )
 )
 (princ)
) 

 

(defun c:rc ()
 (and
   (vl-cmdf "_.copy" (ssget) "" "" "")
   (vl-cmdf "_.rotate" "_p" "")
   (while (/= 0 (getvar "cmdactive"))
     (vl-cmdf pause)
   )
 )
 (princ)
) 

 

Pour matt666,

- tu sélectionnes les objets

- tu sélectionnes une poignée (grip) su un des objets en surbrillance

- tu fais clic droit (menu contextuel) ou espace, espace... pour choisir une commande de modification (étirer, déplacer, rotation, échelle, miroir)

- et tu as accès à des options : point de Base/Copier/annUler/rEférence/Quitter

- point de Base permet de changer le point de base par défaut : la poignée sélectionnée.

- rEférence n'existe que pour Rotation et Mirroir

 

 

[Edité le 18/9/2007 par (gile)]

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

Posté(e)

C'est quoi cette méthode ??? Je comprends pas bien... Pourrais-tu développer stp le Crabe ?

 

Je pense que tu t'adresse à moi...

 

Autocad à 2 manières de fonctionnement "Sélection -> Verbe" ou "Verbe -> Sélection" (méthode originale par le clavier sur toute version)

 

Si au message vierge de "commande: " d'autocad tu fais un Glisser/Lacher sur des entités graphiques ou simple click sur une seule entité, tu vas activer sois une surbrillance, soit l'activation des poignées sur les entité (voir variable "PICKFIRST")

 

Si c'est la surbrillance tu seras en mode "Sélection -> Verbe", tu lanceras ta commande d'édition APRES ta sélection.

 

Si c'est les poignées tu active un grip en cliquant sur un de ceux-ci (choisir de préférence le point de base directement) et soit avec la barre d'espace, tu fais succéder les commande possibles avec leurs options), soit du choisi directement dans le menu contextuel du click-droit l'action désirée.

(Attention à la variable "SHORTCUTMENU")

 

NB:Avec les grips ont peut aussi changer la sélection de calque/couleur/etc... directement dans la barre de gestion (je ne parle pas de la fenêtre de propriétées)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Oups pardon...

Merci BonusCad et gile pour ces précisions !

J'ai tout bien compris !

 

A bientot.

Matt.

 

[Edité le 24/9/2007 par Matt666]

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

Salut

Petite remarque pour super (gile) : L'utilisation de la commande copier implique un risque certain d'avoir des objets dupliqués et superposés en cas d'interruption ou d'annulation.

Il faudrait mieux ,je pense, utiliser l'option "copier" des commandes rotation et echelle.

Posté(e)

super (gile)
:o

 

J'espère que c'est ironique ;)

 

Tu as parfaitement raison usegomme, ces routines sont en fait des sortes macros écrites en LISP avec un désir de concision. On peut aussi leur reprocher de ne pas gérer la variable CMDECHO qui doit être à 1 pour avoir les invites pendant la pause utilisateur.

 

La fonction LISP vl-cmdf utilisée à la place command permet d'évaluer si la commande a abouti : elle retourne T si tous les arguments sont valides (pause compris) et nil sinon, là où un command retourne toujours nil.

 

Donc, moins concis mais plus "secure" :

 

EDIT : voir plus bas

 

(defun c:ec (/ echo)
 (setq echo (getvar "CMDECHO"))
 (and
   (setvar "CMDECHO" 1)
   (vl-cmdf "_.copy" (ssget) "" "" "")
   (vl-cmdf "_.scale" "_p" "")
   (if	(not
  (while (/= 0 (getvar "cmdactive"))
    (vl-cmdf pause)
  )
)
     (vl-cmdf "_.erase" "_p" "")
   )
 )
 (setvar "CMDECHO" echo)
 (princ)
) 

 

(defun c:rc (/ echo)
 (setq echo (getvar "CMDECHO"))
 (and
   (setvar "CMDECHO" 1)
   (vl-cmdf "_.copy" (ssget) "" "" "")
   (vl-cmdf "_.rotate" "_p" "")
   (if	(not
  (while (/= 0 (getvar "cmdactive"))
    (vl-cmdf pause)
  )
)
     (vl-cmdf "_.erase" "_p" "")
   )
 )
 (setvar "CMDECHO" echo)
 (princ)
) 

 

[Edité le 2/10/2007 par (gile)]

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

Posté(e)

 

Bon Matin Gilles

 

La classe :) :D :cool:

 

Et en plus la routine essaye de palier aux interruptions de l'operateur :P

 

De toute façon en Informatique, 99% des problèmes sont situés entre le clavier et la chaise ;)

 

Le Decapode (sur son fauteuil :( )

 

Autodesk Expert Elite Team

Posté(e)

Un petit retour pour signaler à ceux qui ne l'auraient pas vu , une petite coquille

dans les versions améliorées .

Il faut remplacer "_l" par "_p" comme dans les premières versions.

Ceci dit l'appelation super (gile) est largement méritée.

Posté(e)

 

Hello

 

Désolé mais pour moi les routines fonctionnent parfaitement ! :)

 

"_l" signifie en fait en US/English l'option "Last"

ce qui correspond à l'option "Précédent" en Français :D

 

Le Decapode "content"

 

Autodesk Expert Elite Team

Posté(e)

Petite précision pour mettre tout le monde d'accord :

 

_Last = Dernier (la dernière entité crée)

_Prevoius = précédent (la dernière sélection)

 

Comme les routines copie le (ou les) objet(s) avant de faire la rotation ou le changement d'échelle.

Pour avoir un fonctionnement plus proche de l'option Coller des commandes Rotation et Echelle qui laissent en place le (ou les) originaux et modifie la copie, j'ai remplacer _Previous par _Last.

Mais j'avais fait les teste un peu vite et sur une seule entité, donc tout fonctionnait, mais si on sélectionne plusieurs entités seul la dernière copiée subira le a rotation ou le changement d'échelle.

Donc Usegomme a raison il faut "_P" et pas "_L" pour que les routines fonctionnent avec plusieurs objets .

Je corrige les routines... :calim:

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

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é