stugeol Posté(e) le 5 décembre 2011 Posté(e) le 5 décembre 2011 Bonjour,Je ne dispose pas de covadis, et chaque fois que je récup^ère des plans topographiques, j'ai toujours des blocs Tcpoint, avec un atribut Alt mais le bloc est inséré à une altitude Nulle.Je suis à la recherche d'une routine (Lisp et ou VBA) qui puisse attribuer la valeur de l'atribut Alt au Z d'insertion du bloc Tcpoint. des recherches sur le site me donne des liens qui ne sont plus actifs. Pourriez vous m'aider.Cordialement... PS : un exemple de réponse...Posté 30 juillet 2008 - 08:08 Tu as mal cherché... Regarde la réponse de (gile) dans cette discussion Petit à petit on devient moins petit
stugeol Posté(e) le 6 décembre 2011 Auteur Posté(e) le 6 décembre 2011 Bon dans mes recherche je suis tombé sur un lisp de gille :(defun c:bloc-alt (/ ins att) (vl-load-com) (and (setq name (getstring T "\nEntrez le nom du bloc: ")) (setq tag (getstring "\nEntrez l'étiquette de l'attribut: ")) (ssget "_X" (list '(0 . "INSERT") (cons 2 name))) (vlax-for b (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object) ) ) (setq ins (vlax-get b 'InsertionPoint) att (vlax-invoke b 'getAttributes) ) (foreach a att (if (and (= (vla-get-TagString a) (strcase tag)) (numberp (setq alt (read (vla-get-TextString a)))) ) (vla-Move b (vlax-3d-point '(0 0 0)) (vlax-3d-point (list 0 0 alt)) ) ) ) ) ) (princ) ) Le problème que je rencontre c'est que les point qui on un Z insertion egale a l'attribut Alt sont déplacer en Z de la valeurs de l'altitude.Est-il possible d'ajouter un test et de ne déplacer que les points qui ont une altitude d'insertion nulle, ou les points qui on une altitude d'insertion différente du matricule Alt et de les déplacer en Z de : si Z insertion <0 déplacer de -Z insertion + Alt si Z insertion >=0 déplacer de valeur absolue (Z insertion - Alt) Je vous remercie par avance de votre aide.Cordialement. Petit à petit on devient moins petit
didier Posté(e) le 6 décembre 2011 Posté(e) le 6 décembre 2011 Coucou Voici ma proposition :je mets le point en altitude de la valeur de l'attributje n'ai pas fait de test dans le cas d'attribut non numérique (defun c:tcpointz (/ jeusel n ent altval pospt tempo) (setq jeusel (ssget (list (cons 0 "INSERT") (cons 2 "TCPOINT") ))) (setq n 0) (repeat (sslength jeusel) (setq ent (ssname jeusel n)) (if (= "ALT" (cdr (assoc 2 (entget (entnext (entnext ent)))))) (progn (setq altval (cdr (cons 1 (cdr (assoc 1 (entget (entnext (entnext ent))))))) pospt (cdr (assoc 10 (entget ent))) tempo (subst (cons 10 (list (car pospt) (cadr pospt) (atof altval))) (cons 10 pospt) (entget ent) ) ) (entmod tempo) (entupd ent) (setq n (+ 1 n)) ) ) ) ) Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
stugeol Posté(e) le 6 décembre 2011 Auteur Posté(e) le 6 décembre 2011 Je te remercie, la routine fonctionne à merveille. Et elle est trés rapide (15 000 points traités en quelques seconde...).Il va falloire que je prenne le temps de surfer sur le net pour me mettre au Lisp, afin de comprendre les routines Lisp, et de pouvoire en créer selon les besoins.Encore un grand merci... :) Petit à petit on devient moins petit
didier Posté(e) le 6 décembre 2011 Posté(e) le 6 décembre 2011 Coucou c'est une des pires façons de faire surfer sur le net pour me mettre au Lispil ne faut surtout pas mettre la barre trop hautsi tu commences à copier-coller, c'est perdu. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
VDH-Bruno Posté(e) le 6 décembre 2011 Posté(e) le 6 décembre 2011 (modifié) Bonjour stugeol, Il va falloire que je prenne le temps de surfer sur le net pour me mettre au Lisp, afin de comprendre les routines Lisp, et de pouvoire en créer selon les besoins.Tu verras ce n’est pas si compliqué à condition de ne pas chercher à brûler les étapes, l’apprentissage du LISP ce n’est pas une course de vitesse, le principal c’est d’y trouver son intérêt et de comprendre pour devenir autonome. Bon sinon histoire de ne pas laisser un problème (ou question) sans solutions avec le code que tu as posté.. Est-il possible d'ajouter un test et de ne déplacer que les points qui ont une altitude d'insertion nulle, ou les points qui on une altitude d'insertion différente du matricule Alt et de les déplacer en Z de :si Z insertion <0déplacer de -Z insertion + Altsi Z insertion >=0déplacer de valeur absolue (Z insertion - Alt)En programmation ce que tu expose peut très bien s’écrire très simplement (sans test) de la façon suivante :Z = Alt - Z insertion (soit un déplacement relatif) Pour intégrer cela dans le code que tu as posté il suffit de substituer ces lignes :(vla-Move b (vlax-3d-point '(0 0 0)) (vlax-3d-point (list 0 0 alt)) ) Par(vla-Move b (vlax-3d-point (list 0 0 (caddr ins))) (vlax-3d-point (list 0 0 alt)) ) Pour personnaliser encore le code que tu as posté et l’adapter à ton cas tu peux également également substituer ces lignes de codes :(setq name (getstring T "\nEntrez le nom du bloc: ")) (setq tag (getstring "\nEntrez l'étiquette de l'attribut: ")) Par les suivantes pour un peu plus de convivialité à moindre coût (Car dans ton cas ce ne sont plus des inconnues mais des constantes):(setq name "TCPOINT") (setq tag "ALT") Le code définitif à tester.. (defun c:bloc-alt (/ ins att name tag) (vl-load-com) (and (setq name "TCPOINT") (setq tag "ALT") (ssget "_X" (list '(0 . "INSERT") (cons 2 name))) (vlax-for b (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)) ) (setq ins (vlax-get b 'InsertionPoint) att (vlax-invoke b 'getAttributes) ) (foreach a att (if (and (= (vla-get-TagString a) (strcase tag)) (numberp (setq alt (read (vla-get-TextString a)))) ) (vla-Move b (vlax-3d-point (list 0 0 (caddr ins))) (vlax-3d-point (list 0 0 alt)) ) ) ) ) ) (princ) ) A+ sur le forum LISP.. Modifié le 6 décembre 2011 par VDH-Bruno Apprendre => Prendre => Rendre
stugeol Posté(e) le 18 décembre 2011 Auteur Posté(e) le 18 décembre 2011 Merci pour vos remarques,Sur le net j'ai trouvé de bons ouvrages sur le Lisp, j'ai plus qu'a potasser... Petit à petit on devient moins petit
didier Posté(e) le 19 décembre 2011 Posté(e) le 19 décembre 2011 coucou bon potassage !tu seras le bienvenu avec tes questionsmais je t'en prie, ne brûle pas les étapes... amicalement Éternel débutant... Mon site perso : Programmer dans 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