-
Compteur de contenus
1 489 -
Inscription
-
Dernière visite
-
Jours gagnés
19
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par zebulon_
-
sauver un plan avec 3 layouts...en 3 plans différents
zebulon_ a répondu à un(e) sujet de bono05 dans AutoCAD 2010
Bonjour, le lien complet http://www.neufgiga.com/n/50-17/share/LNK85364ad82ff1cf6e4/ sinon, si ça ne marche toujours pas, envoie-moi un MP avec ton adresse mail et je te l'envoie directement Amicalement Vincent -
sauver un plan avec 3 layouts...en 3 plans différents
zebulon_ a répondu à un(e) sujet de bono05 dans AutoCAD 2010
mon truc c'est un site ftp. Il ne faut pas être inscrit. Comment ça marche ? Tu cliques sur le lien ici Puis tu cliques sur le dossier "Mes lisp" pour qu'il s'ouvre Tu coches le fichier "SplitLayout.lsp" et tu cliques sur "Télécharger" puis tu l'enregistres sur ton disque. Voilà en gros... Amicalement Vincent -
sauver un plan avec 3 layouts...en 3 plans différents
zebulon_ a répondu à un(e) sujet de bono05 dans AutoCAD 2010
Pour Philous2, tu dois avoir escamoté une partie du fichier en faisant le copier/coller. Je l'ai déposé ici Par ailleurs, j'ai changé (setq RemoveList (vl-remove-if '(lambda(x) (= x LAY)) LLAY)) par (setq RemoveList (vl-remove LAY LLAY)) qui fait la même chose en plus simple. Amicalement Vincent -
sauver un plan avec 3 layouts...en 3 plans différents
zebulon_ a répondu à un(e) sujet de bono05 dans AutoCAD 2010
Bonjour, je ne suis pas un spécialiste du script, mais il pourrait ressembler à quelque chose du genre _open "C:\toto\titi\tata1.dwg" (load "splitlayout") splitlayout _close _open "C:\toto\titi\tata2.dwg" (load "splitlayout") splitlayout _close Les spécialistes du script, et plus particulièrement de SAS, pourront mieux t'aider que moi. Amicalement Vincent -
copie d\'entites d\'une presentations a d\'autres presentations a la volée
zebulon_ a répondu à un(e) sujet de PHILPHIL dans Routines LISP
Bonjour, j'avais essayé de soumettre à entmake (voir message plus haut) et cela marche très bien pour des entités simples, mais pour des objets plus complexes comme des blocs avec des attributs cela se plante. C'est pour ça que je suis passé par le presse papier, faute d'avoir trouvé un autre moyen. D'ailleurs, quand je fait cette opération de duplication entre différentes présentation "à la main", j'utilise aussi le copier/coller. Comme le suppose PHILPHIL, il doit y avoir un moyen plus rapide que cela avec vlisp avec une méthode de copie ou quelque chose du genre. A voir si quelqu'un peut éclairer notre lanterne Amicalement Vincent -
copie d\'entites d\'une presentations a d\'autres presentations a la volée
zebulon_ a répondu à un(e) sujet de PHILPHIL dans Routines LISP
J'ai essayé de faire un entmod sur le code dxf 410, mais cela ne fonctionne pas (setq a (subst (cons 410 "Présentation2") (assoc 410 a) a)) me donne Le code 410 est bien changé avec un nom de présentation qui existe, mais quand je fais un (entmod a), rien ne se passe. Qu'est ce que je fais de travers ? Amicalement Vincent -
copie d\'entites d\'une presentations a d\'autres presentations a la volée
zebulon_ a répondu à un(e) sujet de PHILPHIL dans Routines LISP
vl-remove, bien sûr... J'avais essayé en faisant un entmake après avoir modifié le code dxf 410 et ça marchait super bien, sauf pour les entités complexes. Tu proposes une copie d'abord puis un changement du code dxf. C'est vrai que c'est pas pareil et je m'en vais essayer. Amicalement Vincent -
Bonjour, mon problème de départ est de transformer la chaine "1 2" en une liste (1 2). J'ai regardé dans les vl-string, mais je n'ai rien trouvé de concluant (j'ai peut-être mal regardé) ;) Du coup je me suis embarqué à faire une itération, qui trouve les espaces dans le texte et qui rajoute le chiffre à une liste. J'ai trouvé cela peu performant et j'ai poussé plus loin ma recherche en étudiant les fonctions qui se rapportent aux textes. Et je me suis intéressé à la fonction (read chaine), qui retourne la première liste ou le premier atome obtenu de chaine (read "1 2") renvoie l'entier 1 (read "(1 2)") revoie la liste (1 2) Et voilà ! il suffit de rajouter des "(" et ")" au texte ! donc : (setq TXT "1 2") (read (strcat "(" TXT ")")) et le tour est joué ! Bon, c'est peut être un truc qui est connu comme le loup blanc... Mais comme je viens de le découvrir, je m'empresse de partager mon enthousiasme. Amicalement Vincent
-
copie d\'entites d\'une presentations a d\'autres presentations a la volée
zebulon_ a répondu à un(e) sujet de PHILPHIL dans Routines LISP
Bonjour, le fichier DupObjPres.dcl DupObj : dialog { label = "Dupliquer Objets Présentations"; : button { label = "Sélectionner objets <"; key = DupObjSS; is_default = true; } : list_box { label = "Présentations"; key = DupObjPre; multiple_select = true; } ok_cancel; } le fichier DupObjPres.lsp (defun do_accpet_dupobj () (if (= ss nil) (alert "Aucun objet sélectionné") (if (= LPRE "") (alert "Aucune présentation sélectionnée") (done_dialog 2) ) ) ) (defun c:DupObjPres (/ LLAY LPRE dcl_id what_next ss CURTAB PRE NOM_PRE) (vl-load-com) (if (zerop (getvar "TILEMODE")) (progn (setq LLAY (layoutlist)) (setq LPRE "") ;; supprimer le layout courant de la liste (setq LLAY (vl-remove-if '(lambda(x) (= x (getvar "CTAB"))) LLAY)) ;ouverture de la boîte de dialogue (setq dcl_id (load_dialog "DupObjPres.dcl")) (setq what_next 5) (while (< 2 what_next) (if (not (new_dialog "DupObj" dcl_id)) (exit)) (start_list "DupObjPre") (mapcar 'add_list LLAY) (end_list) (set_tile "DupObjPre" LPRE) (action_tile "DupObjPre" "(setq LPRE $value)") (action_tile "DupObjSS" "(done_dialog 5)") (action_tile "accept" "(do_accpet_dupobj)") (action_tile "cancel" "(done_dialog 0)") (setq What_next (start_dialog)) (cond ((= what_next 5) (setq ss (ssget))) ) ) ; while (if (= What_next 2) (progn (command "_CopyBase" "_non" '(0 0) ss "") (setq CURTAB (getvar "CTAB")) (setq LPRE (read (strcat "(" LPRE ")"))) (foreach PRE LPRE (setq NOM_PRE (nth PRE LLAY)) (setvar "CTAB" NOM_PRE) (command "_PSPACE") (command "_PasteClip" "_non" '(0 0)) ) (setvar "CTAB" CURTAB) ) ) ) (alert "Uniquement en espace papier") ) (princ) ) en passant par des copier/coller Amicalement Vincent -
sauver un plan avec 3 layouts...en 3 plans différents
zebulon_ a répondu à un(e) sujet de bono05 dans AutoCAD 2010
géniaux, au pluriel, comme le sujet, c'est mieux ;) On peut surement mieux faire. A commencer par rajouter une CMDECHO à off, puis remplacer les (command... ) par son équivalent en VLISP. Amicalement Vincent -
Re, il faut regarder la documentation fournie dans l'aide de l'éditeur lisp concernant ces fonctions. En effet, on peut indiquer le mode (degrés, degrés/mn/sc, etc...) afin de les utiliser à bon escient. (angtos (/ pi 2) 0 4) retourne "90" le 0 pour le mode degrés et le 4 pour la précision. Si on veut "90.0000", il faut d'abord régler la variable DIMZIN à 0 (comme pour la fonction rtos) (angtos (/ pi 2) 1 4) retourne 90d0'0" en degré, minutes et secondes Et la fonction angtof et complémentaire à la précédente (angtof "90d0'0\"" 1) retourne 1.5708 en radians. Le problème qui se pose dans ton lisp est que la chaine analysée par angtof doit être formatée correctement (voir ci dessus), à savoir le d pour les degrés, le ' pour les minutes et le " pour les secondes et il manque l'indication du mode (mode=1 pour des degrés,minutes,secondes) Voilà, n'hésite pas à consulter l'aide de ces fonctions. Tu y trouveras toute les valeurs de mode ainsi que les formats de chaines qui leur sont compatibles. Amicalement Vincent
-
Bonjour, regarde les fonctions angtof et angtos Amicalement Vincent
-
sauver un plan avec 3 layouts...en 3 plans différents
zebulon_ a répondu à un(e) sujet de bono05 dans AutoCAD 2010
Bonjour, (defun c:SplitLayout () (vl-load-com) (setq PREFIX (getvar "DWGPREFIX")) (setq NOM (getvar "DWGNAME")) (setq LLAY (layoutlist)) (foreach LAY LLAY (command "_undo" "_begin") (setq RemoveList (vl-remove-if '(lambda(x) (= x LAY)) LLAY)) (foreach RLAY RemoveList (command "_layout" "_d" RLAY) ) (command "_saveas" "" (strcat PREFIX LAY "-" NOM ) ) (command "_undo" "_end") (command "_undo" "1") ) (princ) ) un petit truc vite fait, avec que des command et en faisant joujou avec les undo Amicalement Vincent -
[Résolu] grosse différence objet <>présentation
zebulon_ a répondu à un(e) sujet de mourin dans AutoCAD LT 2009
Bonjour, je fais comme rebcao, parce que je suis dans le même cas. C'est à dire que j'ai souvent des présentations avec des fenêtres à différentes échelles. Le PSLTSCALE à 1 s'impose donc pour moi et je joue sur la valeur de l'ECHLTP, comme l'indique rebcao également. Sinon cela devient effectivement vite super moche. Pour des gens qui ne sont pas dans ce cas et qui ne font qu'une seule fenêtre par présentation, il est peut être plus simple de mettre PSLTSCALE à 0. C'est souvent le cas pour les géomètres ou les gens qui font du tracer routier. Bien souvent, ces derniers ne font pas de présentation du tout et mettent le cartouche et le cadre directement dans l'espace objet. J'en ai aussi vu qui jouaient avec les échelles de type de lignes dans les propriétés de chaque objet. C'est, à mon avis, à proscrire puisque cela consiste à "forcer" l'échelle de type de ligne. Ces objets "forcés" auront une échelle ECHLTP x Echelle de type de ligne. Je trouve que c'est compliqué à gérer. Un point qui est primordial quand on joue avec les types de lignes, c'est de toujours créer ses types de lignes avec le même fichier .lin. Soit AutoCAD.lin, soit acadiso.lin, mais surtout pas tantôt l'un tantôt l'autre. Je crois même que cela se faisait avant Amicalement Vincent [Edité le 1/10/2009 par zebulon_] -
Bonjour, gc:mafonction() le gc sert à signer la fonction. En l'occurrence, l'auteur à mis ses initiales devant la fonction qu'il a créée. Ceci afin d'éviter le plus possible que 2 fonctions différentes de 2 auteurs différents portent le même nom. Amicalement Vincent
-
cotation boite [résolu]
zebulon_ a répondu à un(e) sujet de pros2i dans Pour aller plus loin en LISP
c'était une blague ;) amicalement Vincent -
cotation boite [résolu]
zebulon_ a répondu à un(e) sujet de pros2i dans Pour aller plus loin en LISP
Confucius est né le 21 septembre 551 av. J.-C. à Zou et mort le 11 mai 479 av. J.-C. à Qufu. Il est le personnage historique ayant le plus marqué la civilisation chinoise. Considéré comme le premier « éducateur » de la Chine, son enseignement a donné naissance au confucianisme, une doctrine politique et sociale qui a été érigée en "religion d'État" dès la dynastie Han et qui ne fut officiellement bannie qu'au début du XXe siècle. Né à Zou près de Qufu dans l’actuelle province du Shandong, il est généralement appelé Kǒngzǐ ou Kǒng Fūzǐ par les Chinois, ce qui signifie « Maître Kong » et qui a été latinisé en "Confucius" par les Jésuites. Amicalement Zebulon Fūzǐ -
cotation boite [résolu]
zebulon_ a répondu à un(e) sujet de pros2i dans Pour aller plus loin en LISP
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson, Confucius -
cotation boite [résolu]
zebulon_ a répondu à un(e) sujet de pros2i dans Pour aller plus loin en LISP
Bonjour, Donc, si on fixe DIMGAP = -1, les cotes sont entourées d'une boîte. Pour trouver ce genre de différences, il est intéressant d'utiliser le gestionnaire de style de cotes. J'ai créé un style de cote sans boîte, puis à partir de celui-ci j'ai créé un autre style avec une boîte. Ensuite, j'ai cliqué sur le bouton "COMPARER" et Autocad filtre la ou les variables différentes. http://img44.imageshack.us/img44/6223/ddim.jpg Après, il suffit de regarder dans l'aide au chapitre DIMGAP En VLISP, on peut changer une cote existante avec (vla-put-TextGap obj -1) Amicalement Vincent [Edité le 11/9/2009 par zebulon_] -
Euh... ouais, c'est un peu flou pour moi également. Il y a tout d'abord que la liste des noms est toujours selon l'ordre alphabétique. Il y a aussi que le gestionnaire de styles visuels en affiche 5 par défaut, un 6ème si on en rajoute un perso, mais il y en a beaucoup plus dans le dictionnaire. (defun c:vstyl () (setq dics (vla-get-dictionaries (vla-get-Activedocument (vlax-get-acad-object)))) (setq dic (vla-item dics "ACAD_VISUALSTYLE")) (setq LSTY nil) (vlax-for item dic (setq NOM (vla-getname dic item)) (setq LSTY (cons NOM LSTY)) ) (print (reverse LSTY)) (princ) ) me donne la liste ("2dWireframe" "3D Hidden" "3dWireframe" "Basic" "Brighten" "ColorChange" "Conceptual" "Dim" "EdgeColorOff" "Facepattern" "Flat" "FlatWithEdges" "Gouraud" "GouraudWithEdges" "JitterOff" "Linepattern" "OverhangOff" "Realistic" "Thicken" "zzzz") qui compte 20 par défaut + 1 perso. Donc, bien plus que ce à quoi je m'attendais... Il y a peut être une table d'indexation quelque part ? Amicalement Vincent
-
Bonjour, du côté des dictionnaires ? (dictsearch (namedobjdict) "ACAD_VISUALSTYLE") Amicalement Vincent
-
Baisse de la TVA dans la restauration, l\'entourloupe à grande échelle
zebulon_ a répondu à un sujet dans Pause café
Bonjour, Pour ma part, le taux de TVA n'a que peu d'importance : n'ayant que des clients professionnels, ceux-ci peuvent récupérer leur TVA, tout comme moi dans le cadre de mon activité professionnelle. C'est d'ailleurs pour cela qu'entre professionnels, on ne parle qu'en HT. Ce n'est que quand le client final est un particulier que le TTC est important, puisque le particulier ne récupère... rien de l'administration fiscale. Je ne vous apprends sans doute rien, mais pour ma part il me sera facile de répercuter l'intégralité de la baisse de TVA sur la facture de mes clients, le jour ou la TVA passera à 5,5% dans mon secteur d'activité. La seule chose qui changera sera le montant de la TVA collectée (hé, oui ! je suis aussi collecteur d'impôts...) à rembourser au service des impôts des entreprises. Pour les restaurateurs, la TVA à 5,5% est une aubaine, forcément, puisque le client final est le plus souvent un particulier qui ne voit que le TTC. Dernièrement j'ai demandé à un restaurateur s'il avait ou allait baisser ses prix. Il m'a clairement répondu que non et que cela allait compenser le fait que cela fait 3 ans qu'il n'a pas pu augmenter ses prix. Mouais.... On est loin de l'argumentation officielle : baisse de prix pour le client, embauche de personnel etc... Bon d'accord, je n'ai qu'un seul exemple à citer : c'est un peu pauvre pour en faire une généralité. Mais, est-ce qu'un hôtelier-restaurateur est plus vertueux qu'un artisan du bâtiment, qui bénéficie d'un taux de TVA réduit (5,5%), depuis quelques années, pour les travaux réalisés dans les logements achevés depuis plus de deux ans ? Personnellement, je n'ai pas l'impression de payer mon plombier, mon peintre, mon électricien ... moins cher depuis la baisse de la TVA (qui reste, je crois, expérimentale : la grosse blague). C'est chaque année le même cirque : l'expérimentation prend fin officiellement le 31/12, mais vers le mois de juin-juillet, le président de la république annonce, lors d'un entretien avec le président de l'union professionnels des artisans, que cette expérimentation va se poursuivre l'année suivante. Jusqu'à quand cette expérimentation va se prolonger : les paris sont ouverts. ;) Amicalement Vincent -
Bonjour, j'ai fait quelque chose de similaire, mais mon lisp commence par dessiner une polyligne (on suppose qu'il n'y a que des segments droits). Ensuite, j'exploite les points de cette polyligne pour faire les congés de raccordement de 2 segments consécutifs, afin d'obtenir une nouvelle polyligne qui a l'apparence d'une nouille. Cette polyligne, je la décale à droite et à gauche d'une distance D/2 et je fais des petites lignes perpendiculaire tous les D. (defun list->variantArray (ptsList / arraySpace sArray) ; allocate space for an array of 2d points stored as doubles (setq arraySpace (vlax-make-safearray vlax-vbdouble ; element type (cons 0 (- (length ptsList) 1) ) ; array dimension ) ) (setq sArray (vlax-safearray-fill arraySpace ptsList)) ; return array variant (vlax-make-variant sArray) ) ;;; Clockwise-p ;;; Retourne T si les points p1 p2 et p3 tournent dans le sens horaire (defun clockwise-p (p1 p2 p3) (< (sin (- (angle p1 p3) (angle p1 p2))) -1e-14) ) (defun TAN (ALPHA) (/ (sin ALPHA) (cos ALPHA)) ) ;; ASIN et ACOS Retournent l'arc sinus ou l'arc cosinus du nombre, en radians (defun ASIN (num) (if (<= -1 num 1) (atan num (sqrt (- 1 (expt num 2)))) (princ "\nErreur: L'argument pour ASIN doit être compris entre -1 et 1" ) ) ) (defun ACOS (num) (if (<= -1 num 1) (atan (sqrt (- 1 (expt num 2))) num) (princ "\nErreur: L'argument pour ACOS doit être compris entre -1 et 1" ) ) ) ;;; angle par trois points (defun angle_3pts (som p1 p2 / d1 d2 d3) (setq d1 (distance som p1) d2 (distance som p2) d3 (distance p1 p2) ) (if (and (< 0 d1) (< 0 d2)) (acos (/ (+ (* d1 d1) (* d2 d2) (- (* d3 d3)) ) (* 2 d1 d2) ) ) ) ) ;;; ;;; lancer une commande autocad (defun mycmd (LCMD / CMD ETL LELEM RES OLDCMDECHO) (setq ETL (entlast)) (setq OLDCMDECHO (getvar "CMDECHO")) (setvar "CMDECHO" 1) (foreach CMD LCMD (command CMD) ) (while (not (zerop (getvar "cmdactive"))) (command pause) ) (setvar "CMDECHO" OLDCMDECHO) (setq LELEM nil) (if (not ETL) (setq ETL (entnext)) (setq ETL (entnext ETL)) ) (while ETL (setq LELEM (cons ETL LELEM)) (setq ETL (entnext ETL)) ) (setq RES LELEM) ) (defun getPolySegs (ent / entl p1 pt bulge seg ptlst) (cond (ent (setq entl (entget ent)) ;; save start point if polyline is closed (if (= (logand (cdr (assoc 70 entl)) 1) 1) (setq p1 (cdr (assoc 10 entl))) ) ;; run thru entity list to collect list of segments (while (setq entl (member (assoc 10 entl) entl)) ;; if segment then add to list (if (and pt bulge) (setq seg (list pt bulge)) ) ;; save next point and bulge (setq pt (cdr (assoc 10 entl)) bulge (cdr (assoc 42 entl)) ) ;; if segment is build then add last point to segment ;; and add segment to list (if seg (setq seg (append seg (list pt)) ptlst (cons seg ptlst)) ) ;; reduce list and clear temporary segment (setq entl (cdr entl) seg nil ) ) ) ) ;; if polyline is closed then add closing segment to list (if p1 (setq ptlst (cons (list pt bulge p1) ptlst))) ;; reverse and return list of segments (reverse ptlst) ) (defun do_flex1_main () (setq AcDoc (vla-get-activeDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) ;; récupérer les sommets de la polyligne (setq CHEMIN (getpolysegs e)) (setq NCHEMIN nil) (setq I 0) (repeat (- (length CHEMIN) 1) (setq seg1 (nth I CHEMIN)) (setq seg2 (nth (+ I 1) CHEMIN)) (mapcar 'set '(P1 bulge1 P2) seg1) (mapcar 'set '(P2 bulge2 P3) seg2) ;; congé de raccordement (SETQ L1 (DISTANCE P1 P2)) (SETQ L2 (DISTANCE P2 P3)) (SETQ L3 (MIN (/ L1 2) (/ L2 2))) (SETQ P8 (polar P2 (angle P2 P1) L3)) (SETQ P9 (polar P2 (angle P2 P3) L3)) (setq P10 (polar P8 (+ (angle P2 P1) (/ pi 2)) 1.00)) (setq P11 (polar P9 (+ (angle P2 P3) (/ pi 2)) 1.00)) (setq P0 (inters P8 P10 P9 P11 nil)) ;; calculer le bulge (if (clockwise-p P1 P2 P3) (setq ALPHA 1) (setq ALPHA -1) ) (setq bulge (* ALPHA (tan (* (angle_3pts P0 P8 P9) -0.25)))) ;; le bulge c'est la tangente du quart de l'angle inscrit (cond ((= I 0) (setq NCHEMIN (cons (list P1 0 P8) NCHEMIN)) ) ((> (distance OldP9 P8) 0.0001) (setq NCHEMIN (cons (list OldP9 0 P8) NCHEMIN)) ) ) (setq OldP9 P9) (setq NCHEMIN (cons (list P8 bulge P9) NCHEMIN)) (setq I (+ I 1)) ) (setq NCHEMIN (cons (list P9 0 P3) NCHEMIN)) (setq NCHEMIN (reverse NCHEMIN)) ;; tracer la nouvelle polyligne avec la liste NCHEMIN (setq I 0) (setq LPTS (caar NCHEMIN)) (setq LBULGES nil) (repeat (length NCHEMIN) (setq seg (nth I NCHEMIN)) (mapcar 'set '(P1 bulge P2) seg) (setq LPTS (append LPTS P2)) (setq LBULGES (append LBULGES (list bulge))) (setq I (+ I 1)) ) (setq pl (vla-addlightWeightPolyline space (list->variantArray LPTS))) ;; mettre à jour les arcs (setq I 0) (repeat (length LBULGES) (vla-setbulge pl I (nth I LBULGES)) (setq I (+ I 1)) ) ;; décaler la nouvelle polyligne à droite et à gauche (setq D (getreal "\nLargeur du chemin : ")) (vla-offset pl (/ D 2.0)) ; à droite (setq OFFSETD (vlax-ename->vla-object (entlast))) (vla-offset pl (/ D -2.0)) ; à gauche (setq OFFSETG (vlax-ename->vla-object (entlast))) ;; effacer la polyligne d'origine (vla-erase (vlax-ename->vla-object e)) ;; rajouter les un trait perpendiculaire tous les D (setq PK 0) (while (< PK (vlax-curve-getDistAtPoint pl (vlax-curve-getEndPoint pl))) (setq P0 (vlax-curve-getPointAtDist pl PK)) (setq P1 (vlax-curve-getClosestPointTo OFFSETD P0)) (setq P2 (vlax-curve-getClosestPointTo OFFSETG P0)) (vla-addLine Space (vlax-3d-point P1) (vlax-3d-point P2) ) (setq PK (+ PK D)) ) ;; tracer le dernier segment aussi (vla-addLine Space (vlax-3d-point (vlax-curve-getEndPoint OFFSETD)) (vlax-3d-point (vlax-curve-getEndPoint OFFSETG)) ) ;; supprimer la polyligne d'axe (vla-erase pl) ) (defun c:flex1 () (vl-load-com) (setq LELEM (mycmd '("_.pline"))) (if LELEM (progn (setq e (car LELEM)) (do_flex1_main) ) ) (princ) ) Espérant que ça peut aider... Amicalement Vincent
-
modifier \"XP\" dans chaque fenetre de presentations
zebulon_ a répondu à un(e) sujet de PHILPHIL dans Routines LISP
Bonjour, Une autre piste qui pourrait intéresser l'un ou l'autre : quand je fais une fenêtre en espace papier, j'écris le titre (Vue en Plan, Coupe A-A, Elévation etc...) sur l'espace papier et j'écris l'échelle à côté du titre. Vous allez me dire que si l'échelle écrite est un texte tout bête, il ne va pas réagir si l'échelle de la fenêtre est modifiée accidentellement. Et vous aurez raison. Mais si on utilise un champ qui affiche le CUSTOMSCALE, on écrit le texte pour indiquer l'échelle de la vue et en même temps on peut vérifier si c'est du 1:50 et pas du 1:49.5668. Là où c'est moins bien c'est que cela ne modifie rien. Cela informe, autant le concepteur que le lecteur du plan, et c'est tout mais c'est déjà pas mal. Pour le lisp qui suit, je pars du principe qu'on travaille en mm en espace papier. En espace objet, j'ai prévu soit le mètre soit le mm, mais il faut que les unités (INSUNITS) soient bien réglées. ;;; créer un style de texte (defun textsty (StyTxName H) (if (not (tblsearch "STYLE" StyTxName)) (command "_style" StyTxName "arial.ttf" H "1.00" "0.00" "_N" "_N") (command "_textstyle" StyTxName) ) ) ;;; créer un calque (defun calque (NewLayer ColLayer TlLayer) (if (not (tblsearch "LTYPE" TlLayer)) (command "_LINETYPE" "_L" TlLayer "acadiso" "") ) (if (not (tblsearch "LAYER" NewLayer)) (command "_layer" "_M" NewLayer "_CO" ColLayer "" "_LT" TlLayer "" "") (command "_LAYER" "_T" NewLayer "_ON" NewLayer "_S" NewLayer "") ) ) ;;Fonction qui nécessite une entité fenêtre et un point (defun LinkedFmult (ent pt / *paper-space* obj objID ip width str CLAYER txtent strech) ;;référence à l'espace papier (setq *paper-space* (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) (cond ((= (getvar "INSUNITS") 4) (setq strech ">%).CustomScale \\f \"1:%lu2%ct1%qf2816\">%") ) ((= (getvar "INSUNITS") 6) (setq strech ">%).CustomScale \\f \"1:%lu2%ct1%qf2816%ct9[1000]\">%") ) (T (alert "Unité non traitée")) ) ;;convertir entité en objet (setq obj (vlax-ename->vla-object ent) ;;Récupérer l'ID de l'objet objID (vla-get-objectid obj) ;;convertir le point ip (vlax-3D-Point pt) ;;définir la largeur du texte à 0 width 0.0 ;;définir la chaîne du champ str (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (rtos objID 2 0) strech ) ) (setq CLAYER (getvar "CLAYER")) ;; créer un calque "TXT30-1000" de couleur 7 (calque "TXT30-1000" "7" "Continuous") ;; créer un style de texte de 3mm de haut (textsty "TXT30-1000" "3") ;;Créer le MTEXT qui contient le champ (setq txent (vla-addMText *paper-space* ip width str) ) (vla-put-attachmentPoint txent acAttachmentPointBottomLeft) (vla-put-insertionPoint txent (vlax-3d-point pt)) (vla-put-height txent 3.0) (vla-put-width txent 0) (vla-put-rotation txent 0) (setvar "CLAYER" CLAYER) ) (defun c:txtech (/ ss e a pointins) (vl-load-com) (if (/= (getvar "TILEMODE") 0) (alert "Uniquement en espace papier !!!") (progn (while (not ss) (setq ss (ssget "_+.:e:s" '((0 . "VIEWPORT"))))) (setq e (ssname ss 0)) (setq POINTINS (getpoint "\nPoint d'insertion : ")) (if POINTINS (linkedfmult e POINTINS) ) ) ) (princ) ) Amicalement Vincent -
Bonjour, Je n'ai jamais trouvé la raison de ce plantage. Les versions supérieures que j'ai utilisé ou utilise depuis (2007 et 2010) ne présentent pas ce défaut. Bon courage Amicalement Vincent
