Aller au contenu

Copie multiple


barbichette

Messages recommandés

Bonjour,

j'ai une forme quelconque que je souhaiterait répéter un certain nombre de fois.

 

Y'a t'il moyen de faire simplement une copie multiple en entrant le nombre de copie que l'on veut

(sachant que le vecteur de copie ne change pas)

du style, copier la meme forme, 25 fois vers la droite, suivant l'axe X.

 

Est-ce possible ?

 

Merci

***********************

Rien ne sert de courrir, il faut partir à point.

Lien vers le commentaire
Partager sur d’autres sites

  • 4 mois après...

Je trouve l'ergonomie de la commande réseau hyper lourde pour une petite copie multiple de rien du tout. Par exemple, pour faire un escalier en copiant la 1ère marche, il faut changer de SCU, puis définir son réseau, le valider, revenir au SCU précédent.

 

Je n'ai toujours pas compris la marche à suivre pour la commande COPYM des Express Tools.

 

Alors j'ai une vieille nostalgie pour ARC+, où la commande copier demandait: objet à copier, déplacement, nombre d'exemplaires. Et hop !

 

Y a-t-il un moyen d'arriver à ça dans AutoCad ?

Lien vers le commentaire
Partager sur d’autres sites

Y a-t-il un moyen d'arriver à ça dans AutoCad ?

 

En LISP, c'est vraiment un exercice facile !

 

 (defun c:mcopy (/ mcopy_err v1 v2 ss pt1 pt2 nb)

 (defun mcopy_err (msg)
   (if	(= msg "Fonction annulée")
     (princ)
     (princ (strcat "\nErreur: " msg))
   )
   (setvar "cmdecho" v1)
   (setvar "osmode" v2)
   (setq *error* m:err
  m:err	nil
   )
   (princ)
 )

 (setq	m:err	*error*
*error*	erreur
v1	(getvar "cmdecho")
v2	(getvar "osmode")
 )
 (setq ss (ssget))
 (initget 1)
 (setq pt1 (getpoint "\nSpécifiez le décalage, premier point: "))
 (initget 1)
 (setq pt2 (getpoint pt1 "\nDeuxième point: "))
 (initget 1)
 (setq nb (getint "\nNombre d'éléments: "))
 (setvar "cmdecho" 0)
 (setvar "osmode" 0)
 (repeat (1- nb)
   (command "_copy" ss "" '(0 0) '(0 0))
   (command "_move" ss "" pt1 pt2)
 )
 (setvar "cmdecho" v1)
 (setvar "osmode" v2)
 (setq	*error*	m:err
m:err nil
 )
 (princ)
)

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

Lien vers le commentaire
Partager sur d’autres sites

Salut

Un petit défi pour (gile) ;)

La même chose pour la copie en vlisp (pas pour la sélection, on ne va quand même pas pousser le bouchon trop loin), et si tu peux éviter de rechercher sur ce forum car j'ai déjà donné la réponse

 

@+

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

