-
Compteur de contenus
2 160 -
Inscription
-
Dernière visite
-
Jours gagnés
16
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par bryce
-
Generer N blocs depuis Plines closes / MPolygons
bryce a répondu à un(e) sujet de lecrabe dans Routines LISP
Raaahh ! J'ai re-corrigé le lien, c'était le texte "Edité le...) qui a mis le bazar. Cette fois il est bon, c'est sûr, j'ai cliqué dessus pour vérifier. :P Tu as dessiné dans le SCG mais parfois avec une élévation, ce qui fait que certains objets du dessin ont une coordonnée Z non nulle. Ce qui signifie qu'ils ne se trouvent pas dans le plan XY du SC courant (le SCG donc). Ton dessin contient 3 régions, une avec un Z à 0, une avec un Z à 10, et une autre avec un Z à -10. Les 2 régions avec un Z non nul sont les 2 seuls objets qui posent problème. Tous les autres sont convertis en blocs. Je teste avec AutoCAD 2011. -
Generer N blocs depuis Plines closes / MPolygons
bryce a répondu à un(e) sujet de lecrabe dans Routines LISP
Oups, désolé pour le lien, c'est corrigé. Je n'ai pas de pb avec les polylignes et les mpolygons sur ton fichier de test. Il n'y a que les régions qui ne sont pas dans le plan du système de coordonnées courant qui provoquent une erreur, la fonction vla-get-centroid ne les supporte pas. Pour l'instant je ne vois pas comment faire... :mad: -
Generer N blocs depuis Plines closes / MPolygons
bryce a répondu à un(e) sujet de lecrabe dans Routines LISP
Si tu l'as téléchargée via mon lien, ton navigateur a du garder l'ancien fichier en cache. ;) Je l'ai renommé pour être sûr qu'il le re-télécharge: http://www.creao.fr/uploads/lisp/o2bl3.lsp [Edité le 6/3/2011 par bryce] -
Generer N blocs depuis Plines closes / MPolygons
bryce a répondu à un(e) sujet de lecrabe dans Routines LISP
Je viens de t'envoyer un mail. Pour les MPOLYGONS, je me suis débrouillé avec la routine de (gile), mais tu peux m'en envoyer aussi. :) -
Generer N blocs depuis Plines closes / MPolygons
bryce a répondu à un(e) sujet de lecrabe dans Routines LISP
Je viens d'ajouter la prise en charge des mpolygons. Pourrais-tu stp me donner un fichier de test ? Ce n'était pas clair pour moi que les objets avaient un Z, j'avais compris que c'était une fonction Civil qui ferait ça ensuite. -
Generer N blocs depuis Plines closes / MPolygons
bryce a répondu à un(e) sujet de lecrabe dans Routines LISP
J'ai mis à jour mon code, j'avais oublié de prendre en charge les polylignes 3d et les polylignes 2d "lourdes"... C'est sans doute ce qui provoquait une erreur chez lecrabe. ;) (gile), En fait je préfère volontairement ne pas utiliser vlax-invoke pour que le code soit plus facile à rendre compatible zwcad par exemple. Y aurait-il par contre une bonne raison d'utiliser (vlax-invoke-method ... 'CopyObjects) plutôt que (vla-CopyObjects ...) ? Je n'ai pas compris le but de la manoeuvre... :casstet: Edit: ok c'est bon, je vois ce que tu veux dire. [Edité le 6/3/2011 par bryce] -
Generer N blocs depuis Plines closes / MPolygons
bryce a répondu à un(e) sujet de lecrabe dans Routines LISP
Pour le code de Chris_mtp, les polylignes doivent se trouver sur le calque "LIMPAR", ou sinon il faut modifier les filtres ssget. Concernant mon code, voici un lien pour télécharger le fichier et éliminer la possibilité d'un problème de copier-coller: http://www.creao.fr/uploads/lisp/o2bl3.lsp Si le souci persiste, tu peux m'envoyer un fichier de test pour que je regarde ce qui cloche (brice at creao punkt fr). ;) Edit: màj du lien [Edité le 6/3/2011 par bryce] -
Avec les paramètres classiques, non. Mais avec des contraintes dimensionnelles (cotes paramétriques), oui.
-
Tu as plein de contraintes géométriques dans ton bloc qui mettent le bazar... :o Elles ne servent à rien, une fois supprimées le bloc se comporte correctement (dans l'éditeur de blocs, commande SUPPRCONTRAINTE et choix des objets : tout). J'espère que tu ne travailles pas avec la déduction de contraintes active en permanence (1er bouton de la barre d'état en bas à gauche) ! :exclam:
-
Generer N blocs depuis Plines closes / MPolygons
bryce a répondu à un(e) sujet de lecrabe dans Routines LISP
Bonjour, Chris, tu te lèves tôt le dimanche dis donc ! :o :P Lecrabe, je te propose le lisp suivant : (defun c:O2BL (/ bname numlen *error* obj acdoc ms blks blk ss ent ent2 count errcount errflag lay pref pt lst pt2 i nbname) ; Crée un bloc pour chaque objet fermé (polyligne, région, cercle, spline, mpolygon) sélectionné. ; Demande de lecrabe sur http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=31981 ; Brice Studer, mars 2011 ; ;~~~~~~~ CONFIG ~~~~~~~~~~~ (setq bname "BL_") ; préfixe du nom des blocs créés (setq numlen 3) ; nombre de chiffres de la numérotation, nil pour auto (ex.: si nil, BL_12 ; si 4, BL_0012) ;~~~~~~~ FIN CONFIG ~~~~~~~~~~~ (vl-load-com) ;~~~~~~~ SOUS-FONCTIONS ~~~~~~~~~~~ (defun ZeroPad (str len) ; string en entrée, string en sortie "paddée" avec des 0 ; len : nombre de caractères final, nil sort une chaîne identique à celle passée en argument (if len (while (< (strlen str) len) (setq str (strcat "0" str)) str ) str ) ) (defun gc:VariantToLispData (var) ; par (gile) (cond ((= (type var) 'variant) (gc:VariantToLispData (vlax-variant-value var))) ((= (type var) 'safearray) (mapcar 'gc:VariantToLispData (vlax-safearray->list var)) ) (T var) ) ) ;~~~~~~~ FIN SOUS-FONCTIONS ~~~~~~~~~~~ (setq obj (vlax-get-acad-object) acdoc (vla-get-ActiveDocument obj) ms (vla-get-modelspace acdoc) blks (vla-get-blocks acdoc) ) (defun *error* (msg) (and msg (or (member (strcase msg) '("FUNCTION CANCELLED" "QUIT / EXIT ABORT" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) ) (if ss (vla-delete ss)) (vla-endundomark acdoc) (princ) ) (vla-startundomark acdoc) (if (setq ss (ssget '( (-4 . " (0 . "CIRCLE") (-4 . "") (0 . "REGION") (-4 . "") (0 . "MPOLYGON") (-4 . "OR>")) ) ) (progn (initget "Courant Origine") (setq lay (getkword "\nCalque pour l'insertion des blocs [Courant/Origine] : ")) (if (not lay) (setq lay "Courant")) (setq pref (getstring "\nPréfixe de numérotation (Entrée pour aucun): ")) (if (not pref) (setq pref "")) (setq ss (vla-get-activeselectionset acdoc)) (setq count 0) (setq errcount 0) (setq i 1) (vlax-for ent ss (cond ((= (vla-get-objectname ent) "AcDbRegion") (if (not (vl-catch-all-error-p (setq pt (vl-catch-all-apply 'vla-get-centroid (list ent))) ) ) (progn (setq errflag nil) (setq pt (vlax-3d-point (gc:VariantToLispData pt))) ) (progn (setq errflag T) (setq errcount (1+ errcount)) ) ) ) ((= (vla-get-objectname ent) "AcDbCircle") (setq pt (vlax-3d-point (gc:VariantToLispData (vla-get-center ent)))) (setq errflag nil) ) ((= (vla-get-objectname ent) "AcDb3dPolyline") (setq pt (vlax-3d-point (gc:VariantToLispData (vla-get-coordinate ent 0)))) (setq errflag nil) ) ((or (= (vla-get-objectname ent) "AcDbPolyline") (= (vla-get-objectname ent) "AcDb2dPolyline") ) (setq pt (gc:VariantToLispData (vla-get-coordinate ent 0))) (setq pt (vlax-3D-point (list (car pt) (cadr pt) (vla-get-elevation ent)))) (setq errflag nil) ) ((= (vla-get-objectname ent) "AcDbSpline") (setq lst (gc:VariantToLispData (vla-get-controlpoints ent))) (setq pt (vlax-3d-point (list (car lst) (cadr lst) (caddr lst)))) (setq errflag nil) ) ((= (vla-get-objectname ent) "AcDbMPolygon") (setq pt (cdr (assoc 11 (entget (vlax-vla-object->ename ent))))) (setq pt (vlax-3D-point (list (car pt) (cadr pt) (vla-get-elevation ent)))) (setq errflag nil) ) ) (if (not errflag) (progn (while (tblsearch "BLOCK" (strcat bname pref (zeropad (itoa i) numlen))) (setq i (1+ i)) ) (setq blk (vla-add blks pt (setq nbname (strcat bname pref (zeropad (itoa i) numlen)))) ) (vla-put-layer (setq ent2 (vla-copy ent)) "0") (vla-copyobjects acdoc (vlax-safearray-fill (vlax-make-safearray vlax-vbObject (cons 0 0)) (list ent2)) blk) (setq blk (vla-insertblock ms pt nbname 1 1 1 0)) (if (= lay "Origine")(vla-put-layer blk (vla-get-layer ent))) (vla-delete ent2) (setq count (1+ count)) ) ); if not errflag );vlax-for ent (princ (strcat "\n" (itoa errcount) " objets ignorés.")) (princ (strcat "\n" (itoa count) " blocs créés.")) );progn if ss );if ss (*error* nil) ); (princ "\nCommande à utiliser: O2BL") (princ) Ne prends pas en compte les MPOLYGONS pour le moment (je n'en ai pas sous la main pour tester), et je ne me suis pas non plus amusé à chercher le centre de gravité des polylignes et splines pour l'instant. ;) Edit: correction d'un bug sur la prise en charge des polylignes 3d et "lourdes". Edit2: prise en charge des MPOLYGONs Edit3: prise en compte de l'élévation des polylignes et mpolygons, les régions non situées dans le plan xy courant sont ignorées. [Edité le 6/3/2011 par bryce] -
Y a pas... ;) Il faut héberger ton fichier quelque part (sur http://dl.free.fr par ex.), et poster le lien ici.
-
Bonjour, Difficile de dire ce qui ne va pas sans pouvoir ausculter le bloc... ;)
-
Bah non... :P C'est quoi l'intérêt d'imbriquer le bloc A dans le bloc B ?
-
Je suis sûr que si un Jedi du lisp passe dans le coin, il aura des solutions bien plus élégantes à proposer. Moi ça fait moins d'un mois que je fais du lisp, alors bon... :P
-
Bonjour, Je dirais remplacer (if (= (vla-get-Name listlay ) nomlay) par (if (wcmatch (vla-get-Name listlay ) (strcat "*" nomlay)) puisque si une xref contient un calque "albert", le nom du calque est "nomdelaxref|albert". Avec wcmatch on choppe tous les calques qui se terminent par albert. Pour être plus sûr : (if (or (wcmatch (vla-get-Name listlay ) (strcat "*" nomlay)) (= (vla-get-Name listlay ) nomlay)) Edit: pour la question 2, en utilisant la fonction member pour tester si (vla-get-Name listlay ) appartient à la liste nomlay ? [Edité le 4/3/2011 par bryce]
-
Si ton étiquette est un bloc, et que tu veux que le bloc dans son ensemble reste "droit", dans la boîte de dialogue Créer bloc il faut cocher "Annotatif" et "Faire correspondre l'orientation à la présentation".
-
C'est normal... Les attributs n'ont pas la propriété "Faire correspondre l'orientation à la présentation", ça n'existe que pour les textes, ou pour le bloc dans son ensemble. Tu peux par contre "dynamiser" ton bloc en lui ajoutant une poignée de rotation permettant de faire pivoter l'attribut. Ce ne sera pas automatique par contre.
-
Bonjour, A mon avis, d'après l'image que tu as postée, pour le type de bloc que tu veux créer, l'annotativité n'est pas une solution. Il faudrait plutôt faire un bloc dynamique. Voici une vidéo qui pourrait t'intéresser : ;)
-
Bonjour, Les hachures, c'est une possibilité. :) Tu peux aussi : - utiliser un masque de nettoyage (wipeout) - faire un étirement polaire + étirement :
-
Bonjour, Voici une possibilité en déplaçant le point de base de 0,5x la valeur d'étirement. Selon le besoin, une autre solution serait que l'étirement se fasse de façon symétrique par rapport au point de base, qui lui resterait fixe.
-
Generer N blocs depuis Plines closes / MPolygons
bryce a répondu à un(e) sujet de lecrabe dans Routines LISP
Bonjour, Pourrais -tu poster un dessin exemple avec des blocs déjà créés ? C'est-à-dire ? Tu parles du calque sur lequel insérer le bloc ? Dans un bloc BL_*, la polyligne doit-elle appartenir au calque 0 ? ou au calque d'origine ? Couleur DuCalque ? DuBloc ? :P -
Plusieurs presentations sur un seul onglet de presentation
bryce a répondu à un sujet dans AutoCAD 2011
Bonsoir, On peut faire ce genre de chose avec un simple bloc dynamique, pas besoin de programmer. ;) Voici un exemple de cadre dynamique : http://www.creao.fr/uploads/blocs/cadre_dynamique.dwg -
Traduire des distance métriques en pieds
bryce a répondu à un(e) sujet de pierrevigneux dans Débuter en LISP
Le lisp en effet ne traite que les textes pour le moment. Je vais regarder ce que fait Total Area : il me semble que les attributs contiennent des champs, je verrai si je peux faire quelque chose... :casstet: -
A l'avenir il suffirait effectivement d'utiliser un champ comme valeur par défaut de l'attribut. Mais voici un lisp qui devrait te permettre de mettre à jour tes blocs: :) (defun c:MAJZ (/ obj acdoc precision *error* oldcmdecho blk b att ss ins) ; Met à jour pour toutes les références du bloc choisi un attribut sélectionné, ; pour y afficher la coordonnée Z du bloc. ; Brice Studer, mars 2011 ; ;~~~~~~~ CONFIG ~~~~~~~~~~~ (setq precision 3) ; nombre de décimales de l'altitude ;~~~~~~~ FIN CONFIG ~~~~~~~ (vl-load-com) (setq acdoc (vla-get-ActiveDocument (setq obj (vlax-get-acad-object))) ) ;~~~~~~~ GESTION ERREURS ~~~~~~~~~~~ (defun *error* (msg) (and msg (or (member (strcase msg) '("FUNCTION CANCELLED" "QUIT / EXIT ABORT" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) ) (if ss (vla-delete ss)) (setvar "cmdecho" oldcmdecho) (vla-endundomark acdoc) (princ) ) ;~~~~~~~ FIN GESTION ERREURS ~~~~~~~ ;~~~~~~~ SOUS-FONCTIONS ~~~~~~~~~~~ (defun PutAttValue ( object tag value ) ;; Lee Mac ~ 05.05.10 (mapcar (function (lambda ( attrib ) (and (eq tag (vla-get-TagString attrib)) (vla-put-TextString attrib value) ) ) ) (vlax-invoke object 'GetAttributes) ) value ) ;~~~~~~~ FIN SOUS-FONCTIONS ~~~~~~~ (vla-StartUndoMark acdoc) (setq oldcmdecho (getvar "cmdecho")) (setvar "cmdecho" 0) (while (not (and (setq blk (car (entsel "\nSélectionnez un des blocs à mettre à jour: "))) (setq blk (vlax-ename->vla-object blk)) (= (vla-get-ObjectName blk) "AcDbBlockReference") (setq blk (vla-get-effectivename blk)) );and );not (princ "\nL'objet sélectionné n'est pas un bloc ! ") );while no bloc (while (not (and (setq att (car (nentsel "\nCliquez sur une valeur d'altitude: "))) (setq att (vlax-ename->vla-object att)) (= (vla-get-ObjectName att) "AcDbAttribute") (setq att (vla-get-tagstring att)) );and );not (princ "\nL'objet sélectionné n'est pas un attribut ! ") );while no attribute (if (ssget "_X" '( (0 . "INSERT") ) ) (vlax-for b (setq ss (vla-get-ActiveSelectionSet acdoc)) (if (= blk (vla-get-effectivename b)) (if (and (setq ins (vlax-get b 'InsertionPoint)) (setq ins (caddr ins)) ) (putattvalue b att (rtos ins 2 precision)) ) );if b = blk );vlax-for );if ssget (*error* nil) (princ) );MAJZ (princ "\nCommande à utiliser: MAJZ") (princ) http://www.creao.fr/uploads/lisp/majZ.lsp [Edité le 3/3/2011 par bryce]
-
Bonsoir, Il faudrait préciser un peu : tu parles de texte, mais ce n'est pas plutôt un attribut qui affiche l'altitude ?
