Aller au contenu

bonuscad

Membres
  • Compteur de contenus

    5 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    56

Tout ce qui a été posté par bonuscad

  1. Je vous remercie tout deux, mais je crois que vous n'avez saisie ma demande. Pour imager, imaginez que je sélectionne un objet, si celui-ci à servir pour construire un champ dynamique, je voudrais que ce champ soit sélectionné AUSSI (un peu à la façon qu'un groupe) Je cherche toujours... Pour l'instant je suis parti dans cette direction (bonne , pas bonne !) (setq vla_obj (vlax-ename->vla-object (car (entsel)))) (if (eq (vlax-get-property vla_obj 'HasExtensionDictionary) ':vlax-true) (setq vla_dict (vla-GetExtensionDictionary vla_obj) hand (vlax-get-property (vla-GetObject vla_dict "SURF2") 'Handle) ) ) mais un (entget (handent hand)) ne me retourne pas le résultat escompté :( j'ai l'impression de tourner en rond dans ces dictionnaires
  2. Bonjour, Suite à cette demande à laquelle j'ai apporté une solution. Mais celle ci ne me convient pas, car pas vraiment fiable Ce que je voudrais plutôt réaliser: C'est pouvoir, lors d'une sélection d'objet, si celui ci a été utilisé pour réaliser un champ dynamique (donc l'ID de l'objet a été utilisé pour réaliser le lien avec le Mtext) ajouter par exemple avec (ssadd) automatiquement ce Mtext à la sélection. Je suis un peu perdu avec le dictionnaire ACAD_FIELD. Donc pour résumer, obtenir le (handle) de l'entité MText si celui contient l'ID d'objet de l'entité sélectionnée. J'ai remarqué aussi que (entmod) sur le code DXF (1 . "string" ) n'a aucun effet si un champ (field) a été utilisé. Comment dés lors mettre à jour ce code DXF si une autre chaine (autre que le champ) fait partie de la définition. J'espère pouvoir obtenir une réponse au moins à ma première question. Merci.
  3. Pour changer en fonction permanente, tu substitue: ((lambda ( / .....) ..... )) en (defun c:MACOMMANDE ( / ....) .....) Note bien que j'ai enlever une paire de parenthèses qui étaient affectée à (lambda). Lambda est une fonction anonyme qui ne s'exécute qu'une seule fois lors de son chargement. Après son exécution elle n'existe plus en mémoire au contraire d'une fonction (defun).
  4. Un bout de code qui devrait te permettre de changer une affectation déjà effectuée, ou créer une affectation à une polyligne déjà dessiné sans affectation. Pour le tableau, le plus simple est de le refaire... Le code (pas trop testé, je te laisse choisir le nom de la fonction à la place de (lambda) ) ((lambda ( / js obj vla_obj obj_id AcDoc Space js_mt n en pt_ins nw_obj) (princ "\nSélectionner une polyligne pour une nouvelle affectation.") (while (null (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE"))))) (princ "\nCe n'est pas un objet valable!") ) (setq obj (ssname js 0) vla_obj (vlax-ename->vla-object obj) obj_id (vlax-get-property vla_obj 'ObjectID) AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (cond ((null (tblsearch "LAYER" "Id-Surfaces")) (vlax-put (vla-add (vla-get-layers AcDoc) "Id-Surfaces") 'color 96) ) ) (cond ((null (tblsearch "STYLE" "Romand20")) (setq nw_style (vla-add (vla-get-textstyles AcDoc) "Romand20")) (vlax-put nw_style 'fontfile "romand.shx") (vlax-put nw_style 'height 0.0) (vlax-put nw_style 'obliqueangle (/ (* 15.0 pi) 180)) (vlax-put nw_style 'width 1.0) (vlax-put nw_style 'textgenerationflag 0.0) ) ) (if (vlax-ldata-get vla_obj "SURF2") (setq js_mt (ssget "_X" (list '(0 . "MTEXT") (cons 1 (strcat (vlax-ldata-get vla_obj "SURF2") "*"))))) ) (vlax-ldata-put vla_obj "SURF2" (getstring T "\nNom du Local : ")) (if js_mt (setq n (sslength js_mt)) (setq n 1)) (repeat n (if js_mt (progn (setq pt_ins (trans (cdr (assoc 10 (entget (setq en (ssname js_mt (setq n (1- n))))))) 0 1)) (entdel en) ) (progn (initget 9) (setq pt_ins (getpoint "\nPoint d'insertion du champ: ")) ) ) (setq nw_obj (vla-addMtext Space (vlax-3d-point (trans pt_ins 1 0)) 0.0 (strcat (vlax-ldata-get vla_obj "SURF2") "\\P%<\\AcObjProp.16.2 Object(%<\\_ObjId " (itoa obj_id) ">%).Area \\f \"%lu2%pr2%ps[,²]\">%" ) ) ) (vlax-put nw_obj 'AttachmentPoint 5) (vlax-put nw_obj 'Height 2.0) (vlax-put nw_obj 'DrawingDirection 5) (vlax-put nw_obj 'InsertionPoint (trans pt_ins 1 0)) (vlax-put nw_obj 'StyleName "Romand20") (vlax-put nw_obj 'Layer "Id-Surfaces") ) ))
  5. Oui. avec (vlax-ldata-put (vlax-ename->vla-object (car (entsel))) "SURF2" (getstring T "\nNom du Local : ")) tu peux mettre à jour la donnée dans ta polyligne. Tu efface le tableau et tu le recréer (c'est rapide), il prendra les nouvelles affectations. Pour les surfaces inscrites dans les polylignes, il faudrait écrire un p'tit lisp qui mette à jour. Je te laisse chercher un peu...
  6. Ma suggestion venait surtout pour faire un tableau par la suite. Très bien, alors je te propose ce qui suit et libre à toi de modifier Le 1er code (defun c:surf2 ( / obj AcDoc Space nw_style vla_obj pt) (command "_.pline" (while (not (zerop (getvar "cmdactive"))) (command pause) ) ) (setq obj (entlast) AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (cond ((null (tblsearch "LAYER" "Id-Surfaces")) (vlax-put (vla-add (vla-get-layers AcDoc) "Id-Surfaces") 'color 96) ) ) (cond ((null (tblsearch "STYLE" "Romand20")) (setq nw_style (vla-add (vla-get-textstyles AcDoc) "Romand20")) (vlax-put nw_style 'fontfile "romand.shx") (vlax-put nw_style 'height 0.0) (vlax-put nw_style 'obliqueangle (/ (* 15.0 pi) 180)) (vlax-put nw_style 'width 1.0) (vlax-put nw_style 'textgenerationflag 0.0) ) ) (vlax-ldata-put (setq vla_obj (vlax-ename->vla-object obj)) "SURF2" (getstring T "\nNom du Local : ")) (initget 9) (setq pt (getpoint "\nPoint d'insertion du champ: ")) (initget 1) (setq nw_obj (vla-addMtext Space (vlax-3d-point (trans pt 1 0)) 0.0 (strcat (vlax-ldata-get vla_obj "SURF2") "\\P%<\\AcObjProp.16.2 Object(%<\\_ObjId " (itoa (vla-get-ObjectID vla_obj)) ">%).Area \\f \"%lu2%pr2%ps[,²]\">%" ) ) ) (vlax-put nw_obj 'AttachmentPoint 5) (vlax-put nw_obj 'Height 2.0) (vlax-put nw_obj 'DrawingDirection 5) (vlax-put nw_obj 'InsertionPoint (trans pt 1 0)) (vlax-put nw_obj 'StyleName "Romand20") (vlax-put nw_obj 'Layer "Id-Surfaces") (prin1) ) Et le 2ème code (ne prend que les polylignes de ta sélection qui ont des ldata, pas de risque d'erreurs) (defun c:recap_surf2 ( / js js_sel n obj vla_obj oldim oldlay AcDoc Space nw_style ins_pt_cell h_t w_c ename_cell n_row n_column) (setq js (ssget '((0 . "LWPOLYLINE")))) (setq js_sel (ssadd)) (repeat (setq n (sslength js)) (setq obj (ssname js (setq n (1- n)))) (if (vlax-ldata-get (setq vla_obj (vlax-ename->vla-object obj)) "SURF2") (ssadd obj js_sel) ) ) (cond (js_sel (setq oldim (getvar "dimzin") oldlay (getvar "clayer") ) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (cond ((null (tblsearch "LAYER" "Tableaux-Métrés")) (vla-add (vla-get-layers AcDoc) "Tableaux-Métrés") ) ) (cond ((null (tblsearch "STYLE" "Romand20")) (setq nw_style (vla-add (vla-get-textstyles AcDoc) "Romand20")) (vlax-put nw_style 'fontfile "romand.shx") (vlax-put nw_style 'height 0.0) (vlax-put nw_style 'obliqueangle (/ (* 15.0 pi) 180)) (vlax-put nw_style 'width 1.0) (vlax-put nw_style 'textgenerationflag 0.0) ) ) (setvar "dimzin" 0) (setvar "clayer" "Tableaux-Métrés") (initget 9) (setq ins_pt_cell (getpoint "\nPoint d'insertion haut gauche du tableau: ")) (initget 6) (setq h_t (getdist ins_pt_cell (strcat "\nHauteur du texte <" (rtos (getvar "textsize")) ">: "))) (if (null h_t) (setq h_t (getvar "textsize")) (setvar "textsize" h_t)) (initget 7) (setq w_c (getdist ins_pt_cell "\nLargeur des cellules: ")) (setq ename_cell (vla-addTable Space (vlax-3d-point (trans ins_pt_cell 1 0)) (+ 3 (sslength js_sel)) 2 (+ h_t (* h_t 0.25)) w_c)) (setq n_row 2 n_column -1) (vla-SetText ename_cell 0 0 "Tableau Récapitulatif de Métré") (vla-SetCellTextStyle ename_cell 0 0 "Romand20") (vla-SetCellTextHeight ename_cell 0 0 (vlax-make-variant h_t 5)) (vla-SetCellAlignment ename_cell 0 0 5) (foreach string '("Libellé de la pièce" "Surface de la pièce") (vla-SetText ename_cell 1 (setq n_column (1+ n_column)) string) (vla-SetCellTextStyle ename_cell 1 n_column "Romand20") (vla-SetCellTextHeight ename_cell 1 n_column (vlax-make-variant h_t 5)) (vla-SetCellAlignment ename_cell 1 n_column 5) ) (setq n_column -1) (repeat (setq n (sslength js_sel)) (setq ename (vlax-ename->vla-object (ssname js_sel (setq n (1- n))))) (if (vlax-property-available-p ename 'Area) (progn (vla-SetText ename_cell n_row (setq n_column (1+ n_column)) (vlax-ldata-get ename "SURF2") ) (vla-SetCellTextStyle ename_cell n_row n_column "Romand20") (vla-SetCellTextHeight ename_cell n_row n_column (vlax-make-variant h_t 5)) (vla-SetCellAlignment ename_cell n_row n_column 6) (vla-SetText ename_cell n_row (setq n_column (1+ n_column)) (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID ename)) ">%).Area \\f \"%lu2%pr2%ps>%") ) (vla-SetCellTextStyle ename_cell n_row n_column "Romand20") (vla-SetCellTextHeight ename_cell n_row n_column (vlax-make-variant h_t 5)) (vla-SetCellAlignment ename_cell n_row n_column 6) (setq n_row (1+ n_row) n_column -1) ) ) ) (setq n_column 1) (vla-SetText ename_cell n_row n_column (strcat "Total= " "%<\\AcExpr (Sum(B3:B" (itoa n_row) ")) \\f \"%lu6\">%") ) (vla-SetCellTextStyle ename_cell n_row (1- (length lst_idcolumn)) "Romand20") (vla-SetCellTextHeight ename_cell n_row (1- (length lst_idcolumn)) (vlax-make-variant h_t 5)) (vla-SetCellAlignment ename_cell n_row (1- (length lst_idcolumn)) 6) (vlax-release-object ename_cell) (vlax-release-object Space) (setvar "dimzin" oldim) (setvar "clayer" oldlay) ) (T (princ "\nSélection vide!") ) ) )
  7. Bonjour, Pour pouvoir faire cela, je pense que je tournerais vers les (ldata) d'objets. Exemple: (vlax-ldata-put (vlax-ename->vla-object obj) "SURF2" (getstring T "\nNom du Local : ")) Cela te permettra pour ton tableau de récupérer la chaine associé à la polyligne et d'identifier son affectation. Pour moi cela me semble le moyen le plus sûr pour identifier les polylignes, mais cela demande une adaptation du lisp cité ainsi que la création d'un autre pour faire le tableau récapitulatif. D'attaque pour faire cela ?
  8. Bonjour , Un crochet ] en trop, j'ai édité le lien. Il est gratuit, en mode recherche pas besoin de s'enregistrer, tu teste si cela fonctionne en mode 64 .... Si oui, il faut s'enregistrer pour pouvoir effectuer les remplacements.
  9. bonuscad

    orientation du dessin

    Ou tout simplement un SCU 3points, suivi de la commande REPERE (pour une vue orthogonale à l'écran) puis retour au SCU Précédent.
  10. Non, mais le problème et que je n'ai pas l'utilité d'une telle macro... Donc je ne me suis pas penché sur la question. Alors au hasard, regarde si en modifiant la variable SDI ton script pourrait fonctionner. (voir l'aide pour les valeurs qu'elle peut prendre) La commande Decompos est sensible à cette variable pour une sélection multiple en macro (pourquoi ? Je ne sais pas ! ) Pas d'autres suggestions ! [edit] En fait c'est peut être la variable QAFLAGS je crois, je me mélange les pinceaux. Fait une recherche sur le forum avec le nom de cette variable. [Edité le 8/12/2010 par bonuscad]
  11. Du coup j'ai cherché un peu et j'ai trouvé http://a.e.b.free.fr/remplace/index.htm J'ai essayé sous XP (32 :( ) et cela fonctionne bien (essayé avec des fichiers textes en ASCII) Compatible 64 ?? [Edité le 12/12/2010 par bonuscad]
  12. Alors essayes de te retourner vers les commandes en terminal DOS. Avec Find, FindStr, Dir, Sort, Edit, Copy, (ou Print, Type, je sais plus...) Toutes ces commandes ont de l'aide dans le treminal (option /? de la commande: if /? par exemple est très intéressant pour les transmissions avec les %1, %2, Shift, les caractères de redirections " > et < " Comme les véritables fichiers BATCH (Traitements par lots: .BAT) de l'époque. Tu as aussi la commande HELP|More(dans la console) pour l'aide générale. Je l'ai eu fais il y a bien longtemps, (avec même l'utilisation d' ErrorLevel et des conditions If, Else ou encore For GoTo) J'avais trouvé cela très laborieux à l'époque. Mais cela doit être faisable (si tu en as eu fais quelque peu...) Pour ma part je n'ai pas de système 64 bits, je ne peux même pas tester et imaginer cela sous un OS en 64. Le plus simple (qu'un programmeur généreux te refasse un EXE en mode 64), ou en trouver un gratuit en open source, une recherche s'impose. ;)
  13. bonuscad

    Face 3D en Polylignes

    Déjà donné de nombreuse fois sur le forum. Je le redonne ici car dans les anciens il y avait l'oubli de la fonction (trans) (defun C:3dfto3dpo ( / js ind e_name ent dxf_10 dxf_11 dxf_12 dxf_13) (setvar "cmdecho" 0) (princ "\nChoix des 3Dfaces.") (setq js (ssget '((0 . "3DFACE"))) ind 0) (cond (js (setvar "osmode" (+ 16384 (rem (getvar "osmode") 16384))) (while (setq e_name (ssname js ind)) (setq ind (1+ ind) ent (entget e_name) dxf_10 (trans (cdr (assoc 10 ent)) 0 1) dxf_11 (trans (cdr (assoc 11 ent)) 0 1) dxf_12 (trans (cdr (assoc 12 ent)) 0 1) dxf_13 (trans (cdr (assoc 13 ent)) 0 1) ) (if (not (equal dxf_12 dxf_13 1E-012)) (command "_.3dpoly" dxf_10 dxf_11 dxf_12 dxf_13 "_close") (command "_.3dpoly" dxf_10 dxf_11 dxf_12 "_close") ) ) (princ (strcat "\n" (itoa ind) " 3Dpoly crées à partir de 3Dface.")) (setvar "osmode" (rem (getvar "osmode") 16384)) ) (T (prompt "\nAucune sélection valide.")) ) (setvar "cmdecho" 1) (prin1) )
  14. bonuscad

    Lambert.lsp

    Bonsoir, Comme je n'arrive pas trop à avancer dans la ré-actualisation de mes lisp, j'ai remis en ligne ma page perso . L'ancienne URL (qui ne fonctionnait plus) sera redirigée dans quelque jour vers la nouvelle. Donc sur cette page, tu trouveras les AUTRES fichiers indispensables à Lambert.lsp pour son fonctionnement. Le DCL et les fichiers de motifs PAT. Lambert fait parti des lisps que je voudrais bien mettre au gout du jour. Cela se fera peut être (j'ai commencé quelque peu, mais je ne m'y acharne pas faute de temps) Donc pour l'instant statu quo sur l'évolution et c'est pour cela que je remet en ligne telle qu'auparavant.
  15. bonuscad

    Insertion image (ratio)

    Bonsoir, Je dirais que si tu n'as pas envie de retravailler ton image sur un logiciel de retouche d'image, sous autocad tu peux essayer simplement de créer un bloc de ton image. Lors de l'insertion de celle-ci, tu donnes des facteurs d'échelle différent en X et en Y pour la déformer. Solution simple mais qui peut suffire...
  16. Bon pour une fois, j'essaye de participer au challenge. Puiff ! pas facile. Je suis bien arrivé a quelque chose, mais mon arbre est imbriqué à l'envers. Je livre quand même mon bout de code bien qu'il ne réponde pas à la demande, je me suis bien grillé les neurones... (defun lst2tree (lst / tmp_l lx l_t) (while (setq lx (mapcar 'car lst)) (while (car lx) (setq l_t (cons (car lx) (vl-remove nil l_t)) lx (vl-remove (car lx) lx) ) ) (if (setq lst (vl-remove nil (mapcar 'cdr lst))) (setq l_t (cons (list l_t) (lst2tree lx))) (setq lst nil) ) ) (vl-remove nil l_t) )
  17. Tel le sphinx... Presque un remplaçant, que je viens de découvrir TubeMaster Quelques infos complémentaires . Pour ma part tester sur windows XP SP3 et Ubuntu 10.04 LTS (Lucid Lynx) et cela fonctionne bien. (pour combien de temps ?) Vous avez dit HADOPI et consors ?! :P
  18. Le circonstances d'application d'un tel programme, sont très importantes. La gestion de ces dits objets peut se révéler un vrai casse tête. Veux tu ne pas perdre ce classement lors d'une réouverture du dessin ? Ou est ce un besoin ponctuel de session ? Le premier cas pourrait exiger d'utiliser les handles des objets pour pouvoir les retrouver lors d'une session ultérieure. Certainement aussi à des réacteurs, ca se complique... Tes objets peuvent ils aussi être aussi être superposés? (objet filaire d'épaisseur différente exactement l'un sur l'autre) Cette possibilité complique aussi la sélection des objets durant la routine. Et certainement d'autres cas aux quel je n'ai pas pensé; multi-fenêtres vplayers différent !.... Pas simple, pas simple.
  19. Ils essayent bien... Mais bon quand on veut faire partie de l'aventure, il faut pas être surpris de se retrouver dans ... les aléas du pionnier. Mois quand je lis ce genre d'article d'actualité , je laisse aux geeks le soin d'essuyer les plâtres. :) C'est le moment propice pour toi de négocier: cadeaux, remises et offres spéciales de la part de ton F.A.I. préféré ! ;) [Edité le 26/11/2010 par bonuscad]
  20. bonuscad

    Type de ligne : gazon

    Je suppose que tu parles des SHX ?! En mode forme, avec la commande _LOAD, puis la commande _SHAPE. Associer dans un fichier LIN, il suffit qu'il soit accessible pour AutoCad (chemin de recherche), il n'y a rien à faire, il est chargé avec la définition du type de ligne lorsque tu charge celle-ci. Alors tu aurais du arriver à compiler ce fichier... en enlevant les retours de ligne en trop, ou mal placé (en tête de fichier ou multiple en fin). :exclam: car ton problème venait de là ! Ah si on pouvait joindre des fichier directement sur CadXp... Les partages de fichiers par des sites auxiliaires finissent rapidement avec des liens morts. Pas cool pour les nouveaux venu qui pourraient exploiter d'ancien posts.
  21. As tu essayé simplement une "insertion" -> "Référence d'une image raster.." Équivalent à la commande _imageattach Pour ma part je fuis les objets OLE, quand cela est possible car c'est souvent source de problème. Équivalent à la commande _insertobj A moins que je n'ai pas compris le souci... [Edité le 24/11/2010 par bonuscad]
  22. bonuscad

    Type de ligne : gazon

    L'interprétation sur ce forum du copier-coller avec les BBcodes est une sinécure... :mad: Des lignes supplémentaires vierges sont systématiquement insérées, on ne sait pas ou ce situe les fin de lignes. Donc pour le postage de macro, de contenu de fichier de personnalisation, cela est toujours mal interprété. Un bon conseil, utiliser Notepad2. :) Si vous arrivez à reproduire ceci, il n'y aura plus de problème... http://www.mabul.org/moe/up/10/11/24/c7jg5q8r.png
  23. Si tu regardes l'aide sur entmod, voici ce qu'il est dit:
  24. bonuscad

    Type de ligne : gazon

    A la demande de richard-c, je poste les contenu des fichiers necessaire à la définition(le fichier SHX ne pouvant être joint d'une façon durable sur le forum) Ce qui suit est à réaliser avec un copié-collé dans le bloc-note et à sauvegarder avec la bonne extension. Le contenu du fichier HERBE.SHP *1,70,HERBE 4,250,4,4,3,59,3,23,3,17,3,221,2,9,(0,0),1, 9,(-29,72),(37,-63),(-15,60),(32,-57),(0,48),(8,-48),(5,51),(0,-51),(32,49),(-26,-54), (50,53),(-37,-52),(39,32),(-27,-28),(30,-12),(0,0),2,9,(-99,0),(0,0), 1,4,221,4,17,4,23,4,59,3,4,3,250,0 Ce fichier est à compiler dans Autocad avec la commande _COMPILE pour obtenir le fichier HERBE.SHX Le contenu du fichier HERBE.LIN *Herbe,Herbe A,0,-.000035,[HERBE,Herbe.shx,y=.000057,s=1],-.019478 Ces fichiers SHX et LIN doivent être accessibles à Autocad (Dossier de recherche existant ou à définir) pour pouvoir les utiliser sans erreurs. Il vous faudra peut être régler l'échelle du type de ligne de l'objet pour voir les motifs.
  25. Je viens de découvrir la réponse de JL. Et pour moi, si cela ne fonctionne pas pour l'affichage, cela fonctionne très bien pour l'impression (ce qui est l'essentiel). Et cela est très appréciable. Je retiens... Merci
×
×
  • 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é