Aller au contenu

tabloblo ne marche plus snifff


x_all

Messages recommandés

bonjour

 

et bonjour Tramber :)

 

avant le changement d'ordi, la copine éléctrique se servait beaucoup de tabloblo...

depuis notre remembrement informatique, seule la 1ere ligne est remplie dans le tableau qui a vue de nez comporte le bon nombre de ligne

 

le message en ligne de commande est:

Commande: TABLOBLO

Sélectionnez les blocs ou [Objet/Tous/Sélection] <Sélection>: s

Choix des objets: Spécifiez le coin opposé: 14 trouvé(s)

Choix des objets:

Point d'insertion: ; erreur: une exception s'est produite: 0xC0000005

(Violation d'accès)

; avertissement: fonction unwind ignorée erreur inconnue

Commande:

 

j'ai bien essayer de lancer avec l'éditeur Vlisp ouvert pour essayer de trouver la panne,

la le message est :

(LAMBDA (N) (= N (NTH CONT LIBLOC)))

 

et la source de la dernière interruption est :CALLBACK-ENTRY

 

Ca ne m'avance pas plus....

cette routine marchait très bien sous XP avec le même autocad 2009... j'ai supposé naïvement que ça venait de W7... que né-ni, sur mon poste avec autocad 2013 ça marche.....

 

testé sur 2 autres poste avec 2009 et W7... idem....

 

 

un lien vers la dernière version de tabloblo que j'ai trouvé car celle de chez nous datait un peu, mais cette dernière pose aussi pb...

 

 

une idée??

merci

Lien vers le commentaire
Partager sur d’autres sites

Si tu me dis que ça peut marcher avec une 2013, quelque soit la plate-forme, alors je suis comme un rond de flan. Cette routine datant sans doute de 2007, en tous cas d'une V2007.

 

Je pointe sur un autre post du sujet. Vois si il n'y a pas un réglage dans les styles de tableaux... je n'ai pas de V2009 et tout marche sur 2010 en W7-64.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Point d'AutoCAD sous la main pour tester mais voici la derniere version

que je possede de TABLOBLO : version 2.05

 

Arrêtez de dire que c'est ma routine ! C'est plutôt un Open-source :(rires forts):

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Le problème vient du passage en 64bits et de la propriété ObjectId.

Voici une petite modif qui devrait fonctionner en 32 et 64bits (testé vite fait en 64bits uniquement):

 

(defun c:tabloblo (/ libloc liidbloc ss ss liref ptins tableVL cont)
;;;  (prompt "\nSélectionnez les blocs à lister ou < Tous >")
;;;
;;;  (setq ssu (ssget '((0 . "INSERT"))))
;;;
;;;  (setq sst  (ssget "_X" '((0 . "INSERT"))))
 (vl-load-com)
 (or *acad* (setq *acad* (vlax-get-acad-object)))
 (initget "Objet Tous Sélection")
 (setq kw
        (getkword
          "\nSélectionnez les blocs ou [Objet/Tous/Sélection] <Sélection>: "
        )
 )
 (cond
   ((= kw "Objet")
    (and
      (setq ent
             (car (entsel "\nSélectionnez le cercle, l'ellipse ou la polyligne: ")
             )
      )
      (setq typ (cdr (assoc 0 (entget ent))))
      (or (member typ '("CIRCLE" "ELLIPSE"))
          (and (= typ "LWPOLYLINE")
               (= 1 (logand 1 (cdr (assoc 70 (entget ent)))))
          )
      )
      (setq ss (SelByObj ent "Wp" '((0 . "INSERT"))))
    )
   )
   ((= kw "Tous") (setq ss (ssget "_X" '((0 . "INSERT")))))
   (T (setq ss (ssget '((0 . "INSERT")))))
 )
 (if ss
   (setq liref
          (mapcar '(lambda (x)
                     (setq x (vlax-ename->vla-object x))
                     (if (vlax-property-available-p x 'EffectiveName)
                       (vla-get-EffectiveName x)
                       (vla-get-Name x)
                     )
                   )
                  (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
          )
   )
   (setq liref '())
 )
 (if ss
   (setq libloc   (remove_doubles
                    (mapcar
                      '(lambda (x)
                         (setq x (vlax-ename->vla-object x))
                         (if (vlax-property-available-p x 'EffectiveName)
                           (vla-get-EffectiveName x)
                           (vla-get-Name x)
                         )
                       )
                      (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
                    )
                  )
         liidbloc (mapcar
                    '(lambda (x)
                       (gc:ObjectId32
                         (vla-item
                           (vla-get-Blocks
                             (vla-get-activedocument
                               (vlax-get-acad-object)
                             )
                           )
                           x
                         )
                       )
                     )
                    libloc
                  )
         liref (vl-remove-if-not '(lambda (n) (member n libloc)) liref)
   )
   (vlax-for i (vla-get-Blocks
                 (vla-get-activedocument (vlax-get-acad-object))
               )
     (if (and (/= (substr (vla-get-name i) 1 1) "*")
              (= :vlax-false (vla-get-IsXref i))
         )
       (setq libloc   (append libloc (list (vla-get-name i)))
             liidbloc (append liidbloc (list (gc:ObjectId32 i)))
       )
     )
   )
 )
 (setq ptins (getpoint "\nPoint d'insertion: "))
 (vl-load-com)
 (setq tableVL (vla-addtable
                 (vla-get-modelspace
                   (vla-get-activedocument (vlax-get-acad-object))
                 )
                 (vlax-3d-point ptins)
                 (length libloc)
                 3
                 20
                 100
               )
 )
 (vla-put-TitleSuppressed tableVL :vlax-true)
 (vla-put-HeaderSuppressed tableVL :vlax-true)
 (vla-UnmergeCells tableVL 0 0 0 0)
 (setq cont -1)
 (repeat (vla-get-Rows tableVL)
   (vla-settext
     tableVL
     (setq cont (1+ cont))
     0
     (nth cont libloc)
   )
   (vla-settext
     tableVL
     cont
     1
     (length (vl-remove-if-not
               '(lambda (n) (= n (nth cont libloc)))
               liref
             )
     )
   )
   (vla-SetBlockTableRecordId
     tableVL
     cont
     2
     (nth cont liidbloc)
     :vlax-true
   )
   (vla-setcellalignment tableVL cont 0 5)
   (vla-setcellalignment tableVL cont 1 5)
 )
 (princ)
)

;;; REMOVE_DOUBLES - Suprime tous les doublons d'une liste
(defun REMOVE_DOUBLES (lst)
 (cond
   ((atom lst) lst)
   (T
    (cons (car lst) (REMOVE_DOUBLES (vl-remove (car lst) lst)))
   )
 )
)

;;; SelByObj -Gilles Chanteau- 06/10/06
;;; Crée un jeu de sélection avec tous les objets contenus ou  capturés,
;;; dans la vue courante, par un objet (cercle, ellipse, polyligne fermée)
;;; Arguments :
;;; - ent : un objet (ename ou vla-object)
;;; - opt : un mode de sélection (Cp ou Wp)
;;; - fltr : un filtre de sélection (liste) ou nil
;;;
;;; modifié le 26/07/07 : fonctionne avec les objets hors fenêtre
(defun SelByObj (ent opt fltr / obj dist n lst prec dist p_lst ss)
 (if (= (type ent) 'ENAME)
   (setq obj (vlax-ename->vla-object ent))
   (setq obj ent
         ent (vlax-vla-object->ename ent)
   )
 )
 (cond
   ((member (vla-get-ObjectName obj) '("AcDbCircle" "AcDbEllipse"))
    (setq dist (/ (vlax-curve-getDistAtParam
                    obj
                    (vlax-curve-getEndParam obj)
                  )
                  50
               )
          n    0
    )
    (repeat 50
      (setq
        lst
         (cons
           (trans
             (vlax-curve-getPointAtDist obj (* dist (setq n (1+ n))))
             0
             1
           )
           lst
         )
      )
    )
   )
   ((and (= (vla-get-ObjectName obj) "AcDbPolyline")
         (= (vla-get-Closed obj) :vlax-true)
         )
    (setq p_lst (vl-remove-if-not
                  (function
                    (lambda (x)
                      (or (= (car x) 10)
                          (= (car x) 42)
                      )
                    )
                  )
                  (entget ent)
                )
    )
    (while p_lst
      (setq
        lst
         (cons
           (trans (append (cdr (assoc 10 p_lst))
                                (list (cdr (assoc 38 (entget ent))))
                        )
                        ent
                        1
           )
           lst
         )
      )
      (if (/= 0 (cdadr p_lst))
        (progn
          (setq prec (1+ (fix (* 25 (sqrt (abs (cdadr p_lst))))))
                dist (/ (- (if (cdaddr p_lst)
                             (vlax-curve-getDistAtPoint
                               obj
                               (trans (cdaddr p_lst) ent 0)
                             )
                             (vlax-curve-getDistAtParam
                               obj
                               (vlax-curve-getEndParam obj)
                             )
                           )
                           (vlax-curve-getDistAtPoint
                             obj
                             (trans (cdar p_lst) ent 0)
                           )
                        )
                        prec
                     )
                n    0
          )
          (repeat (1- prec)
            (setq
              lst (cons
                    (trans
                        (vlax-curve-getPointAtDist
                          obj
                          (+ (vlax-curve-getDistAtPoint
                               obj
                               (trans (cdar p_lst) ent 0)
                             )
                             (* dist (setq n (1+ n)))
                          )
                        )
                        0
                        1
                      )
                    lst
                  )
            )
          )
        )
      )
      (setq p_lst (cddr p_lst))
    )
   )
 )
 (cond
   (lst
    (vla-ZoomExtents *acad*)
    (setq ss (ssget (strcat "_" opt) lst fltr))
    (vla-ZoomPrevious *acad*)
    ss
   )
 )
)

(defun gc:ObjectId32 (obj)
 (if (vlax-method-applicable-p obj 'ObjectId32)
   (vla-get-ObjectId32 obj)
   (vla-get-ObjectId obj)
 )
)

 

J'ai remplacé les vla-get-ObjectId par gc:ObjectId32 de (gile), et rajouté un vla-UnmergeCells car les cellules de la 1ère ligne du tableau étaient fusionnées par défaut (il me semble que ce n'était pas le cas avant, peut-être une différence de la 2013).

Lien vers le commentaire
Partager sur d’autres sites

ha lala....

je vous remercie tous de votre attention, mais rien n'y fait...

 

@bryce, loin de moi l'idée d'avoir une idée d'ou ça viens, mais je ne suis même pas sur que le pb vienne de W7 64 ou 32 car sur mon poste qui est aussi sous W7 64 ça marche avec acad2013...

 

une option ou un dll lié a windows qui diffère sur les 2 autocad? genre un de leur foutu framework visual machin ???

 

on dirai que la fonction plante au moment ou doit être dessiner le 1er bloc à la fin de la 1ere ligne qui n'est pas une entête du tableau...

 

ben tampis pour ma copine électicienne, elle comptera ses bloc avec bcnt...

 

merci encore....

mais si personne n'a eu ce pb avant ça vien peut etre encore d'autre chose... ces configs sont toutes neuves, et on est pas au bout de nos surprises...

 

je retourne à ma formation revit......

Lien vers le commentaire
Partager sur d’autres sites

Les styles de tableaux sont bien les mêmes ! On ne sait jamais, même si je pense que ca n'est pas la source.

Merci Bryce, ce code ne vient pas de moi je crois et c'est pour cela que je n'ai pas tilté, je crois que je dressais la liste des blocs autrement dans mon idée originelle.

Il faut noter ta version alors !

LeCrabe si tu nous entends ?

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Voui, voui votre devoue Decapode est la ...

 

J'ai sauvegarde sur mon PC le nouveau TABLOBLO de Bryce en vs 3.00 !

 

MAIS je n'ai rien teste !

 

Pour Info SVP , vous l'avez testee avec quelle version d'AutoCAD ? et 32 ou 64 bits ?

 

lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

oups j'étais loin du clavier... enfin du forum :)

 

les postes sont sous W7 64, mais je suis pas sur que ce soit la peine de trop fouiller, sur tout si je suis le seul à avoir ce pb. Comme je disais, on passera par bcnt pour compter les bloc, notre électricienne à quasiment qu'une seule légende qu'elle posent sur tous les plans, le comptage des blocs ne sert qu'au quantitatif. Mais elle trouve le résultat de tabloblo plus joli et plus lisible...

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é