bigsyke Posté(e) le 21 septembre 2011 Posté(e) le 21 septembre 2011 Bonjour, J'ai un drôle de problème et franchement je ne vois pas d’où cela peut provenir...Je cherche (entre autre) a implanter via un lisp une flèche a un endroit bien précis de mon folio A3Pour ce faire je recherche les coordonnées du point d'implantation de mon bloc cartouche appelé "CARTOUCHEA3" et de ce point d'implantation je détermine les coordonnées de mon point d'insertion de mon bloc "FLECHE" ce qui me donne le lisp suivant: (defun c:FL() (setvar "cmdecho" 0) (setq cc (ssget "_X" '((2 . "CARTOUCHEA3")))) (setq ena (ssname cc 0)) (setq pnt (cdr (assoc 10 (entget ena)))) (setq xo (rtos (car pnt) 2 4)) (setq x1 (atof xo)) (setq yo (rtos (cadr pnt) 2 4)) (setq y1 (atof yo)) (setq x2 (- x1 179)) (setq y2 (+ y1 85.9108)) (setq x3 (- x1 190)) (setq y3 (+ y1 87.9108)) (setq x4 (+ x1 0.5)) (setq y4 (+ y1 103.9108)) (setq x5 (- x1 255.4961)) (setq y5 (+ y1 57.9108)) (setq x6 (- x1 209.4981)) (setq y6 (+ y1 248.9108)) (setq pti2 (list x2 y2)) (setq pti3 (list x3 y3)) (setq pti4 (list x4 y4)) (setq pti5 (list x5 y5)) (setq pti6 (list x6 y6)) (command "effacer" "boite" pti3 pti4 "" "") (command "effacer" "boite" pti5 pti6 "" "") (command "inserer" "FLECHE" pti2 "1" "1" "0") (setvar "cmdecho" 1) ) Le problème c'est que lorsque j’exécute le lisp mon bloc FLECHE ne s’insère pas au point pti2 mais legerement en dessous...Concrètement si je lance le lisp ma flèche est mal positionné et pourtant lorsque je tape la commande suivante: Commande: !pti2 (215.0 90.9108) ce qui represente bien le point d'insertion recherché!Pire encore,lorsque je tape la commande suivante : Commande: l LIGNE Spécifiez le premier point: !pti2 (215.0 90.9108) Spécifiez le point suivant ou [annUler]: le point d'insertion du premier point ne corresponds pas au point (215,90.9108) :blink: Alors que si j'effectue la commande suivante: Commande: l LIGNE Spécifiez le premier point: 215,90.9108 Spécifiez le point suivant ou [annUler]: *Annuler* le point d'insertion du premier point corresponds bien aux coordonnées 215,90.9108!! Si quelqu'un y comprends quelque chose je serais ravie de connaitre le pourquoi du comment de la chose Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson
Tramber Posté(e) le 21 septembre 2011 Posté(e) le 21 septembre 2011 As-tu correctement désactivé les ACCROBJS ? Sinon, vite vu, je te prie de supprimer : (setq xo (rtos (car pnt) 2 4))(setq x1 (atof xo)) (setq yo (rtos (cadr pnt) 2 4))(setq y1 (atof yo))au profit de (setq x1 (car pnt) y1 (cadr pnt)) Passer par des STRING est inutile et dévaste la précision. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
didier Posté(e) le 21 septembre 2011 Posté(e) le 21 septembre 2011 coucou est-ce que tu n'aurais pas un "accrochage" actif ? j'ai regardé ton lisp,je ne comprends pas tout, aussi si tu nous donnesla constante à appliquer par rapport au point d'insertion du bloc "cartouchea3"on va te faire quelque chose de "plus propre"c'est quelque peu "brouillon". c'est normal qu'en phase d'apprentissage on fasse comme tu faismais c'est aussi normal, que nous, on t'indique de meilleures façons de faire. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
bigsyke Posté(e) le 21 septembre 2011 Auteur Posté(e) le 21 septembre 2011 Alors là j'en tombe des nues :o J'ai effectivement désactivé le mode d'accrochage et tout marche impeccablement :D Dire que je me suis tapé la tete contre les murs durant des heures sans avoir trouvé...mille merci pour votre aide et vos conseils!!Tramber je prends acte de tes conseils et éviterai autant que possible les conversions et manipulation de chaine de caractèreDidier voici l'esprit de mon lisp.J'ai une page de garde A3 avec un cartouche,une liste de folio représente sous la forme d'un tableau avec des croix placé en fonction de l'indice impacté et du numéro de folio...sur ce folio je cherche a implanté un bloc flèche et a effacer certaine partie du folio.Le truc c'est que mon folio n'est implanté au même endroit suivant les dossiers que j'ouvre,je suis donc obligé pour être sur de mes boites d'effacements se trouve au bonne endroit et n'efface pas n'importe quoi,de trouver un point de repère qui se trouve sur le folio.Ce point qui me servira de 0,0,0 en quelque sorte sera le point d'insertion d'un bloc nommé "CARTOUCHEA3" qui figure sur ma page de garde.Donc de ce point je détermine les coordonnées du point d'insertion de mon bloc ainsi que de mes fenêtres d'effacement en faisant un simple calcul de translation. Dans mon lisp cela donne la chose suivante: (setvar "cmdecho" 0) (setq cc (ssget "_X" '((2 . "CARTOUCHEA3")))) (setq ena (ssname cc 0)) (setq pnt (cdr (assoc 10 (entget ena)))) (setq xo (rtos (car pnt) 2 4)) (setq x1 (atof xo)) (setq yo (rtos (cadr pnt) 2 4)) (setq y1 (atof yo)) Ici je selectionne mon bloc "CARTOUCHEA3" et j'extrait les coordonnées de son point d'insertion qui sont x1 et y1 (setq x2 (- x1 179)) (setq y2 (+ y1 85.9108)) (setq x3 (- x1 190)) (setq y3 (+ y1 87.9108)) (setq x4 (+ x1 0.5)) (setq y4 (+ y1 103.9108)) (setq x5 (- x1 255.4961)) (setq y5 (+ y1 57.9108)) (setq x6 (- x1 209.4981)) (setq y6 (+ y1 248.9108)) La commence le calcul des points fait a partir des coordonnées du point d'insertion du bloc qui me servent de référant pour les coordonnées de mes autres point (setq pti2 (list x2 y2)) (setq pti3 (list x3 y3)) (setq pti4 (list x4 y4)) (setq pti5 (list x5 y5)) (setq pti6 (list x6 y6)) Ici je compose mes coordonnées de mes points (command "effacer" "boite" pti3 pti4 "" "") (command "effacer" "boite" pti5 pti6 "" "") (command "inserer" "FLECHE" pti2 "1" "1" "0") (setvar "cmdecho" 1) Une fois mes points définis,j’exécute les différentes commande associés Voilà Didier tu sais tout :D En tout cas mille merci pour vos aides et pour le temps que vous prenez pour nous répondre Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson
didier Posté(e) le 21 septembre 2011 Posté(e) le 21 septembre 2011 coucou pour ce qui est de te taper la tête contre les murs,j'ai une bonne et une mauvaise nouvelle, la bonne, c'est qu'il existe des pommades qui effacent les hématomes, la mauvaise, c'est que tu n'as pas fini, si tu persistes dans le lisp,de te cogner la tête contre les murs. je viens de t'envoyer un message privé, tiens-moi au courant, s'il te plaît. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Patrick_35 Posté(e) le 21 septembre 2011 Posté(e) le 21 septembre 2011 Salut Pour éviter les accrobj(command "_.insert" "FLECHE" "_none" pti2 "1" "1" "0") @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Fraid Posté(e) le 21 septembre 2011 Posté(e) le 21 septembre 2011 Bonjour, la mauvaise, c'est que tu n'as pas fini, si tu persistes dans le lisp,de te cogner la tête contre les murs. Tout a fait d'accord avec toi Didier, mais si on insiste bien, une fenêtre fini par s'ouvrir et c'est le "bonheur". par contre, il m'arrive d'utiliser de petits lisp pour insérer des objets dans mes cartouches qui sont bien plus simples. Car mes cartouches, étant placés dans l'espace papier, sont toujours au 0,0.Donc pas besoins de relativiser le point d'insertion. le cartouche au 0,0 est de toute façon, une règle a suivre (si possible) car facilite grandement les manipulations automatiques en espace papier comme l'impression ou la création de fenêtre. Bon courage https://github.com/Fraiddd
didier Posté(e) le 21 septembre 2011 Posté(e) le 21 septembre 2011 Coucou une fenêtre, me dis pas que c'est pour cette raison que Bill a choisi d’appeler son OS WIndows... pour ce qui est du point 0,0, c'est une très bonne habitudetoutefois, le cartouche n'est pas OBLIGATOIREMENT en bas gauchemais il est bien souvent UNIQUE d'où l'intérêt de rechercher le point d'insertion de ce dernier. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Patrick_35 Posté(e) le 21 septembre 2011 Posté(e) le 21 septembre 2011 Juste une chose.J'ai ajouté l'option Activer la notification par courriel lors de réponses ? pour ce post.Eh bien ça ne marche pas :huh: @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bigsyke Posté(e) le 21 septembre 2011 Auteur Posté(e) le 21 septembre 2011 Merci pour vos points de vue Je ne savais pas que je pouvais désactiver l'accroche objet avec "_none" Patrick_35.J'avais pour ma part plutot pensé sur OSMODE mais ta methode est plus rapide ;) J'ai aussi l'habitude de mettre mes cartouches en 0,0 Fraid mais quand tu récupères des dessins fait par d'autre personne qui bricole des trucs sur autocad comme explosé des hachures pour pouvoir les modifier tu es obligé de faire avec car tu n'as pas le budget temps pour tout reprendre.Pour ce qui est de ma tête elle est entrain de reprendre forme humaine...tout doucement B) Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson
mikl63 Posté(e) le 21 septembre 2011 Posté(e) le 21 septembre 2011 Coucou une fenêtre, me dis pas que c'est pour cette raison que Bill a choisi d’appeler son OS WIndows... pour ce qui est du point 0,0, c'est une très bonne habitudetoutefois, le cartouche n'est pas OBLIGATOIREMENT en bas gauchemais il est bien souvent UNIQUE d'où l'intérêt de rechercher le point d'insertion de ce dernier. amicalement En bas à gauche ? je n'ai jamais vu de plans avec le cartouche à gauche, toujours à droite
Fraid Posté(e) le 22 septembre 2011 Posté(e) le 22 septembre 2011 En bas à gauche ? je n'ai jamais vu de plans avec le cartouche à gauche, toujours à droite Dans les entreprises de TP c'est courant Mais cela n'a pas d'importance que cela soit a droite ou a gauche, du moment que l'on sait ou il est par rapport au zero. Et c'est aussi la diversité des chartes graphiques qui justifie d'utiliser des lisps facile à éditer ainsi que de factoriser afin de ne pas recommencer a chaque charte. Les Maitres lisp de ce site nous le montre tout le temps, l'Autolisp est un language fonctionnel. https://github.com/Fraiddd
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