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. Bonjour, Ici j'ai essayé en partant de deux polylignes distinctes mais proches de réduire les écarts.Si vous avez par exemple 2 polylignes provenant de 2 sources distinctes et censées représenter la même chose (cheminement ou contour) mais la superposition révèle qu'elles sont différentes, laquelle choisir?Compenser les écarts, cela est généralement fastidieux et long en cas de nombreux sommets! Ce qui suit ne traite que polylignes légères, (les arcs ne seront pas restitués)Donc les polylignes seront de préférence sans arcs, elles pourront avoir un nombre différent de sommets entre elles et; soit avoir un écart variable entre elles, soit se couper plusieurs fois entre elles. (façon tresse) Que fait en gros la routine?:Elle cherche d’abord à savoir si elles se coupent, si c'est le cas elle crée des sommets à ces point d'intersection. (cela obligera les futures polylignes à passer par ces points) Ensuite à chaque sommets de chaque polyligne elle cherche le sommet le plus proche de la polyligne opposée et prendra le milieu entre ces deux sommets pour générer une nouvelle polyligne. Au final 2 polylignes seront générées en ayant réduit les écarts. suivant le résultat obtenu, vous n'en gardez qu'une seule, ou vous avez encore la possibilité de renouveler la même opération entre ces 2 polylignes nouvellement générées, cela autant de fois que vous jugerez nécessaire pour réduire l'écart, mais au final il faudra toujours en choisir une à conserver. Le code proposé est encore embryonnaire, mais après quelques tests ça à l'air de fonctionner. Pour par exemple des polylignes d'environ 1000 sommets, j'ai un temps de calcul d'environ 3 sec avant de générer les nouvelles polylignes.Au final les polylignes sources sont griper, soit vous les effacez ou changez ses propriétées dans la palette, soit "Echap" pour ne rien faire et les conserver. (vl-load-com) (defun add_vtx (obj add_pt ent_name / bulg) (vla-addVertex obj (1+ (fix add_pt)) (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble (cons 0 1)) (list (car (trans (vlax-curve-getpointatparam obj add_pt) 0 ent_name)) (cadr (trans (vlax-curve-getpointatparam obj add_pt) 0 ent_name)) ) ) ) ) (setq bulg (vla-GetBulge obj (fix add_pt))) (vla-SetBulge obj (fix add_pt) (/ (sin (/ (* 4 (atan bulg) (- add_pt (fix add_pt))) 4)) (cos (/ (* 4 (atan bulg) (- add_pt (fix add_pt))) 4)) ) ) (vla-SetBulge obj (1+ (fix add_pt)) (/ (sin (/ (* 4 (atan bulg) (- (1+ (fix add_pt)) add_pt)) 4)) (cos (/ (* 4 (atan bulg) (- (1+ (fix add_pt)) add_pt)) 4)) ) ) (vla-update obj) ) (defun c:vertex_median ( / fst_ob snd_obj vrt_pt pt lst_pt fst_dxf snd_dxf lst1 lst2 lstx ptx) (princ "\nSélectionner la 1ère polyligne: ") (while (not (setq fst_obj (ssget "_+.:E:S" '((0 . "LWPOLYLINE")))))) (princ "\nSélectionner la 2ème polyligne: ") (while (not (setq snd_obj (ssget "_+.:E:S" '((0 . "LWPOLYLINE")))))) (setq fst_obj (ssname fst_obj 0) snd_obj (ssname snd_obj 0) vrt_pt (vlax-variant-value (vla-IntersectWith (vlax-ename->vla-object fst_obj) (vlax-ename->vla-object snd_obj) 0)) ) (if (>= (vlax-safearray-get-u-bound vrt_pt 1) 0) (progn (setq pt (vlax-safearray->list vrt_pt)) (if pt (if (> (length pt) 3) (repeat (/ (length pt) 3) (setq lst_pt (cons (list (car pt) (cadr pt) (caddr pt)) lst_pt) pt (cdddr pt)) ) (setq lst_pt (cons pt lst_pt)) ) ) ) ) (setq fst_dxf (entget fst_obj) snd_dxf (entget snd_obj) lst1 (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) fst_dxf)) lst2 (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) snd_dxf)) lstx nil ) (if (and lst_pt (listp lst_pt)) (progn (setq obj (vlax-ename->vla-object fst_obj)) (foreach el lst_pt (if (not (member T (mapcar '(lambda (x) (equal (list (car el) (cadr el)) x 1E-8)) lst1))) (add_vtx obj (vlax-curve-getparamatpoint obj (vlax-curve-getClosestPointTo obj el)) fst_obj) ) ) (setq obj (vlax-ename->vla-object snd_obj)) (foreach el lst_pt (if (not (member T (mapcar '(lambda (x) (equal (list (car el) (cadr el)) x 1E-8)) lst2))) (add_vtx obj (vlax-curve-getparamatpoint obj (vlax-curve-getClosestPointTo obj el)) snd_obj) ) ) ) ) (setq fst_dxf (entget fst_obj) snd_dxf (entget snd_obj) lst1 (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) fst_dxf)) lst2 (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) snd_dxf)) lstx nil ) (foreach n lst1 (setq pt (nth (vl-position (apply 'min (setq lst_d (mapcar '(lambda (x) (distance n x)) lst2))) lst_d) lst2)) (setq ptx (list (* 0.5 (+ (car n) (car pt))) (* 0.5 (+ (cadr n) (cadr pt))))) (setq lstx (cons ptx lstx)) ) (entmake (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (assoc 67 fst_dxf) (assoc 410 fst_dxf) (assoc 8 fst_dxf) (if (assoc 62 fst_dxf) (assoc 62 fst_dxf) (cons 62 256)) (if (assoc 6 fst_dxf) (assoc 6 fst_dxf) (cons 6 "BYLAYER")) (if (assoc 370 fst_dxf) (assoc 370 fst_dxf) (cons 370 -1)) (cons 100 "AcDbPolyline") (cons 90 (length lstx)) (assoc 70 fst_dxf) (if (assoc 38 fst_dxf) (assoc 38 fst_dxf) (cons 38 0.0) ) (if (assoc 39 fst_dxf) (assoc 39 fst_dxf) (cons 39 0.0) ) ) (apply 'append (mapcar '(lambda (x10) (list (cons 10 x10) '(40 . 0.0) '(41 . 0.0) '(42 . 0.0) '(91 . 0) ) ) lstx ) ) (list (assoc 210 fst_dxf)) ) ) (setq lstx nil) (foreach n lst2 (setq pt (nth (vl-position (apply 'min (setq lst_d (mapcar '(lambda (x) (distance n x)) lst1))) lst_d) lst1)) (setq ptx (list (* 0.5 (+ (car n) (car pt))) (* 0.5 (+ (cadr n) (cadr pt))))) (setq lstx (cons ptx lstx)) ) (entmake (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (assoc 67 snd_dxf) (assoc 410 snd_dxf) (assoc 8 snd_dxf) (if (assoc 62 snd_dxf) (assoc 62 snd_dxf) (cons 62 256)) (if (assoc 6 snd_dxf) (assoc 6 snd_dxf) (cons 6 "BYLAYER")) (if (assoc 370 snd_dxf) (assoc 370 snd_dxf) (cons 370 -1)) (cons 100 "AcDbPolyline") (cons 90 (length lstx)) (assoc 70 snd_dxf) (if (assoc 38 snd_dxf) (assoc 38 snd_dxf) (cons 38 0.0) ) (if (assoc 39 snd_dxf) (assoc 39 snd_dxf) (cons 39 0.0) ) ) (apply 'append (mapcar '(lambda (x10) (list (cons 10 x10) '(40 . 0.0) '(41 . 0.0) '(42 . 0.0) '(91 . 0) ) ) lstx ) ) (list (assoc 210 snd_dxf)) ) ) (sssetfirst nil (ssadd snd_obj (ssadd fst_obj (ssadd)))) (prin1) )
  2. Bonjour à tous, Alors 4 ans après, toujours dans la même optique: couper une LWPOLYLINE (avec ou sans arc, fermée ou pas) sans perdre les données d'objet attachés mais à la différence qu'ici cela permettra de couper celles-ci aux intersections avec d'autres objets.Normalement (si pas de bug) copie aussi les N records et les Xdata si existants et fonctionne depuis et dans n'importe quel SCU. J'ai fais des tests qui se sont bien déroulés, mais des cas entraînant un bug reste possible.Je vais aussi éditer le post #2 pour le mettre au goût du jour. Ces routines doivent pouvoir aussi fonctionner sans Autocad Map ou Civil, mais dans ce cas bien sur les OD ne sont pas traitées. (vl-load-com) (defun add_vtx (obj add_pt ent_name / bulg) (vla-addVertex obj (1+ (fix add_pt)) (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble (cons 0 1)) (list (car (trans (vlax-curve-getpointatparam obj add_pt) 0 ent_name)) (cadr (trans (vlax-curve-getpointatparam obj add_pt) 0 ent_name)) ) ) ) ) (setq bulg (vla-GetBulge obj (fix add_pt))) (vla-SetBulge obj (fix add_pt) (/ (sin (/ (* 4 (atan bulg) (- add_pt (fix add_pt))) 4)) (cos (/ (* 4 (atan bulg) (- add_pt (fix add_pt))) 4)) ) ) (vla-SetBulge obj (1+ (fix add_pt)) (/ (sin (/ (* 4 (atan bulg) (- (1+ (fix add_pt)) add_pt)) 4)) (cos (/ (* 4 (atan bulg) (- (1+ (fix add_pt)) add_pt)) 4)) ) ) (vla-update obj) ) (defun c:break_lw_withOD ( / js i js_b i ent obj nb tmp_obj vrt_pt pt lst_pt dxf_obj xd_l dxf_43 dxf_38 dxf_39 dxf_10 dxf_40 dxf_41 dxf_42 dxf_39 dxf_210 n_vtx l nwent tbldef lst_data) (princ "\nSélection des LWPOLYLINE à couper") (setq js (ssget (list (cons 0 "LWPOLYLINE") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) ) ) ) (princ "\nSélection des objets curvilignes coupant les polylignes") (setq js_b (ssget (list (cons 0 "LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE,XLINE,RAY,MPOLYGON") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) ) ) ) (cond ((and js js_B) (repeat (setq i (sslength js)) (setq ent (ssname js (setq i (1- i))) obj (vlax-ename->vla-object ent) ) (repeat (setq nb (sslength js_B)) (setq tmp_name (ssname js_b (setq nb (1- nb)))) (cond (tmp_name (setq tmp_obj (vlax-ename->vla-object tmp_name) vrt_pt (vlax-variant-value (vla-IntersectWith obj tmp_obj 0)) ) (if (>= (vlax-safearray-get-u-bound vrt_pt 1) 0) (progn (setq pt (vlax-safearray->list vrt_pt)) (if pt (if (> (length pt) 3) (repeat (/ (length pt) 3) (setq lst_pt (cons (list (car pt) (cadr pt) (caddr pt)) lst_pt) pt (cdddr pt)) ) (setq lst_pt (cons pt lst_pt)) ) ) ) ) ) ) ) (if (and lst_pt (listp lst_pt)) (foreach el lst_pt (add_vtx obj (vlax-curve-getparamatpoint obj (vlax-curve-getClosestPointTo obj el)) ent) ) ) (setq dxf_obj (entget (vlax-vla-object->ename obj) (list "*")) xd_l (assoc -3 dxf_obj) ) (if (cdr (assoc 43 dxf_obj)) (setq dxf_43 (cdr (assoc 43 dxf_obj))) (setq dxf_43 0.0) ) (if (cdr (assoc 38 dxf_obj)) (setq dxf_38 (cdr (assoc 38 dxf_obj))) (setq dxf_38 0.0) ) (if (cdr (assoc 39 dxf_obj)) (setq dxf_39 (cdr (assoc 39 dxf_obj))) (setq dxf_39 0.0) ) (setq dxf_10 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) dxf_obj)) dxf_40 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 40)) dxf_obj)) dxf_41 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 41)) dxf_obj)) dxf_42 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 42)) dxf_obj)) dxf_210 (cdr (assoc 210 dxf_obj)) ) (if (not (zerop (boole 1 (cdr (assoc 70 dxf_obj)) 1))) (setq dxf_10 (append dxf_10 (list (car dxf_10))) dxf_40 (append dxf_40 (list (car dxf_40))) dxf_41 (append dxf_41 (list (car dxf_41))) dxf_42 (append dxf_42 (list (car dxf_42))) ) ) (setq lst_pt (reverse (mapcar '(lambda (x) (list (car (trans x 0 ent)) (cadr (trans x 0 ent)))) lst_pt))) (repeat (length lst_pt) (setq n_vtx -1 l nil) (entmake (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (assoc 67 dxf_obj) (assoc 410 dxf_obj) (assoc 8 dxf_obj) (if (assoc 62 dxf_obj) (assoc 62 dxf_obj) (cons 62 256)) (if (assoc 6 dxf_obj) (assoc 6 dxf_obj) (cons 6 "BYLAYER")) (if (assoc 370 dxf_obj) (assoc 370 dxf_obj) (cons 370 -1)) (cons 100 "AcDbPolyline") (cons 90 (1+ (vl-position T (mapcar '(lambda (x) (equal x (car lst_pt) 1E-8)) dxf_10)))) (cons 70 (boole 1 (cdr (assoc 70 dxf_obj)) 128)) (cons 38 dxf_38) (cons 39 dxf_39) ) (reverse (repeat (1+ (vl-position T (mapcar '(lambda (x) (equal x (car lst_pt) 1E-8)) dxf_10))) (setq l (append (list (cons 42 (nth (1+ n_vtx) dxf_42)) (cons 41 (nth (1+ n_vtx) dxf_41)) (cons 40 (nth (1+ n_vtx) dxf_40)) (cons 10 (nth (setq n_vtx (1+ n_vtx)) dxf_10)) ) l ) ) ) ) (list (assoc 210 dxf_obj)) (if xd_l (list xd_l) '()) ) ) (repeat n_vtx (setq dxf_10 (cdr dxf_10) dxf_40 (cdr dxf_40) dxf_41 (cdr dxf_41) dxf_42 (cdr dxf_42)) ) (setq lst_pt (cdr lst_pt) lst_data nil nwent (entlast)) (if (or (numberp (vl-string-search "Map 3D" (vla-get-caption (vlax-get-acad-object)))) (numberp (vl-string-search "Civil 3D" (vla-get-caption (vlax-get-acad-object)))) ) (progn (foreach n (ade_odgettables ent) (setq tbldef (ade_odtabledefn n)) (setq lst_data (cons (mapcar '(lambda (fld / tmp_rec numrec) (setq numrec (ade_odrecordqty ent n)) (cons n (while (not (zerop numrec)) (setq numrec (1- numrec)) (if (zerop numrec) (if tmp_rec (cons fld (list (cons (ade_odgetfield ent n fld numrec) tmp_rec))) (cons fld (ade_odgetfield ent n fld numrec)) ) (setq tmp_rec (cons (ade_odgetfield ent n fld numrec) tmp_rec)) ) ) ) ) (mapcar 'cdar (cdaddr tbldef)) ) lst_data ) ) ) (cond (lst_data (mapcar '(lambda (x / ct) (while (< (ade_odrecordqty nwent (caar x)) (ade_odrecordqty ent (caar x))) (ade_odaddrecord nwent (caar x)) ) (foreach el (mapcar 'cdr x) (if (listp (cdr el)) (progn (setq ct -1) (mapcar '(lambda (y / ) (ade_odsetfield nwent (caar x) (car el) (setq ct (1+ ct)) y) ) (cadr el) ) ) (ade_odsetfield nwent (caar x) (car el) 0 (cdr el)) ) ) ) lst_data ) ) ) ) ) ) (setq n_vtx -1 l nil) (entmake (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (assoc 67 dxf_obj) (assoc 410 dxf_obj) (assoc 8 dxf_obj) (if (assoc 62 dxf_obj) (assoc 62 dxf_obj) (cons 62 256)) (if (assoc 6 dxf_obj) (assoc 6 dxf_obj) (cons 6 "BYLAYER")) (if (assoc 370 dxf_obj) (assoc 370 dxf_obj) (cons 370 -1)) (cons 100 "AcDbPolyline") (cons 90 (length dxf_10)) (cons 70 (boole 1 (cdr (assoc 70 dxf_obj)) 128)) (cons 38 dxf_38) (cons 39 dxf_39) ) (reverse (repeat (length dxf_10) (setq l (append (list (cons 42 (nth (1+ n_vtx) dxf_42)) (cons 41 (nth (1+ n_vtx) dxf_41)) (cons 40 (nth (1+ n_vtx) dxf_40)) (cons 10 (nth (setq n_vtx (1+ n_vtx)) dxf_10)) ) l ) ) ) ) (list (assoc 210 dxf_obj)) (if xd_l (list xd_l) '()) ) ) (setq lst_data nil nwent (entlast)) (if (or (numberp (vl-string-search "Map 3D" (vla-get-caption (vlax-get-acad-object)))) (numberp (vl-string-search "Civil 3D" (vla-get-caption (vlax-get-acad-object)))) ) (progn (foreach n (ade_odgettables ent) (setq tbldef (ade_odtabledefn n)) (setq lst_data (cons (mapcar '(lambda (fld / tmp_rec numrec) (setq numrec (ade_odrecordqty ent n)) (cons n (while (not (zerop numrec)) (setq numrec (1- numrec)) (if (zerop numrec) (if tmp_rec (cons fld (list (cons (ade_odgetfield ent n fld numrec) tmp_rec))) (cons fld (ade_odgetfield ent n fld numrec)) ) (setq tmp_rec (cons (ade_odgetfield ent n fld numrec) tmp_rec)) ) ) ) ) (mapcar 'cdar (cdaddr tbldef)) ) lst_data ) ) ) (cond (lst_data (mapcar '(lambda (x / ct) (while (< (ade_odrecordqty nwent (caar x)) (ade_odrecordqty ent (caar x))) (ade_odaddrecord nwent (caar x)) ) (foreach el (mapcar 'cdr x) (if (listp (cdr el)) (progn (setq ct -1) (mapcar '(lambda (y / ) (ade_odsetfield nwent (caar x) (car el) (setq ct (1+ ct)) y) ) (cadr el) ) ) (ade_odsetfield nwent (caar x) (car el) 0 (cdr el)) ) ) ) lst_data ) ) ) ) ) (entdel ent) ) (print (sslength js)) (princ " LWpolyligne(s) coupée(s) aux points d'intersection avec ses Object Datas.") ) ) (prin1) )
  3. En allant consulter l'aide pour Autocad LT On peut comprendre que la seule possibilité qu'il te reste, est de passer par l'explorateur Windows pour attribuer tes propres propriétés personnalisées. Et à priori tu en as que dix à disposition. Cela demande certainement à revoir tes anciens champs que tu aurais pus utilisés.
  4. bonuscad

    désactiver un MODULE ?!

    Bonjour, Et si tu refais avec ton template avec un profil sauvegardé en ayant au préalable utilisé la commande PROFILSANSCOV.Peut être que tu ne sera plus embêté avec l'initialisation de covadis (du moins pour les nouveaux dessins).Pour ma part dans ce profil ; j'ai même purgé les applis covadis avec "-Purger" "AppReg". Après suivant le profil que j'utilise j'ai covadis initialisé ou pas, sans l'avoir désinstallé. Après avec l'ouverture de dessin déjà fais avec Covadis, je ne sais pas si cette manière de faire a une incidence, je pense que non; Covadis va certainement s’initialiser automatiquement.
  5. Bonjour, Si elles sont chargées au démarrage, c'est simple: Si (defun c:MA_COMMANDE ( / ....).......) alors tu inclu (C:MA_COMMANDE) dans ton code si (defun MA_Fonction (arg1 arg2 argN..../ .......).......) alors tu inclus (MA_FONCTION argument_requis1 argument_requis2 etc...) Après il faut que ça reste cohérent dans les appels
  6. Oui en effet, mais cela n'a aucune incidence, si tu passes par par "_adedefdata" c'est bien un entier qui apparaît dans la valeur par défaut. Et si le code fonctionne c'est le principal
  7. J'ai bien reçu ton virement paypal et je t'en remercie vivement, je n'en espérais pas tant.

    C'est bien la 1ere fois qu'une telle proposition m'est faite sur le forum.

    Je pense que si tu as d'autres problèmatiques que je puisse résoudre, n'hésite pas, même sans rénumération. Après les délais sont suivant ma disponibilité et mes compétences.

    (tu as ...

  8. Bon on va réparer les "conneries" du client. A copier-coller directement en ligne de commande dans le dessin à corriger avant d'appliquer la routine NBAMBOUCAD. Ca corrigera toutes les tables. et ensuite la routine NBAMBOUCAD devrait fonctionner correctement. ((lambda ( / val typ nw_val nw_deftab) (foreach i (ade_odtablelist) (setq val nil typ (mapcar 'caddr (cdaddr (ade_odtabledefn i))) ) (foreach el (mapcar 'cdr typ) (cond ((eq el "Character") (setq nw_val "")) ((eq el "Real") (setq nw_val 0.0)) ((eq el "Integer") (setq nw_val 0)) ) (setq val (cons (cons "DefaultVal" nw_val) val)) ) (setq nw_deftab (append (cons (car (ade_odtabledefn i)) (list (cadr (ade_odtabledefn i)))) (list (cons "Columns" (mapcar '(lambda (x y z w / ) (cons x (cons y (cons z (list w)))) ) (mapcar 'car (cdaddr (ade_odtabledefn i))) (mapcar 'cadr (cdaddr (ade_odtabledefn i))) typ (reverse val) ) ) ) ) ) (ade_odmodifytab nw_deftab) ) (prin1) ))
  9. Bon je pense qu'il y a un problème avec tes tables.Avant d'appliquer mon code. Quand je vais par exemple modifier la table "A_RE" et le champ "ARE_LONG", si je clique sur un autre champ par exemple ARE_ORIENT ; il m'affiche le type Réel, je re-clique sur ARE_LONG ; il m'affiche Réel, je re-clique par exemple sur AUTEUR ; il m'affiche Caractère, je reviens sur ARE_LONG ; il m'affiche Caractère. En fait il garde le dernier élément cliqué (c'est pas normal) Si je fixe ARE_LONG en entier et que je clique modifier et pareil sur ARE_LARG. Là effectivement je peut revenir dessus après avoir cliqué sur un autre champ de nature différente, il m'affiche bien entier.Si j'applique alors la routine, elle fonctionne alors pour la table A_RE et les champs ARE_LONG et ARE_LARG, donc il y a bien un problème sur les définitions. De même quand je lance cette instruction lisp (toujours avant d'avoir appliqué mon code) (foreach i (caddr (ade_odtabledefn "A_RE")) (print i)) On voit en retour une incohérence: Ces champs de type entier devrait avoir ("DefaultVal" . 0) et non pas ("DefaultVal" . ""), je pense que le problème vient de là. Combien de tables sont impactés, je ne sais pas, mais je dirais toutes.Qui a mis en place ces tables?
  10. Bon j'ai quelques problèmes... J'ai appliqué tes souhaits : pour "type_eq_ass_AG" mais aussi pour "type_eq_ass_MG" (c'est le codage qui a voulu cela) pour "ft_c1" (aurait-il fallu l'appliquer aussi à "v_c1" ?) pour "XXX_STAT"pour "XXX_ORIENT" (j'ai mis la valeur en grade comme tes unités employées) pour "XXX_LONG" et "XXX_LONG": ces champs sont définis comme ENTIER et non en nombre réel. Donc j'ai récupéré l'échelle en X et Y que j'ai multiplié par 1000 et dont j'ai pris la partie entière, ainsi par exemple 0.645 devient 645. Malgré cela le champ n'est pas mis à jour, je ne sais pourquoi !...J'ai mis en remarque ";" des lignes (print) dans le code (vers la fin), tu peux enlever le point virgule, comme ça tu verra que la valeur est bonne mais que le champ n'est pas mis à jour pour autant. La table a été mal définie, c'est l'impression que j'aie ! En attendant voilà le nouveau jet: (defun c:NBAMBOUCAD ( / l_der l_0 l_13 flag l_lay tbl_lay js n ent find_str l value) (setq l_der '( "type_eq_ass_A" "type_eq_ass_M" "type_eq_ass_AG" "type_eq_ass_MG" "type_eq_ass_G" "type_eq_ass_I" "type_eq_ass_E" "type_eq_ass_C" "type_eq_ass_R" "type_eq_ass_L" "type_eq_ass_O" "type_eq_ass_D" "type_eq_ass_N" "type_eq_ass_U" "type_eq_ass_V" "type_eq_ass_S" "type_eq_ass_T" "type_eq_ass_H" "type_eq_ass_F" "type_eq_cu_B" "type_eq_cu_R" "type_eq_cu_V" "type_eq_cu_E" "type_eq_cu_D" "type_eq_cu_A" "type_sup_P" "type_sup_O" "type_sup_R" "type_sup_C" "type_arm_gaz_C" "type_arm_gaz_A" "type_arm_gaz_D" "type_eq_gaz_E" "type_eq_gaz_V" "type_eq_gaz_I" "type_eq_gaz_S" "type_eq_gaz_T" "type_eq_gaz_M" "type_eq_gaz_R" "type_eq_gaz_O" "type_eq_gaz_Q" "type_eq_gaz_N" "type_eq_gaz_P" "type_eq_gaz_C" "type_eq_gaz_B" "type_arm_rti_B" "type_arm_rti_L" "type_arm_rti_A" "type_arm_rti_F" "type_arm_rti_T" "type_arm_rti_M" "type_poste_rti_C" "type_poste_rti_P" "type_poste_rti_O" "type_poste_rti_D" "type_poste_rti_T" "type_poste_rti_M" "type_sup_P" "type_sup_O" "type_sup_R" "type_sup_C" "type_ptlum_smuv_C" "type_ptlum_smuv_L" "type_ptlum_smuv_B" "type_ptlum _smuv_P" "type_acc_eau_I" "type_acc_eau_E" "type_acc_eau_C" "type_acc_eau_D" "type_acc _eau_B" "type_point_eau_F" "type_point_eau_I" "type_point_eau_N" "type_point_eau_A" "type_point_eau_P" "type_point_eau_L" "type_zone_eau_U" "type_zone_eau_S" "type_zone_eau_R" "type_zone_eau_P" "type_zone_eau_T" "type_zone_eau_C" "type_zone_eau_H" "type_reg_ass_N" "type_reg_ass_C" "type_reg_ass_R" "type_reg_ass_S" ) l_0 '( "b_b1" "b_b2" "b_b3" "b_b4" "type_cloture_01" "type_cloture_02" "b_p2" "b_p3" "type_affl_smuv_01" "type_affl_smuv_02" "type_affl_smuv_03" "type_affl_smuv_04" "type_pt_obj_01" "type_pt_obj_02" "type_pt_obj_99" "type_aff_smuv_01" "type_aff_smuv_02" "type_aff_smuv_03" "type_gmob_smuv_01" "type_gmob_smuv_02" "type_gmob_smuv_03" "type_gmob_smuv_04" "type_pmob_smuv_05" "type_pmob_smuv_06" "type_pmob_smuv_07" "type_pmob_smuv_08" "m_e2" "m_e1" "m_e4" "m_e5" "type_arr_smuv_01" "type_arr_smuv_02" "type_arr_smuv_03" "type_arr_smuv_05" "type_arr_smuv_06" "type_sign_smuv_01" "type_sign_smuv_02" "type_sign_smuv_03" "type_sign_smuv_04" "type_sign_smuv_05" "type_sign_smuv_06" "type_sign_ smuv_07" "ft_c1" "ft_c2" "ft_c3" "ft_c4" "ft_f1" "ft_f2" "ft_f3" "ft_f4" "t_s1" "t_s2" "t_s3" "t_s4" "ft_t1" "ft_t2" "ft_t3" "ft_t4" "ft_t5" "v_la1" "v_la2" "v_la3" "v_c1" "v_c2" "v_c3" ) l_13 '( "nature_elec_E_TRA" "nature_elec_C_TRA" "nature_elec_S_TRA" "nature_elec_I_TRA" "nature_elec_A_TRA" "nature_elec_E_RAC" "nature_elec_C_RAC" "nature_elec_S_RAC" "nature_elec_I_RAC" "nature_elec_A_RAC" "nature_elec_E_POS" "nature_elec_C_POS" "nature_elec_S_POS" ) ) (setq flag T l_lay nil) (while (setq tbl_lay (tblnext "LAYER" flag)) (if (wcmatch (cdr (assoc 2 tbl_lay)) "*--*") (setq l_lay (cons (cdr (assoc 2 tbl_lay)) l_lay)) ) (setq flag nil) ) (cond (l_lay (foreach el l_lay (setq js (ssget "_X" (list (cons 8 el) (cons 410 (getvar "CTAB"))))) (cond (js (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n))) find_str (substr el (+ 3 (vl-string-search "--" el))) ) (cond ((and (member find_str (ade_odtablelist)) (not (member find_str (ade_odgettables ent))) ) (ade_odaddrecord ent find_str) (foreach tbl (ade_odgettables ent) (setq l (mapcar 'cdar (cdaddr (ade_odtabledefn tbl)))) (foreach el l (if (wcmatch el "*_STAT") (ade_odsetfield ent tbl el 0 "A") ) (if (or (wcmatch el "*_TYPREG") (wcmatch el "*_TYPE") (wcmatch el "*_NATURE")) (cond ((and (eq (cdr (assoc 0 (entget ent))) "INSERT") (setq value (cdr (assoc 2 (entget ent))))) (cond ((member value l_der) (if (vl-string-position (ascii "_") value nil T) (ade_odsetfield ent tbl el 0 (if (> (strlen (substr value (+ 2 (vl-string-position (ascii "_") value nil T)))) 1) (substr value (+ 3 (vl-string-position (ascii "_") value nil T))) (substr value (+ 2 (vl-string-position (ascii "_") value nil T))) ) ) ) ) ((member value l_0) (if (vl-string-position (ascii "_") value nil T) (ade_odsetfield ent tbl el 0 (if (eq (substr value 1 3) "ft_") (substr value (+ 3 (vl-string-position (ascii "_") value nil T))) (strcat "0" (substr value (+ 2 (vl-string-position (ascii "_") value nil T)))) ) ) ) ) ((member value l_13) (if (substr value 13 1) (ade_odsetfield ent tbl el 0 (substr value 13 1)) ) ) ) ) ((and (member (cdr (assoc 0 (entget ent))) '("LINE" "ARC" "CIRCLE" "LWPOLYLINE" "POLYLINE" "SPLINE" "ELLIPSE" "SPLINE" "XLINE" "RAY" "MLINE" "MPOLYGON")) (setq value (cdr (assoc 6 (entget ent)))) ) (if (vl-string-position (ascii "_") value nil T) (ade_odsetfield ent tbl el 0 (if (eq (substr value 1 3) "ft_") (substr value (+ 3 (vl-string-position (ascii "_") value nil T))) (substr value (+ 2 (vl-string-position (ascii "_") value nil T))) ) ) ) ) ) ) (if (or (wcmatch el "*_LONG") (wcmatch el "*_LARG") (wcmatch el "*_ORIENT")) (cond ((eq (cdr (assoc 0 (entget ent))) "INSERT") (cond ((wcmatch el "*_LONG") ;(print (fix (* 1000 (cdr (assoc 41 (entget ent)))))) (ade_odsetfield ent tbl el 0 (fix (* 1000 (cdr (assoc 41 (entget ent)))))) ) ((wcmatch el "*_LARG") ;(print (fix (* 1000 (cdr (assoc 42 (entget ent)))))) (ade_odsetfield ent tbl el 0 (fix (* 1000 (cdr (assoc 42 (entget ent)))))) ) ((wcmatch el "*_ORIENT") (ade_odsetfield ent tbl el 0 (atof (angtos (cdr (assoc 50 (entget ent)))))) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) (prin1) )
  11. Je commence à être de moins en moins sure de moi avec toute ces conditions particulière à remplir, tente ceci... (defun c:NBAMBOUCAD ( / l_der l_0 l_13 flag l_lay tbl_lay js n ent find_str l value) (setq l_der '( "type_eq_ass_A" "type_eq_ass_M" "type_eq_ass_AG" "type_eq_ass_MG" "type_eq_ass_G" "type_eq_ass_I" "type_eq_ass_E" "type_eq_ass_C" "type_eq_ass_R" "type_eq_ass_L" "type_eq_ass_O" "type_eq_ass_D" "type_eq_ass_N" "type_eq_ass_U" "type_eq_ass_V" "type_eq_ass_S" "type_eq_ass_T" "type_eq_ass_H" "type_eq_ass_F" "type_eq_cu_B" "type_eq_cu_R" "type_eq_cu_V" "type_eq_cu_E" "type_eq_cu_D" "type_eq_cu_A" "type_sup_P" "type_sup_O" "type_sup_R" "type_sup_C" "type_arm_gaz_C" "type_arm_gaz_A" "type_arm_gaz_D" "type_eq_gaz_E" "type_eq_gaz_V" "type_eq_gaz_I" "type_eq_gaz_S" "type_eq_gaz_T" "type_eq_gaz_M" "type_eq_gaz_R" "type_eq_gaz_O" "type_eq_gaz_Q" "type_eq_gaz_N" "type_eq_gaz_P" "type_eq_gaz_C" "type_eq_gaz_B" "type_arm_rti_B" "type_arm_rti_L" "type_arm_rti_A" "type_arm_rti_F" "type_arm_rti_T" "type_arm_rti_M" "type_poste_rti_C" "type_poste_rti_P" "type_poste_rti_O" "type_poste_rti_D" "type_poste_rti_T" "type_poste_rti_M" "type_sup_P" "type_sup_O" "type_sup_R" "type_sup_C" "type_ptlum_smuv_C" "type_ptlum_smuv_L" "type_ptlum_smuv_B" "type_ptlum _smuv_P" "type_acc_eau_I" "type_acc_eau_E" "type_acc_eau_C" "type_acc_eau_D" "type_acc _eau_B" "type_point_eau_F" "type_point_eau_I" "type_point_eau_N" "type_point_eau_A" "type_point_eau_P" "type_point_eau_L" "type_zone_eau_U" "type_zone_eau_S" "type_zone_eau_R" "type_zone_eau_P" "type_zone_eau_T" "type_zone_eau_C" "type_zone_eau_H" "type_reg_ass_N" "type_reg_ass_C" "type_reg_ass_R" "type_reg_ass_S" ) l_0 '( "b_b1" "b_b2" "b_b3" "b_b4" "type_cloture_01" "type_cloture_02" "b_p2" "b_p3" "type_affl_smuv_01" "type_affl_smuv_02" "type_affl_smuv_03" "type_affl_smuv_04" "type_pt_obj_01" "type_pt_obj_02" "type_pt_obj_99" "type_aff_smuv_01" "type_aff_smuv_02" "type_aff_smuv_03" "type_gmob_smuv_01" "type_gmob_smuv_02" "type_gmob_smuv_03" "type_gmob_smuv_04" "type_pmob_smuv_05" "type_pmob_smuv_06" "type_pmob_smuv_07" "type_pmob_smuv_08" "m_e2" "m_e1" "m_e4" "m_e5" "type_arr_smuv_01" "type_arr_smuv_02" "type_arr_smuv_03" "type_arr_smuv_05" "type_arr_smuv_06" "type_sign_smuv_01" "type_sign_smuv_02" "type_sign_smuv_03" "type_sign_smuv_04" "type_sign_smuv_05" "type_sign_smuv_06" "type_sign_ smuv_07" "ft_c1" "ft_c2" "ft_c3" "ft_c4" "ft_f1" "ft_f2" "ft_f3" "ft_f4" "t_s1" "t_s2" "t_s3" "t_s4" "ft_t1" "ft_t2" "ft_t3" "ft_t4" "ft_t5" "v_la1" "v_la2" "v_la3" "v_c1" "v_c2" "v_c3" ) l_13 '( "nature_elec_E_TRA" "nature_elec_C_TRA" "nature_elec_S_TRA" "nature_elec_I_TRA" "nature_elec_A_TRA" "nature_elec_E_RAC" "nature_elec_C_RAC" "nature_elec_S_RAC" "nature_elec_I_RAC" "nature_elec_A_RAC" "nature_elec_E_POS" "nature_elec_C_POS" "nature_elec_S_POS" ) ) (setq flag T l_lay nil) (while (setq tbl_lay (tblnext "LAYER" flag)) (if (wcmatch (cdr (assoc 2 tbl_lay)) "*--*") (setq l_lay (cons (cdr (assoc 2 tbl_lay)) l_lay)) ) (setq flag nil) ) (cond (l_lay (foreach el l_lay (setq js (ssget "_X" (list (cons 8 el) (cons 410 (getvar "CTAB"))))) (cond (js (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n))) find_str (substr el (+ 3 (vl-string-search "--" el))) ) (cond ((and (member find_str (ade_odtablelist)) (not (member find_str (ade_odgettables ent))) ) (ade_odaddrecord ent find_str) (foreach tbl (ade_odgettables ent) (setq l (mapcar 'cdar (cdaddr (ade_odtabledefn tbl)))) (foreach el l (if (or (wcmatch el "*_TYPE") (wcmatch el "*_TYPEREG") (wcmatch el "*_NATURE")) (cond ((and (eq (cdr (assoc 0 (entget ent))) "INSERT") (setq value (cdr (assoc 2 (entget ent))))) (cond ((member value l_der) (progn (if (vl-string-position (ascii "_") value nil T) (ade_odsetfield ent tbl el 0 (substr value (+ 2 (vl-string-position (ascii "_") value nil T)))) ) ) ) ((member value l_0) (progn (if (vl-string-position (ascii "_") value nil T) (ade_odsetfield ent tbl el 0 (strcat "0" (substr value (+ 2 (vl-string-position (ascii "_") value nil T))))) ) ) ) ((member value l_13) (progn (if (substr value 13 1) (ade_odsetfield ent tbl el 0 (substr value 13 1)) ) ) ) ) ) ((and (member (cdr (assoc 0 (entget ent))) '("LINE" "ARC" "CIRCLE" "LWPOLYLINE" "POLYLINE" "SPLINE" "ELLIPSE" "SPLINE" "XLINE" "RAY" "MLINE" "MPOLYGON")) (setq value (cdr (assoc 6 (entget ent)))) ) (if (vl-string-position (ascii "_") value nil T) (ade_odsetfield ent tbl el 0 (substr value (+ 2 (vl-string-position (ascii "_") value nil T)))) ) ) ) ) ) ) ) ) ) ) ) ) ) ) (prin1) )
  12. Un peu compliqué ton histoire... Déjà quand tu dis "dernier caractère du nom du bloc ou ligne" Pour le nom du bloc je veux bien, mais le nom de la ligne je le pioche où? De plus j'ai du mal à saisir "dernier caractère" ou "0+dernier caractère" ou encore "13ème caractère", qu'est ce qui me permet de faire le distinguo entre ces 3 possibilités? Pour l'instant j'en suis rendu là, si tu veux essayer... (defun c:NBAMBOUCAD ( / flag l_lay tbl_lay js n ent find_str l value) (setq flag T l_lay nil) (while (setq tbl_lay (tblnext "LAYER" flag)) (if (wcmatch (cdr (assoc 2 tbl_lay)) "*--*") (setq l_lay (cons (cdr (assoc 2 tbl_lay)) l_lay)) ) (setq flag nil) ) (cond (l_lay (foreach el l_lay (setq js (ssget "_X" (list (cons 8 el) (cons 410 (getvar "CTAB"))))) (cond (js (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n))) find_str (substr el (+ 3 (vl-string-search "--" el))) ) (cond ((and (member find_str (ade_odtablelist)) (not (member find_str (ade_odgettables ent))) ) (ade_odaddrecord ent find_str) (foreach tbl (ade_odgettables ent) (setq l (mapcar 'cdar (cdaddr (ade_odtabledefn tbl)))) (foreach el l (if (or (wcmatch el "*_TYPE") (wcmatch el "*_TYPEREG") (wcmatch el "*_NATURE")) (if (setq value (cdr (assoc 2 (entget ent)))) (progn (if (vl-string-position (ascii "_") value nil T) (setq value (substr value (+ 2 (vl-string-position (ascii "_") value nil T)))) ) (ade_odsetfield ent tbl el 0 value) ) ) ) ) ) ) ) ) ) ) ) ) ) (prin1) )
  13. Ah ok ! c'est accessible uniquement en ARX/NET. Je pense pas appliquer cette méthode de si tôt, mais merci pour l'info.
  14. Alors d'après ce que j'ai compris, j'ai simplifié au maximum la procédure: Ne sélectionne automatiquement que les calques contenant "--" dans leurs noms pour attribuer la table aux objets contenu dans ces calques respectifs. Plus besoin de faire une sélection de calques. Le code se résume à cela: (defun c:NBAMBOUCAD ( / flag l_lay tbl_lay js n ent find_str) (setq flag T l_lay nil) (while (setq tbl_lay (tblnext "LAYER" flag)) (if (wcmatch (cdr (assoc 2 tbl_lay)) "*--*") (setq l_lay (cons (cdr (assoc 2 tbl_lay)) l_lay)) ) (setq flag nil) ) (cond (l_lay (foreach el l_lay (setq js (ssget "_X" (list (cons 8 el) (cons 410 (getvar "CTAB"))))) (cond (js (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n))) find_str (substr el (+ 3 (vl-string-search "--" el))) ) (if (and (member find_str (ade_odtablelist)) (not (member find_str (ade_odgettables ent))) ) (ade_odaddrecord ent find_str) ) ) ) ) ) ) ) (prin1) )
  15. Alors la j'apprends quelque chose, je pensais cela totalement impossible. Autrement le jeune Padawan s'emballe très fort, mais ses idées et les moyens à utiliser ont l'air confus. S'il ne propose pas quelque chose de concret, je ne sais pas si je vais suivre, parce ce que son soliloque...
  16. Avec ton fichier exemple, pour moi ça fonctionne. J'ai quand même fiabilisé le code pour éviter des erreurs de tables inconnues. (defun c:NBAMBOUCAD ( / flag l_lay tbl_lay js n ent) (setq flag T l_lay nil) (while (setq tbl_lay (tblnext "LAYER" flag)) (setq l_lay (cons (cdr (assoc 2 tbl_lay)) l_lay)) (setq flag nil) ) (setq l_lay (listbox "Calques du desin" "Choisir un ou plusieurs calques" (mapcar 'cons l_lay l_lay) 2)) (cond (l_lay (foreach el l_lay (setq js (ssget "_X" (list (cons 8 el) (cons 410 (getvar "CTAB"))))) (cond (js (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n)))) (if (and (member (substr el (- (strlen el) 3)) (ade_odtablelist)) (not (member (substr el (- (strlen el) 3)) (ade_odgettables ent))) ) (ade_odaddrecord ent (substr el (- (strlen el) 3))) ) ) ) ) ) ) ) (prin1) ) Fonction à remplacer, les autres de (gile) sont à conserver comme posté précédemment. Pour l'utilisation tu sélectionnes dans la liste proposée le/les calques à traiter. Pour un choix multiple maintenir la touche "Ctrl" lors des clics, pour tout sélectionner cliquer sur le 1er élément et avec l'ascenseur aller en bas de la liste et cliquer sur le dernier élément en maintenant la touche "Shift" enfoncé.Une fois la sélection effectuée, valider ET alors les tables de données d'objet seront attribués aux objets, pour peu que les tables existent et correspondent aux critères. Tu pourra voir que la plupart des bloc ont reçu leur table correspondante avec les valeur de champ par défaut.
  17. Sans pouvoir vraiment tester faute de DWG exemple, essayes ceci pour attribuer les tables. ; str2lst ;; Transforme un chaine avec séparateur en liste de chaines ;; ;; Arguments ;; str : la chaine à transformer en liste ;; sep : le séparateur ;; ;; Exemples ;; (str2lst "a b c" " ") -> ("a" "b" "c") ;; (str2lst "1,2,3" ",") -> ("1" "2" "3") (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) ;; ListBox (gile) ;; Boite de dialogue permettant un ou plusieurs choix dans une liste ;; ;; Arguments ;; title : le titre de la boite de dialogue (chaîne) ;; msg ; message (chaîne), "" ou nil pour aucun ;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...) ;; flag : 0 = liste déroulante ;; 1 = liste choix unique ;; 2 = liste choix multipes ;; ;; Retour : la clé de l'option (flag = 0 ou 1) ou la liste des clés des options (flag = 2) ;; ;; Exemple d'utilisation ;; (listbox "Présentation" "Choisir une présentation" (mapcar 'cons (layoutlist) (layoutlist)) 1) (defun ListBox (title msg keylab flag / tmp file dcl_id choice) (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) (write-line (strcat "ListBox:dialog{label=\"" title "\";") file ) (if (and msg (/= msg "")) (write-line (strcat ":text{label=\"" msg "\";}") file) ) (write-line (cond ((= 0 flag) "spacer;:popup_list{key=\"lst\";") ((= 1 flag) "spacer;:list_box{key=\"lst\";") (T "spacer;:list_box{key=\"lst\";multiple_select=true;") ) file ) (write-line "}spacer;ok_cancel;}" file) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "ListBox" dcl_id)) (exit) ) (start_list "lst") (mapcar 'add_list (mapcar 'cdr keylab)) (end_list) (action_tile "accept" "(or (= (get_tile \"lst\") \"\") (if (= 2 flag) (progn (foreach n (str2lst (get_tile \"lst\") \" \") (setq choice (cons (nth (atoi n) (mapcar 'car keylab)) choice))) (setq choice (reverse choice))) (setq choice (nth (atoi (get_tile \"lst\")) (mapcar 'car keylab))))) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) choice ) (defun c:NBAMBOUCAD ( / flag l_lay tbl_lay js n ent) (setq flag T l_lay nil) (while (setq tbl_lay (tblnext "LAYER" flag)) (setq l_lay (cons (cdr (assoc 2 tbl_lay)) l_lay)) (setq flag nil) ) (setq l_lay (listbox "Calques du desin" "Choisir un ou plusieurs calques" (mapcar 'cons l_lay l_lay) 2)) (cond (l_lay (foreach el l_lay (setq js (ssget "_X" (list (cons 8 el) (cons 410 (getvar "CTAB"))))) (cond (js (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n)))) (if (not (member (substr el (- (strlen el) 3)) (ade_odgettables ent))) (ade_odaddrecord ent (substr el (- (strlen el) 3))) ) ) ) ) ) ) ) (prin1) )
  18. Bonjour,Ton post est plus de ta réflexion sur le sujet que d'explications claires et précises de ce que tu veux faire. Comment ton fichier excel est tenu à jour pour mettre en corrélation les handles? Ou alors ton dessin est figé, tu ne bosse plus dessus (rajout de blocs/modifications d'objets) ! Y a des choses qui m'échappent... Cependant un petit exemple de code s'appuyant sur (listbox) créé par (gile), celui doit fonctionner dans n'importe quel dessin existant. Il permet de zoomer sur une entité en sélectionnant son handle dans la liste. ; str2lst ;; Transforme un chaine avec séparateur en liste de chaines ;; ;; Arguments ;; str : la chaine à transformer en liste ;; sep : le séparateur ;; ;; Exemples ;; (str2lst "a b c" " ") -> ("a" "b" "c") ;; (str2lst "1,2,3" ",") -> ("1" "2" "3") (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) ;; ListBox (gile) ;; Boite de dialogue permettant un ou plusieurs choix dans une liste ;; ;; Arguments ;; title : le titre de la boite de dialogue (chaîne) ;; msg ; message (chaîne), "" ou nil pour aucun ;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...) ;; flag : 0 = liste déroulante ;; 1 = liste choix unique ;; 2 = liste choix multipes ;; ;; Retour : la clé de l'option (flag = 0 ou 1) ou la liste des clés des options (flag = 2) ;; ;; Exemple d'utilisation ;; (listbox "Présentation" "Choisir une présentation" (mapcar 'cons (layoutlist) (layoutlist)) 1) (defun ListBox (title msg keylab flag / tmp file dcl_id choice) (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) (write-line (strcat "ListBox:dialog{label=\"" title "\";") file ) (if (and msg (/= msg "")) (write-line (strcat ":text{label=\"" msg "\";}") file) ) (write-line (cond ((= 0 flag) "spacer;:popup_list{key=\"lst\";") ((= 1 flag) "spacer;:list_box{key=\"lst\";") (T "spacer;:list_box{key=\"lst\";multiple_select=true;") ) file ) (write-line "}spacer;ok_cancel;}" file) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "ListBox" dcl_id)) (exit) ) (start_list "lst") (mapcar 'add_list (mapcar 'cdr keylab)) (end_list) (action_tile "accept" "(or (= (get_tile \"lst\") \"\") (if (= 2 flag) (progn (foreach n (str2lst (get_tile \"lst\") \" \") (setq choice (cons (nth (atoi n) (mapcar 'car keylab)) choice))) (setq choice (reverse choice))) (setq choice (nth (atoi (get_tile \"lst\")) (mapcar 'car keylab))))) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) choice ) (defun c:zoombyhandle ( / js n hdt l_hdt) (setq js (ssget "_X")) (cond (js (setq l_hdt nil) (repeat (setq n (sslength js)) (setq hdt (cdr (assoc 5 (entget (ssname js (setq n (1- n))) ) ) ) ) (if hdt (setq l_hdt (cons hdt l_hdt))) ) (command "_zoom" "_object" (cdar (entget (handent (listbox "HANDLES du dessin" "Choisir UN handle" (mapcar 'cons l_hdt l_hdt) 1)))) "") ) ) (prin1) )
  19. Bonjour, Pour une fois je vais contredire Didier. Pour moi la méthode qui utilise les handles est excellente. Aucun risque d'erreur possible pour faire une liaison avec un fichier externe quel qu'il soit. Dans Autocad faire une sélection d'objet grâce a son handle est aussi très fiable, aucun risque de sélectionner un autre objet proche ou surperposé les sélections peuvent se faire hors zone graphique, ce qui n'est pas le cas avec des coordonnées fournies quand on passe par (ssget) avec un point ou liste de points... J'ai récemment écrit un code qui faisait une liaison entre excel et des handles d'entité. Il en faudrait peu pour l'adapter à ton souhait si tu fournis un exemple (peut être juste un extrait) de ton DWG et XLS
  20. Bonjour, Je te redirige vers le forum de map où un sujet que j'ai initié pourrait t’intéresser. Propriétés d'objets vers Object Data (OD de Map) Après pour les attributs de bloc c'est possible, mais je n'ai pas de routine générique à te proposer. Il faudrait un exemple concret (NB: Y a pas de pièces jointes !)
  21. je veux pas polémiquer, mais avec l'aide on parle bien de pixel et Pour moi avec un "APERTURE" élevé l'accroche objet peut être inadéquate si le clic est un peu précipité ou imprécis. Un peu HS: Dans les très anciennes versions il y avait le mode 'RAPID (valeur 1024 de osmode) qui si je me souvient bien avait un peu l'effet de SORTENTS
  22. Bonjour, Ce qui me surprend ! Pourquoi écrire un code; en natif on peut faire cela sans difficulté? On écrit sa phrase en mode texte multi-ligne (TEXTMULT), il gère très bien les retours de ligne sans couper les mots suivant la largeur définie (que l'on peut faire varier comme on veut avec les poignées par exemple) Après si l'on veut des textes simples en plusieurs lignes, il suffit de décomposer ce dernier pour les obtenir. La seule chose à faire attention est le style de police utilisé ET surtout à ne pas forcer celui-ci dans l'éditeur car lors de la décomposition le résultat risque d'être différent. Ça me semble très souple comme utilisation...
  23. bonuscad

    Forme XX non définie

    Bonjour, Pour moi je dirais l'usage d'un type de ligne utilisant des formes (ou du texte), et le SHX correspondant n'est pas présent ou ne fait pas partie des chemins de recherche.
  24. Bien que je viens de découvrir un truc, mais je suis dans une impasse En effet je viens de remarquer que DWF TrueView a aussi sa console de commande.Pour me faire une idée j'ai lancer un executer "cmd" dans windows 10 Dans la console pour l'essai, j'ai fais: Donc TrueView accepte aussi les scripts, je me suis dis chouette. En m'appuyant sur les commandes disponibles J'ai donc tenté un script avec la commande DWGCONVERT LT_2010 Mais le retour n'est pas ce que j'attendais Alors soit c'est moi qui m'y prends mal, soit c'est impossible (mais alors, je ne comprends pas la présence de cette console sous TrueView) Je laisse le relai à celui qui aurais une idée, moi je sèche...
  25. Je ne percute que maintenant, mais la Core Console n'est disponible que depuis la version 2013. Donc pour toi, seule solution restante; les scripts traditionnels utilisant l'interface graphique. NB: J'ai l'impression que tu cherche à convertir des fichiers de version supérieur à ta version actuelle. Si c'est le cas, cela ne sera pas possible avec ta version 2010 Le seul moyen reste alors d'installer une version de DWGTRUEVIEW au moins équivalent à la version des fichiers que tu veux convertir. Eclaire nous STP!
×
×
  • 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é