Aller au contenu

LUDWIG

Membres
  • Compteur de contenus

    1 396
  • Inscription

  • Dernière visite

Tout ce qui a été posté par LUDWIG

  1. LUDWIG

    Geler l\'écran

    LFA : je ne comprends pas trop ton incompréhension (?). Si j'ai un lisp qui déplace toutes les polylignes @10,0,0 puis fait une rotation d e10° par rapport à 0,0,0, tu vas forcément voir la décomposition des 2 mouvements. Patrick_35 : mon programme est existant (vba - lisp, très gros, c'est un logiciel que l'on vend). Donc je ne peux pas me permettre de le modifier... Patrick : Je ne me suis jamais intéressé au cliché. J'ai testé rapidement, ça doit être une piste à explorer...
  2. Bonjour, Existe-t'il un moyen de "geler" l'écran ? Je donne un exemple, ça aidera à comprendre, c'est sûr : J'ai un dessin. Je lance un lisp ou un script ou un vba qui fait plein de manipulations d'objets à l'intérieur (sélections, déplacements, échelles, etc). Je souhaite qu'il n'y ait que 2 images entre AVANT le traitement et APRES le traitement, c'est-à-dire qu'on passe directement de l'état initial à l'état final... Merci d'avance...
  3. LUDWIG

    Unités des wblocs

    Je crois avoir une piste : La variable MEASUREMENT " définit les unités (anglo-saxonnes ou métriques) pour le dessin courant uniquement. 0 Système anglo-saxon 1 Système métrique ". Même si les unités définit dans AECDWGSETUP sont en mètres, MEASUREMENT peut être sur 0 (système anglo-saxon). Dans ce cas, le wbloc exporté prend les unités anglo-saxonne (pouces). Par précaution, je vais régler : -insunits 6 -insunitsdeftarget 6 -insunitsdefsource 6 -measurement 1 -measureinit 1
  4. J'ai aussi trouvé : - INSUNITSDEFSOURCE - INSUNITSDEFTARGET Mais il y a tellement de variables concernant les unités que je suis perdu...
  5. LUDWIG

    Unités des wblocs

    Ben je cherche à coller une unité aux wbloc que je créer au moment ou je les créer, donc sans avoir à rouvrir le fichier créer...
  6. Bonjour, J'ai un dessin en mètre. Quand je fais un wbloc, le dessin est en pouce... J'avais réussi à régler le pb sur l'ordi d'une collègue en changeant l'unité des NOUVEAUX dessins (voir post précédent). Mais sur mon ordi, ça ne fonctionne pas... Même en changeant les "unités d'insertion". Je ne comprends pas la logique ! Quelqu'un la comprise ?
  7. Bonjour, Dans Autodesk Architectural Desktop, on peut modifier les unités des nouveaux dessins en modifiant les options dans AECDWGSETUP et en cochant sur "Enregistrer par défaut"... Quelqu'un sait dans quelle(s) variable(s) les unités des nouveaux dessins sont définies ? Merci d'avance...
  8. Ouais trop fort ! Un peu compliqué aussi ? Merci !
  9. Oui, outil indispensable ! Avec ça, les gens a qui tu envoies des plans ne pourront plus te dire "il me manque l'xref, im me manque l'image...". S'ils utilisent tous les fichiers du etransmit, ils ont le meme plan que toi (meme police, etc). En plus etransmit ne te met que les fichiers utilisés dans le dessin. Si tu as une version 2000, c'est express->Pack'n Go (mais attention aux erreurs fatales)...
  10. ARGH ! AcDbRotatedDimension correspond uniquement aux côtes pivotées. J'ai essayé de mettre un caractère générique ("*Dim*) mais ça ne fonctionne pas... Comment prendre toutes les côtes ?
  11. Merci pour les félicitations... Didier, oui je me suis mis au Lisp en novembre. Avant je l'utilisais mais je ne faisais que des "command" et ssget, c'était plus du script... Je mettrais les futures moutures ici (utilisation de vlisp plutôt que command, ajout d'un compteur...)
  12. C'est concis, c'est efficace ! Merci. Je vais modifier le1er lisp pour utiliser le Vlisp (suppression des cotes dans le dessin)
  13. Bonjour,, Toujours dans mon optique de nettoyage et normalisation de dessin, je cherche à éliminer toutes les côtes. Pas de problème : (defun c:supcot () ;****suppression des côtes du dessin (if (/= nil (setq nom (entnext)))(setq entitytyp (cdr (assoc 0 (entget (setq nom (entnext))))))) (while nom (if (= "DIMENSION" entitytyp) (entdel nom)) (if (/= nil (setq nom (entnext nom)))(setq entitytyp (cdr (assoc 0 (entget nom))))) ) ;_ Fin de while ) Sauf que bien sûr endel ne supprime pas les côtes dans le blocs (l'aide est d'ailleurs claire sur ce point). J'essaye donc de supprimer la côte avec un subst dans la définition du bloc. Je sais que ça ne va pas marcher mais je ne connais pas la commande qui supprime un bout de liste dans une liste (subst remplace un bout de liste par un autre dans une liste). (setq bloc_prop (tblnext "block" T)) (setq constituant_id (cdr (assoc -2 bloc_prop))) (while bloc_prop (while constituant_id (if(= (cdr (assoc 0 (entget (setq n (cdr (assoc -2 bloc_prop)))))) "DIMENSION") [b] (setq bloc_prop (subst "" (cons -2 constituant_id) bloc_prop)) (entmod bloc_prop)[/b] ) (setq constituant_id (entnext constituant_id)) ) ;_ Fin de while (setq bloc_prop (tblnext "block")) ) ;_ Fin de while ) ;_ Fin de defun
  14. Merci ça fait plaisir... MAis je n'y serais pas arriver sans les contributions des membres de CadXp Je pensais les modifier plus tard justement. Mais pourquoi faut-il priviligier la modif direct des variables et les commandes Vlisp plutôt ques les "command" ? -command scu : on doit pouvoir enregistrer le scu courant dans une variable, mettre le général, puis rétablir le scu enregistré en fin de programme. -command accrobj auc peut bin sûr être remplacé par un setvar osmode ... -command calque : je souhaitais enregistrer un état de calque, tout libérer puis rétablir l'état en fin de commande. Mais je ne savais pas comment tester si le nom de l'état que je veux donner existe déjà... -command purger : ok je ne connaissais pas vla-purgeall des fois je ne les trouve pas justement : entres les - , _ . , et les combinaisons possibles, il faut s'y retrouver. Après faut connaître les options...
  15. LUDWIG

    Je boucle !

    J'ai fini mon lisp grace à votre aide: Redéfinir les points d'insertion mal placés des blocs
  16. LUDWIG

    gestion d\'erreur

    J'ai fini mon lisp grace à votre aide: Redéfinir les points d'insertion mal placés des blocs
  17. Merci, ça m'a permis de finir mon lisp : Redéfinir les points d'insertion mal placés des blocs
  18. Un lisp qui redéfinit tous les blocs d'un dessin quand leur point d'insertion est défini hors du bloc. Les Xrefs ne subissent pas le lisp. Les blocs anonymes sont remplacés par des blocs nommés. J'ai essayer de tester toutes les configurations possibles. Dites moi ce que vous en pensez et renvoyez les problèmes. ATTENTION POST EDITE : sur certains cas particuliers, les résultats sont inattendus. Voir message posté le 14/9/2005 à 17:10 dans ce sujet même. ATTENTION j'ai édité le code (point virgule sur ;(assoc 4 bloc_prop) car ce code peut ne pas exister dans le bloc d'origine) ;********************************************************************************************************************************************************** ;REDEFINIR POINTS DE BASE DES BLOCS ;********************************************************************************************************************************************************** ;Redéfini les blocs dont le point d'insertion est hors de l'emprise du bloc (defun c:repib () ;RE définir les P oints d' I nsertion des B locs ;pas de messages pendant la commande (setq cmdechOLD (getvar "cmdecho")) (setvar "cmdecho" 0) ;pas d'accrochage objets pendant la commande (setq OSMOLD (getvar "Osmode")) (command "-accrobj" "auc") ;se place en scu général (command "scu" "Général") ;affiche et libère tous les calques (COMMAND "-calque" "L" "*" "AC" "*" "D" "*" "E" "0" "") (initget 1 "O N") (setq purger (getkword "Voudrez-vous purger ? (O ou N) ")) ;********************************************************************************************************************************** ;ETAPE 0 : Récupération des données du bloc ;********************************************************************************************************************************** (setq bloc_prop (tblnext "block" T)) ;Propriétés du bloc (while bloc_prop (setq bloc_nom (cdr (assoc 2 bloc_prop))) (setq constituant_id (cdr (assoc -2 bloc_prop))) (setq bloc_pi (cdr (assoc 10 bloc_prop))) (setq bloc_X (car bloc_pi)) (setq bloc_Y (cadr bloc_pi)) (setq bloc_Z (caddr bloc_pi)) (setq RIEN "VRAI") ;Ne fait le traitement que si le bloc n'est pas une référence externe (bit 4 du drapeau 70) (if (= (logand (cdr (assoc 70 bloc_prop)) 4) 0) (progn ;Test si le bloc a au moins un constituant possédant une GetBoundingBox (while constituant_id (if (not (vl-catch-all-error-p (vl-catch-all-apply '(lambda () (vla-GetBoundingBox (vlax-ename->vla-object constituant_id ) ;_ Fin de vlax-ename->vla-object 'mini 'maxi ) ;_ Fin de vla-GetBoundingBox ) ;_ Fin de lambda ) ;_ Fin de vl-catch-all-apply ) ;_ Fin de vl-catch-all-error-p ) ;_ Fin de not (setq RIEN "FAUX") ) ;_ Fin de if (setq constituant_id (entnext constituant_id)) ) ;_ Fin de while (if (= RIEN "FAUX") (progn ;Coordonnées du premier constituant ayant une Gbb (setq maxi (vlax-safearray->list maxi)) (setq mini (vlax-safearray->list mini)) (setq Xmini (car mini)) (setq Ymini (cadr mini)) (setq Zmini (caddr mini)) (setq Xmaxi (car maxi)) (setq Ymaxi (cadr maxi)) (setq Zmaxi (caddr maxi)) ;Emprise du bloc (test l'emprise de chaque constituant et renvoie les X,Y et Z mini et maxi (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 ) ;_ Fin de vlax-ename->vla-object 'mini 'maxi ) ;_ Fin de vla-GetBoundingBox ) ;_ Fin de lambda ) ;_ Fin de vl-catch-all-apply ) ;_ Fin de vl-catch-all-error-p nil ) ;_ Fin de = (progn (vla-GetBoundingBox (vlax-ename->vla-object constituant_id) 'mini 'maxi ) ;_ Fin de vla-GetBoundingBox (setq maxi (vlax-safearray->list maxi)) (setq mini (vlax-safearray->list mini)) (if (< (car mini) Xmini) (setq Xmini (car mini)) ) ;_ Fin de if (if (< (cadr mini) Ymini) (setq Ymini (cadr mini)) ) ;_ Fin de if (if (< (caddr mini) Zmini) (setq Zmini (caddr mini)) ) ;_ Fin de if (if (> (car maxi) Xmaxi) (setq Xmaxi (car maxi)) ) ;_ Fin de if (if (> (cadr maxi) Ymaxi) (setq Ymaxi (cadr maxi)) ) ;_ Fin de if (if (> (caddr maxi) Zmaxi) (setq Zmaxi (caddr maxi)) ) ;_ Fin de if ) ;_ Fin de progn ) ;_ Fin de if (setq constituant_id (entnext constituant_id)) ) ;_ Fin de while ;********************************************************************************************************************************** ;ETAPE 1 : CREATION DU NOUVEAU BLOC (si le point d'insertion est hors de l'emprise) ;********************************************************************************************************************************** (if (or (< bloc_X Xmini) (< bloc_Y Ymini) (< bloc_Z Zmini) (> bloc_X Xmaxi) (> bloc_Y Ymaxi) (> bloc_Z Zmaxi) ) ;_ Fin de or (setq redef "oui") (setq redef "non") ) ;_ Fin de if (if (= redef "oui") (progn ;calcul du nouveau point du bloc (setq Xnew (+ (- (/ (+ Xmaxi Xmini) 2) bloc_X) bloc_X ) ;_ Fin de + ) ;_ Fin de setq (setq Ynew (+ (- (/ (+ Ymaxi Ymini) 2) bloc_Y) bloc_Y ) ;_ Fin de + ) ;_ Fin de setq (setq Znew (+ (- (/ (+ Zmaxi Zmini) 2) bloc_Z) bloc_Z ) ;_ Fin de + ) ;_ Fin de setq (setq bloc_pi-new (list Xnew Ynew Znew)) ;Recherche du nom pour le nouveau bloc (suppression éventuel de *) (if (/= (substr bloc_nom 1 1) "*") (progn (setq i 1) (while (tblsearch "block" (setq nouveau_bloc_nom (strcat bloc_nom "_old_" (itoa i) ) ;_ Fin de strcat ) ;_ Fin de setq ) ;_ Fin de tblsearch (setq i (+ 1 i)) ) ;_ Fin de while ) ;_ Fin de progn (progn (setq nouveau_bloc_nom (strcat "`" bloc_nom) ) ;_ Fin de setq (setq bloc_nom (strcat (substr bloc_nom 2 (strlen bloc_nom) ) ;_ Fin de substr ) ;_ Fin de strcat ) ;_ Fin de setq (if (tblsearch "block" bloc_nom) (progn (setq i 1) (while (tblsearch "block" (strcat bloc_nom "_redef_" (itoa (+ i 1)) ) ;_ Fin de strcat ;_ Fin de setq ) ;_ Fin de tblsearch (setq i (+ 1 i)) ) ;_ Fin de while (setq bloc_nom (strcat bloc_nom "_redef_" (itoa (+ i 1)) ) ;_ Fin de strcat ) ;_ Fin de setq ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de progn ) ;_ Fin de if ;le bloc est renommé (s'il n'est pas anonyme) (if (not (= (substr (cdr (assoc 2 bloc_prop)) 1 1) "*" ) ;_ Fin de = ) ;_ Fin de not (command "_-rename" "BL" bloc_nom nouveau_bloc_nom ) ;_ Fin de command ) ;_ Fin de if ;Détermination de la valeur du drapeau 70 (if (/= (logand (cdr (assoc 70 bloc_prop)) 1) 0) (setq typ (- (cdr (assoc 70 bloc_prop)) 1)) (setq typ (cdr (assoc 70 bloc_prop))) ) ;_ Fin de if ;le nouveau bloc est créé (dans la table) avec l'ancien nom du bloc et les nouvelles coordonnées (entmake (list (cons 0 "block") (cons 2 bloc_nom) (cons 70 typ) ;(assoc 4 bloc_prop) (cons 10 bloc_pi-new) ) ;_ Fin de list ) ;_ Fin de entmake ;les constituants de l'ancien bloc sont dupliqués dans le nouveau bloc (setq constituant_id (cdr (assoc -2 bloc_prop))) (while constituant_id (setq constituant (entget constituant_id)) (setq constituant (vl-remove (assoc -1 constituant) constituant ) ;_ Fin de vl-remove ) ;_ Fin de setq ;identifiant unique généré par autocad (setq constituant (vl-remove (assoc 5 constituant) constituant ) ;_ Fin de vl-remove ) ;_ Fin de setq ;identifiant unique généré par autocad (setq constituant (vl-remove (assoc 330 constituant) constituant ) ;_ Fin de vl-remove ) ;_ Fin de setq ;identifiant unique généré par autocad (entmake constituant) (setq constituant_id (entnext constituant_id) ) ;_ Fin de setq ) ;_ Fin de while (entmake '((0 . "endblk"))) ;********************************************************************************************************************************** ;ETAPE 2 : REMPLACEMENT DES BLOCS DANS LE DESSIN ;********************************************************************************************************************************** (setq bloc1 (ssget "X" (list (cons 2 nouveau_bloc_nom)) ) ;_ Fin de ssget ) ;_ Fin de setq (if bloc1 (progn (setq dist_X (- (/ (+ Xmaxi Xmini) 2) bloc_X) ) ;_ Fin de setq (setq dist_Y (- (/ (+ Ymaxi Ymini) 2) bloc_Y) ) ;_ Fin de setq (setq dist_Z (- (/ (+ Zmaxi Zmini) 2) bloc_Z) ) ;_ Fin de setq (setq jeu (ssget "x" (list (cons 2 nouveau_bloc_nom)) ) ;_ Fin de ssget ) ;_ Fin de setq (setq n 0) (repeat (sslength jeu) (setq bloc_traité (ssname jeu n)) (setq prop_bloc_traité (entget bloc_traité) ) ;_ Fin de setq ;récupération des échelles X Y Z du bloc traité (setq ech_X_bloc_traité (cdr (assoc 41 (entget bloc_traité ) ;_ Fin de entget ) ;_ Fin de assoc ) ;_ Fin de cdr ) ;_ Fin de setq (setq ech_Y_bloc_traité (cdr (assoc 42 (entget bloc_traité ) ;_ Fin de entget ) ;_ Fin de assoc ) ;_ Fin de cdr ) ;_ Fin de setq (setq ech_Z_bloc_traité (cdr (assoc 43 (entget bloc_traité ) ;_ Fin de entget ) ;_ Fin de assoc ) ;_ Fin de cdr ) ;_ Fin de setq ;récupération des coordonnées d'insertion du bloc traité (setq pi_bloc_traité (cdr (assoc 10 (entget bloc_traité ) ;_ Fin de entget ) ;_ Fin de assoc ) ;_ Fin de cdr ) ;_ Fin de setq (setq pi_X_bloc_traité (car pi_bloc_traité) ) ;_ Fin de setq (setq pi_Y_bloc_traité (car (cdr pi_bloc_traité ) ;_ Fin de cdr ) ;_ Fin de car ) ;_ Fin de setq (setq pi_Z_bloc_traité (car (cdr (cdr pi_bloc_traité ) ;_ Fin de cdr ) ;_ Fin de cdr ) ;_ Fin de car ) ;_ Fin de setq ;Nouvelles valeurs d'insertion ;étape 1 : calcul du point avant rotation (setq pi_X_nouveau_bloc_traité (+ (* ech_X_bloc_traité dist_X ) ;_ Fin de * pi_X_bloc_traité ) ;_ Fin de + ) ;_ Fin de setq (setq pi_Y_nouveau_bloc_traité (+ (* ech_Y_bloc_traité dist_Y ) ;_ Fin de * pi_Y_bloc_traité ) ;_ Fin de + ) ;_ Fin de setq (setq pi_Z_nouveau_bloc_traité (+ (* ech_Z_bloc_traité dist_Z ) ;_ Fin de * pi_Z_bloc_traité ) ;_ Fin de + ) ;_ Fin de setq (setq pi_nouveau_bloc_traité (list pi_X_nouveau_bloc_traité pi_Y_nouveau_bloc_traité pi_Z_nouveau_bloc_traité ) ;_ Fin de list ) ;_ Fin de setq ;étape 2 : calcul du point avec rotation (setq ang_bloc_traité (cdr (assoc 50 (entget bloc_traité ) ;_ Fin de entget ) ;_ Fin de assoc ) ;_ Fin de cdr ) ;_ Fin de setq ;rotation du bloc traité (setq dist (distance pi_nouveau_bloc_traité pi_bloc_traité ) ;_ Fin de distance ) ;_ Fin de setq (setq ang (angle pi_bloc_traité pi_nouveau_bloc_traité ) ;_ Fin de angle ) ;_ Fin de setq (setq pi_nouveau_bloc_traité (polar pi_bloc_traité (+ ang_bloc_traité ang ) ;_ Fin de + dist ) ;_ Fin de polar ) ;_ Fin de setq ;mise à jour du bloc en cours (setq prop_bloc_traité (subst (cons 2 bloc_nom ) ;_ Fin de cons (assoc 2 prop_bloc_traité ) ;_ Fin de assoc prop_bloc_traité ) ;_ Fin de subst ) ;_ Fin de setq (setq prop_bloc_traité (subst (cons 10 pi_nouveau_bloc_traité ) ;_ Fin de cons (assoc 10 prop_bloc_traité ) ;_ Fin de assoc prop_bloc_traité ) ;_ Fin de subst ) ;_ Fin de setq (entmod prop_bloc_traité) (setq n (+ 1 n)) ) ;repeat ) ;progn bloc1 ) ;_ Fin de if ;if bloc1 (=tant qu'il y a des blocs à remplacer dans le dessin) ) ;progn REDEF=OUI ) ;if REDEF=OUI (setq bloc_prop (tblnext "block")) ) ;progn RIEN=FAUX (setq bloc_prop (tblnext "block")) ) ;if RIEN=FAUX ) ;progn not référence externe (setq bloc_prop (tblnext "block")) ) ;if not référence externe ) ;while block (if (= "O" purger) (command "-purger" "BL" "*" "n") );_ Fin de if (setvar "Osmode" OSMOLD) (setvar "cmdecho" cmdechOLD) (princ) ) ;defun [Edité le 29/4/2005 par LUDWIG] [Edité le 14/9/2005 par LUDWIG]
  19. ARGH oui ça marche... J'ai bataillé un bon moment avant de comprendre que l'apostrophe fermante, ce n'est pas celle sur la touche 4 du clavier mais celle sur la touche 7 (alt Gr + 7). Merci
  20. Je n'arrive même pas à sélectionner un bloc anonyme particulier avec (ssget "X" '((2 . "*U9"))) pourtant ce bloc a bien un nom qui apparaît dans les propriétés...
  21. LUDWIG

    gestion d\'erreur

    C'est vrai que j'aurais été moins embetté en insérant le bloc dans le dessin, en faisant la gbb puis en le supprimant... Mais je ne vois pas en quoi (tblobjname "block" "nomdubloc") peut m'aider ?
  22. Bonjour, Sauriez-vous donner un nom aux blocs anonymes ? J'ai essayé : [b] Si le bit 1 du drapeau 70 a la valeur 1, le passe à 0[/b] (if (/= (logand (cdr(assoc 70 (tblsearch "block" bloc_nom))) 1) 0) (setq bloc_prop (subst (cons 70 (-(cdr(assoc 70 (tblsearch "block" bloc_nom)))1)) (assoc 70 bloc_prop) bloc_prop))) [i] 70 Drapeaux par type de bloc (valeurs binaires pouvant être combinées) : 1 = Ce bloc anonyme est généré par une opération de hachage, de cotation associative ou tout autre type d'opération, ou par une application[/i] [b] Si le nom du bloc commence par *, le renomme sans *[/b] (if (= (substr bloc_nom 1 1) "*") (setq bloc_prop (subst (cons 2 (substr bloc_nom 2 (strlen bloc_nom))) (assoc 2 bloc_prop) bloc_prop))) (entmod bloc_prop) Mais les blocs de mon dessin restent anonymes ! Pourriez-vous m'aider ? Merci d'avance. [Edité le 28/4/2005 par LUDWIG]
  23. LUDWIG

    Je boucle !

    Mon erreur n'était pas dans ce bout de code ! :red: Désolé
  24. Bonjour, J'ai un problème sur Autodesk Architectural Desktop. :mad: :o J'ai des fichiers avec des erreurs de murs ("avertissements")signalées par des avertissements. Je corrige toutes les erreurs, j'enregistre, je ferme, je rouvre : encore des erreurs. :o J'ai aussi des erreurs qui n'apparaisse qu'en vue 3D et pas en 2D. :o J'ai enfin des erreurs qui n'apparaissent que qu'en j'insère mon dessin en tant que bloc dans un autre dessin, alors qu'elles n'y sont pas quand je l'ouvre simplement. Si quelqu'un a constaté ces comportements étranges et a des solutions, je suis tout ouïe. Merci d'avance. :D
  25. LUDWIG

    Je boucle !

    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...
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité