Bred Posté(e) le 19 avril 2006 Posté(e) le 19 avril 2006 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...
Tramber Posté(e) le 19 avril 2006 Posté(e) le 19 avril 2006 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 ./__\. (.°=°.)
Bred Posté(e) le 19 avril 2006 Auteur Posté(e) le 19 avril 2006 ... 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...
Patrick_35 Posté(e) le 19 avril 2006 Posté(e) le 19 avril 2006 SalutTu 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Bred Posté(e) le 19 avril 2006 Auteur Posté(e) le 19 avril 2006 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...
(gile) Posté(e) le 19 avril 2006 Posté(e) le 19 avril 2006 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
Tramber Posté(e) le 19 avril 2006 Posté(e) le 19 avril 2006 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 ./__\. (.°=°.)
Bred Posté(e) le 19 avril 2006 Auteur Posté(e) le 19 avril 2006 - 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...
Tramber Posté(e) le 19 avril 2006 Posté(e) le 19 avril 2006 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 ./__\. (.°=°.)
Tramber Posté(e) le 19 avril 2006 Posté(e) le 19 avril 2006 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 ./__\. (.°=°.)
Bred Posté(e) le 19 avril 2006 Auteur Posté(e) le 19 avril 2006 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...
(gile) Posté(e) le 20 avril 2006 Posté(e) le 20 avril 2006 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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant