bseb67 Posté(e) le 16 juillet 2007 Posté(e) le 16 juillet 2007 Salut! J'ai fait un petit lisp afin que toutes les entités se retrouvent en altitude 0. Mais cela ne fonctionne pas correctement :( Pour exemple: il me reste des blocs qui si j'ouvre la fenêtre des propriétés, pour le Z je trouve -50 alors que si je fait un entget sur le bloc dans le Z il y a 0.0 :casstet: par contre pour les valeurs en X et Y ceux sont les mêmes (à peu de chose près, car le entget me retourne un arrondi) Merci. :) Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
(gile) Posté(e) le 16 juillet 2007 Posté(e) le 16 juillet 2007 Salut, Difficile de répondre sans voir le code. Est-ce que ton LISP utilise la méthode qui consiste à déplacer tous les objets de 0,0,0 vers 0,0,1e99 puis de 0,0,0 à 0,0,-1e99 ? (command "_.move" (ssget "_X") "" '(0 0 0) '(0 0 1e99) "_.move" "_p" "" '(0 0 0) '(0 0 -1e99) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bseb67 Posté(e) le 16 juillet 2007 Auteur Posté(e) le 16 juillet 2007 Salut Gile, Le pseudo code du lisp est du genre:ssget type (je fais type par type : insert, line, polyline)je boucle sur les éléments:je test le code qui contient les coordonnées, je test le Z: si (> (abs (Z -0.0)) epsilon)alors je change le code en mettant (code X Y 0.0) Je ne sais pas comment mettre du code pour l'afficher correctement sur le site. Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
(gile) Posté(e) le 16 juillet 2007 Posté(e) le 16 juillet 2007 En procédant comme tu le fait, il faut tenir compte du système de coordonnées dans lequel sont définis les points (code DXF 10 par exemple).Pour beacoup d'entités 2d (références de bloc, cercles, arcs, textes ...) ce point est défini dans le SCO de l'objet, et mettre le Z de ce point à 0.0 ne place pas forcément l'objet sur le 0.0 du SCG si le SCO de l'objet n'est pas parallèle au SCG (voir ce sujet). Essaye la méthode données plus haut, elle devrait fonctionner. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bseb67 Posté(e) le 16 juillet 2007 Auteur Posté(e) le 16 juillet 2007 Re-salut, Je me doutais qu'il devait y avoir un problème de ce genre, car si je déplace manuellement le bloc, son code contient +50 pour le Z alors que le Z de la fenetre des propriétés est bien à 0.0. Ta commande est bizarre :casstet: , je l'ai essayé sur mon dessin de test, je ne vois plus gd chose!Il ne mes reste que des petits points :exclam: Mon but est de mettre uniquement le Z à zéro, afin que lorsque l'on regarde le dessin avec la vue gauche ou droite, on obtienne une belle droite (multicolore) et pas des traits partout, afin d'éviter les bugs avec autofluid lorsque les dessinateur font des raccords. Merci Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
bonuscad Posté(e) le 17 juillet 2007 Posté(e) le 17 juillet 2007 Un truc très ancien que j'avais réalisé, si ça peut te servir comme base... Il est à remanier, par exemple les LWPOLYLINE ne sont pas prises en compte.Les résultats sont à vérifier, je n'ai jamais repris ce code car la commande "FLATTEN" des express répond a ce genre de souhait (defun mdf_10 (lst cod / nw_pt) (setq nw_pt (trans (cdr (assoc cod lst)) (cdar lst) 0)) (subst (cons cod (list (car nw_pt) (cadr nw_pt) 0.0)) (assoc cod lst) lst ) ) (defun mdf_210 (lst / ) (subst '(210 0.0 0.0 1.0) (assoc 210 lst) lst ) ) (defun chg_lst (dx_lst dx_cod / ) (while dx_cod (cond ((eq (car dx_cod) 10) (setq dx_lst (mdf_10 dx_lst 10)) ) ((eq (car dx_cod) 11) (setq dx_lst (mdf_10 dx_lst 11)) ) ((eq (car dx_cod) 12) (setq dx_lst (mdf_10 dx_lst 12)) ) ((eq (car dx_cod) 13) (setq dx_lst (mdf_10 dx_lst 13)) ) ((eq (car dx_cod) 210) (setq dx_lst (mdf_210 dx_lst)) ) ) (setq dx_cod (cdr dx_cod)) ) (entmod dx_lst) ) (defun id_ent (name / ) (setq dxflst (entget name)) (setq dxfnam (cdr (assoc 0 dxflst))) (cond ((eq dxfnam "LINE") (chg_lst dxflst '(10 11 210)) ) ((or (eq dxfnam "POINT") (eq dxfnam "CIRCLE") (eq dxfnam "ARC") (eq dxfnam "ATTDEF") (eq dxfnam "SHAPE") ) (chg_lst dxflst '(10 210)) ) ((eq dxfnam "TEXT") (if (assoc 11 dxflst) (chg_lst dxflst '(10 11 210)) (chg_lst dxflst '(10 210)) ) ) ((or (eq dxfnam "TRACE") (eq dxfnam "SOLID") (eq dxfnam "3DFACE") ) (chg_lst dxflst '(10 11 12 13 210)) ) ((eq dxfnam "POLYLINE") (setq s_lst (entget (entnext (cdar dxflst)))) (while (/= (cdr (assoc 0 s_lst)) "SEQEND") (chg_lst s_lst '(10)) (setq s_lst (entget (entnext (cdar s_lst)))) ) (setq dxflst (subst '(10 0.0 0.0 0.0) (assoc 10 dxflst) dxflst)) (entmod dxflst) (chg_lst dxflst '(210)) (entupd (cdar dxflst)) ) ((eq dxfnam "INSERT") (cond ((and (assoc 66 dxflst) (not (zerop (cdr (assoc 66 dxflst))))) (setq s_lst (entget (entnext (cdar dxflst)))) (while (= (cdr (assoc 0 s_lst)) "ATTRIB") (if (assoc 11 s_lst) (chg_lst s_lst '(10 11 210)) (chg_lst s_lst '(10 210)) ) (setq s_lst (entget (entnext (cdar s_lst)))) ) ) ) (chg_lst dxflst '(10 210)) (entupd (cdar dxflst)) ) ((eq dxfnam "VIEWPORT") (prompt "\nNe peut modifier une entitée fenêtre, valeurs inchangées.") ) ((eq dxfnam "DIMENSION") ) ) ) (defun c:3DTO2D () (setq ind 0) (setq js (ssget)) (repeat (sslength js) (setq n_ent (ssname js ind)) (setq ind (1+ ind)) (if (= ind 32768) (setq ind (float ind)) ) (id_ent n_ent) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
bseb67 Posté(e) le 17 juillet 2007 Auteur Posté(e) le 17 juillet 2007 Salut Bonuscad! Trop cool :D , c'était exactement ce que je cherchais à faire. Maintenant il ne mes reste plus qu'à comprendre le code et voir pour les LWPOLYLINE. donc le jeune padawan du lisp dit mille fois merci à maitre yoda! ;) Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
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