Voilà, avec la sélection et les getpoint, getint en vlisp (j'ai pas triché ;) )

 

(defun c:mcopy (/ AcDoc Util Space mcopySelSet pt1 pt2 nb)
 (vl-load-com)

 (defun mcopy_err (msg)
   (if	(= msg "Fonction annulée")
     (princ)
     (princ (strcat "\nErreur: " msg))
   )
   (if	mcopySelSet
     (vla-delete mcopySelSet)
   )
   (vla-endUndoMark AcDoc)
   (setq *error* m:err
  m:err	nil
   )
   (princ)
 )

 (setq	AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
Util  (vla-get-Utility AcDoc)
Space (if (= (getvar "CVPORT") 1)
	(vla-get-PaperSpace AcDoc)
	(vla-get-ModelSpace AcDoc)
      )
 )
 (vla-StartUndoMark AcDoc)
 (setq	mcopySelSet
 (vla-add
   (vla-get-SelectionSets Acdoc)
   "mcopySelSet"
 )
 )
 (vla-SelectOnScreen mcopySelSet)
 (initget 1)
 (setq	pt1 (vla-getPoint
      Util
      nil
      "\nSpécifiez le décalage, premier point: "
    )
 )
 (initget 1)
 (setq pt2 (vla-getPoint Util pt1 "\nDeuxième point: "))
 (initget 1)
 (setq nb (vla-getInteger Util "\nNombre d'éléments: "))
 (repeat (1- nb)
   (vlax-for obj mcopySelSet
     (vla-Copy	obj)
     (vla-move obj pt1 pt2)
   )
 )
 (vla-delete mcopySelSet)
 (vla-endUndoMark AcDoc)
 (setq	*error*	m:err
m:err nil
 )
 (princ)
) 

 

EDIT. : Il manquait (vla-endUndoMark AcDoc) à la fin de la routine.

 

[Edité le 20/7/2006 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

Je trouve l'ergonomie de la commande réseau hyper lourde pour une petite copie multiple de rien du tout.

 

BrunoMu,

 

Je voudrais te faire part d'une option de la commande réseau (donc aucune trace n'apparait dans l'aide) mais qui pourrait te simplifié la vie.

 

Imaginons par exemple ta marche (de forme triangulaire pour un colimaçon), mesure d'abord l'angle d'ouverture de ta marche.

Puis avec "_ARRAY" choisi ta marche et valide.

Au message "Entrez le type de réseau [Rectangulaire/Polaire]

:" tape "C" ou "_C" pour Copie (étrangement l'option n'a qu'une seule lettre?!?! et ne figure nulle part.) :exclam:

Donne le centre de ton réseau.

Au message "Angle entre les copies (+=trigo, -=horaire):" donne l'angle formé par ta marche que tu as mesuré précédemment.

"

Nombre de copies ou -(angle en degrés à décrire):" puis ton nombre de copies.

Et répondre "Oui" "_Yes" pour la rotation des objets.

 

Volilà tes marches mis en place circulairement. :)

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

Pour Patrick_35,

 

J'avoue ne pas bien comprendre l'utilisation de CopyObject, il me semble que c'est plutôt pour copier des objets d'un document vers un autre, non ?

 

Pour Bred,

 

Il faut que je sois un peu "frapadingue" pour faire des jeux de sélection en VisualLISP là une simple macro (bravo Bred) fait presque le même boulot !

Je dis presque, parceque la LISP permet, avec le choix des deux points de donner une direction autre que celle de l'axe des X.

 

Pour Bonuscad,

 

Pour les réseaux polaires, on peut utiliser Res_hel avec un un Décalage en hauteur égal à 0. Suite à une suggestion de Tramber, la nouvelle version permet de spécifier l'angle (décrit ou entre les éléments) avec l'option référence (comme "Rotation").

 

Mais, je crois qu'on s'éloigne du sujet ...

 

[Edité le 20/7/2006 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

Par curiosité, j'ai voulu comparé la différence de temps d'exécution entre la version AutoLISP et la version VisualLISP.

 

J'ai fait le test sur AutoCAD 2007 avec un solide 3D à copier 20 fois suivant un décalage en 3D :

http://img69.imageshack.us/img69/8774/mcopyfj1.png

 

Les valeurs données (en secondes) sont les valeurs extrèmes sur plusieurs tests.

 

En filaire 2D :

 

- AutoLISP : 0.2340/0.2350

- VisualLISP : 0.0460/0.0470

 

En changeant d'ombrage, les résultats avec VisualLISP restent les mêmes, par contre avec AutoLISP ...

 

En Style visuel masqué 3D :

 

- AutoLISP : 2.8910/2.9060

- VisualLISP : 0.0460/0.0470

 

En Style visuel réaliste :

 

- AutoLISP : 2.6870/2.7030

- VisualLISP : 0.0460/0.0470

 

En style visuel conceptuel

 

- AutoLISP : 3.1100/3.1250

- VisualLISP : 0.0460/0.0470

 

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

Lien vers le commentaire
Partager sur d’autres sites

En clair, quand à chaque fois je regarde un comparatif entre Autolisp et Visual Lisp, Le visual lisp est en moyenne cinq fois plus rapide

Donc, il ne reste plus qu'a s'y mettre a fond :)

 

@+

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

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é