Aller au contenu

Lisp du _copy...


Messages recommandés

Posté(e)

Bonjour,

 

Afin de rendre des fonctions "propre" auriez vous dans vos archive le lisp d'Autodesk concernant la commande _copy ???

 

J'ai déjà récupérer le "copymbis.lsp" de l'express, mais il ne convient pas.

 

merci d'avance.

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

Posté(e)

COPY est une fonction interne, qu'est-ce que tu veux dire ?

 

Qu'est-ce qui n'est pas propre ?

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

... si on utilise la commande _copy tel quel en lisp, et que l'on veut

1 : enregistrer les coordonnées du premier et du second point

2 : garder la pièce au bout du curseur pendant le déplacement,

il y a cette solution proposer précedement (et qui fonctionne) :

 

(defun c:cop ()

 

(command "_.copy" (setq sel (ssget)) "" "" "")

(command "_.move" sel "" (setq pA (getpoint)) pause)

(setq pB (getvar "lastpoint"))

;;;(command "_.erase" sel "")

)

 

MAIS.... faites un escap à l'un des endroits que vous voulez (au premier point, au second ...) et vous vous trouverez avec une erreur avec et une copie de l'objet sur lui même...

 

Alors je sais, il y a la possibilité ge gérer cette erreur, puis d'effacer le bloc sel, ou de faire une recherche de bloc superposé avec l'express... etc...

mais c'est quand même laborieux et lourds juste pour une de copie d'objet !!! non ??? (ça n'est pas "propre" quoi...

Voilà pourquoi je serais curieux de voir la manière dont autodesk gère sa manière de copier afin d'integrer sa méthode à mon lisp...

 

merci

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

Posté(e)

Salut

Tu as la solution simple de faire

(if (setq sel (ssget))
 (if (setq pt1 (getpoint "Point de Base : "))
   (if (setq pt2 (getpoint pt1 "Point de Destination : "))
     (command "_.copy" sel "" pt1 pt2)
   )
 )
)

ou plus évolué avec ce lisp avec la fonction copier_obj

 

@+

 

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

Posté(e)

Daccord mais là je perd la présence de mon bloc au bout du curseur entre pt1 et pt2, et je voudrais que mon lisp reprenne la logique "autocadienne"...

lorsque je propose de copier dans mon lisp, je veux que cette fonction soit proposé de la même manière que le copy simple d'autocad...

je sais, c'est peut être superflu, mais c'est pour garder le même esprit qu'autocad : ce n'est pas parsque c'est une commande que je crée qu'il faut qu'elle fonctionne un peu différement que ce que les utilisateurs ont l'habitude avec autocad...

Je suis peu être pointilleux, mais c'est ce que j'appel faire "propre"...

 

Merci de vos réponse rapide en tout cas...

 

Je pensais qu'il existait le moyen de récupérer cette fonction... peut-être dans des autocad ancienne version (13 .... 14 ?) ou j'imagine que la commande "copier" devait être la même et son programme accessible... non ???

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

Posté(e)

Salut,

 

Une fonction erreur pour pour c:cop, faite en aveugle dans un cyber-pub avec un clavier qwerty, pas d'AutoCAD sous la main, donc a verifier.

 

(defun c:cop (/ cop_err sel pA pB)

 (defun cop_err (msg)
   (if	(= msg "Fonction annulée")
     (princ)
     (princ (strcat "\nErreur: " msg))
   )
   (if	sel
     (command "_.erase" sel "")
   )
   (setq *error* m:err
  m:err	nil
   )
   (princ)
 )

 (setq	m:err	*error*
*error*	cop_err
 )
 (command "_.copy" (setq sel (ssget)) "" "" "")
 (setq pA (getpoint "\nSpécifiez le point de base: "))
 (command "_.move" sel "" pA pause)
 (setq pB (getvar "lastpoint"))
;;;(command "_.erase" sel "")
 (setq	*error*	m:err
m:err nil
 )
) 

 

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

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

Posté(e)
ou j'imagine que la commande "copier" devait être la même et son programme accessible... non ???

 

J'ai bien dit que c'est une fonction interne

 

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

- Merci gile, mais les erreurs restes (dès l'acceptation de la selection, avant le 1er point, la copie se fait, et si on escape, la copie reste...)

 

- Daccord Tramber, mais je ne connais pas bien l'histoire d'Autocad, et comme je l'explique je pensais que la fonction de copy était en lisp dans les première version, et que quelqu'un aurait eu l'idée de la garder...

 

De plus quand je voie la manière dont le copymbis.lsp de l'express est fait, je pensais que c'était possible (surtout que maintenat le copy multiple est d'office...)

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

Posté(e)

En réalité, il n'y a que peu de lisp dans le logiciel.

Les fonctions de maillages 3D de la boite d'outils Surfaces et les fonctions de Configuration de vues (projection 3D des solides) en sont des exemples parmis les peu nombreux.

 

Dans les outils express, il y a beaucoup de lisp mais ce sont des fonctions aditionnelles.

 

Ce code permet de visualiser, par exemple, les "méthodes" (commandes internes) de l'environnement.

(vl-load-com)
(vlax-dump-object (vlax-get-acad-object) T)

 

Celui-ci d'un objet

(setq e (entsel))
(vlax-dump-object (vlax-ename->vla-object (car e)) T)

 

[Edité le 19/4/2006 par Tramber]

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Une piste pourrait être d'utiliser la variable cmdactive.

 

(setq lispoints nil)
(command "_copy"
 (while (not (zerop (getvar "cmdactive")))
   (progn(command pause)(setq lispoints(append lispoints(list(getvar"LASTPOINT")))))
   )
 )
lispoints

 

ou mieux encore, je fais ma selection avant :

(setq sel (ssget))
(setq lispoints nil)
(command "_copy" sel ""
 (while (not (zerop (getvar "cmdactive")))
   (progn(command pause)(setq lispoints(append lispoints(list(getvar"LASTPOINT")))))
   )
 )
lispoints

 

Ca marche, même avec des erreurs.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Ouaouh!!!

là, il y a de la neuronne qui vient de chauffer ou je me trompe ???

Je ne pige pas tout, je m'y pencherais, mais il est vrais que ça fonctionne...

 

En tous les cas un grand merci, je vais me plonger dans ta proposition.

 

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

Posté(e)

et si on escape, la copie reste...

 

C'est curieux, parceque la fonction cop_err contient (if sel (command "_.ersae" sel "")) qui devrait effacer la sélection.

 

Je corrige le problème d'accentuation dans le code donné plus haut.

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é