LUDWIG Posté(e) le 22 avril 2005 Posté(e) le 22 avril 2005 rebonjour, mon [surligneur] mégalisp [/surligneur]est bientôt prêt. Mais en testant différente configuration, je m'aperçois d'une erreur dans un bout de code. (setq bloc_prop (tblnext "block" T)) (setq constituant_id (cdr (assoc -2 bloc_prop))) (while constituant_id (if (vl-catch-all-error-p (vl-catch-all-apply '(lambda ()(vla-GetBoundingBox (vlax-ename->vla-object constituant_id) 'mini 'maxi))))(setq RIEN "VRAI")(setq RIEN "FAUX") ) (setq constituant_id (entnext constituant_id)) ) [b] En plus clair : si j'ai au moins un objet dans mon bloc avec une GetBoundingBox alors RIEN=FAUX sinon RIEN=VRAI[/b] Ceci marche pour :- un bloc avec 2 lignes- un bloc avec 1 ligne et une droite (qui n'a pas de GBB) Mais quand j'ai un bloc constitué uniquement de droite, je ne m'arrête jamais de boucler. Quelqu'un voit mon erreur ? Merci d'avance. Autocad 2021 - Revit 2022 - Windows 10
Tramber Posté(e) le 22 avril 2005 Posté(e) le 22 avril 2005 :) Ben rien ne t'arrêtes ! J'ai jamais vu de blocs constitués uniquement de droites, mais bon....... faut que tu fasses une sous-routine qui regarde si ce bloc malin n'est pas constitué de droite. en bouclant les entités constituant ton bloc Attention, ton tblnext est à T,....sauf erreur tu vas boucler sur le même bloc Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Tramber Posté(e) le 22 avril 2005 Posté(e) le 22 avril 2005 Autant pour moi j'ai mal lu pour tblnext Ton problème n'est pas si simple et difficile à décoder avec les fonctions vl d'erreur. Je paris que ta déf de bloc avec 1 ligne et 1 droite, tu l'as pas essayé avec 1 droite puis une ligne. Me trompe-je ? Je rappelle que tu as un (while id_trucdonc ca boucle tant qu'il n'est pas nul Peut être en le setq nil dans la gestion d'erreur ca marcherait mieux, mais ca bricole. [Edité le 22/4/2005 par Tramber] Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
didier Posté(e) le 22 avril 2005 Posté(e) le 22 avril 2005 Bonsoir Ludwig. je viens te demander des précisions,car je ne vois pas la finalité de ce code,que recherches tu en cherchant la bounding box ?surtout dans un bloc, si j'ai bien compris et enfin c'est quoi la différence entre une Droite et une Ligne dans ton vocabulaire ? amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
LUDWIG Posté(e) le 24 avril 2005 Auteur Posté(e) le 24 avril 2005 [surligneur] TRAMBER : [/surligneur]tu as juste je n'ai pas essayé d'inverser l'ordre des entités. J'ai peut être un problème lors de la lecture de la dernière entité justement. Et si ça se trouve, l'erreur n'était pas dans le bout de code que j'ai présenté ( :mad2: )... Je testerais ça demain au boulot... [surligneur] DIDIER : [/surligneur]Je fais un lisp qui "normalise" les blocs d"un dessin quand le point d'insertion est à Pétaouchnok (c'est-à-dire hors de l'emprise du bloc). Les blocs redéfinis sont replacés correctement, et conserve les mêmes rotation et échelle. pour répondre à ta question, je cherche la getboundingbox d'un bloc de la table des blocs (c'est à dire une entité " block" pas forcement insérée dans le dessin et non une entité " insert"). Or la getboundingbox ne fonctionne pas pour un " block" (ou alors je me suis mal débrouillé ?) mais fonctionne pour CERTAINES entités qui sont à l'intérieur... donc en testant chacune des entités, je peux obtenir les points extrêmes du " block". Certaines entités pouvant être contenues dans un " block" n'ont pas de getboundingbox et la recherche de cette gbb sur ces entités renvoies une erreur. Donc quand je trouve une entité sans gbb dans le bloc, j'analyse aussitôt l'entité suivante. Mais je peux aussi avoir le cas (rarissime mais pas impossible) d'un bloc constitué uniquement d'entité sans gbb (c'est le bout de code que j'ai mis dans ce post)... auquel cas je dois ignorer le bloc (en définissant ma variable RIEN sur VRAI)... et c'est ce bout de code qui me pose problème. Ouf ! J'espère que tu as compris mes élucubrations. Quand à la différence entre ligne et droite, je serais tenter de te dire de regarder dans l'aide (haha)...La signification géométrique d'une ligne autocad, c'est un segment.La signification géométrique d'une droite autocad, c'est une droite : elle est donc illimitée et n'a pour conséquent pas de GetBoundingBox ! Je n'ai pas vraiment testé les autres entités pour voir lesquelles n'ont pas de gbb Autocad 2021 - Revit 2022 - Windows 10
Tramber Posté(e) le 24 avril 2005 Posté(e) le 24 avril 2005 Or la getboundingbox ne fonctionne pas pour un " block" (ou alors je me suis mal débrouillé ?) En effet, je viens d'essayer, ca ne marche pas, même si(tblobjname "block" "nomdubloc")renvoie l'entité BLOCK mais n'est pas analysable par la gbb.contrairement à ce que j'ai voulu nous faire penser dans ton message précédent. Un conseil; fais un lisp + simple avec des boucles imbriquées qui parcourent les blocs et les éléments du blocs.Tu n'auras aucune difficulté à éviter la gbb sur un bloc constitué de droites,+ simple encore à sauter au dessus de tout élément non compatible. Vaincre les problèmes avec la gestion d'erreur me parait "chaud" (parce que je n'ai pas la maitrise moi-même), d'autres verrons peut-être la solution dans ce sens... [Edité le 24/4/2005 par Tramber] Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
zebulon_ Posté(e) le 25 avril 2005 Posté(e) le 25 avril 2005 Je n'ai pas tout bien compris, mais moi quand je veux dépiauter un bloc, je fais une boucle while jusqu'à tomber sur SEQEND (setq bloc_prop (tblnext "block" T))(while bloc_prop(setq constituant_id (cdr (assoc -2 bloc_prop))) (setq AC (entget constituant_id))(while (/= (cdr (assoc 0 AC)) "SEQEND")....(setq constituant_id (entnext constituant_id))(setq AC (entget constituant_id)))(setq bloc_prop (tblnext "block"))) en résumé, d'abord je défile la liste des blocs dans la table des blocs, puis pour chaque bloc je dépiaute chaque élément avec une autre boucle while. A propos des blocs, les xrefs sont définis comme des blocs, ne faudrait-il pas les exclure ?? C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
LUDWIG Posté(e) le 25 avril 2005 Auteur Posté(e) le 25 avril 2005 TRAMBER : tu avais raison, c'est l'ordre des entités qui cause mon problème --> si la dernière entité scannée n'a pas de gbb, c'est là ou sa plante. Donc je vais chercher la correction. ZEBULON_ : moi je fais une boucle sur les entités tant que constituant_id n'est pas nul ("while constituant_id"). Je ne sais pas la recherche du SEQEND va changer quelque chose, je vais essayer. Par contre, très bonne remarque sur les Xref ! Il vaut mieux que je les filtre... Mon code pourrait marcher sur eux (quoique je viens d'essayer et j'ai une erreur) mais les Xref sont souvent lourds (plan archi entier par ex). Merci Autocad 2021 - Revit 2022 - Windows 10
zebulon_ Posté(e) le 25 avril 2005 Posté(e) le 25 avril 2005 Mais tel c'est écrit, j'ai l'impression que constituant_id ne devient nil que quand tu arrives à la fin du fichier et non à la fin de la définition du block ??? C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Patrick_35 Posté(e) le 25 avril 2005 Posté(e) le 25 avril 2005 Je suis comme zebulon_, à la lecture de ton lisp, je ne vois rien de spécial @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
LUDWIG Posté(e) le 25 avril 2005 Auteur Posté(e) le 25 avril 2005 J'ai vérifié : je tourne en boucle quand mon dernier objet scanné n'a pas de gbb (droite en l'occurrence). Par contre je n'ai pas réussi à me servir de SEQEND, j'obtiens une erreur "ltypentity nil" ou un truc du style... Autocad 2021 - Revit 2022 - Windows 10
LUDWIG Posté(e) le 28 avril 2005 Auteur Posté(e) le 28 avril 2005 Mon erreur n'était pas dans ce bout de code ! :red: Désolé Autocad 2021 - Revit 2022 - Windows 10
LUDWIG Posté(e) le 29 avril 2005 Auteur Posté(e) le 29 avril 2005 J'ai fini mon lisp grace à votre aide: Redéfinir les points d'insertion mal placés des blocs Autocad 2021 - Revit 2022 - Windows 10
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