Aller au contenu

Archive


sofianerm

Messages recommandés

Bonjour,

Essaye ceci !

(defun c:test ( / ss n ent n_ent dxf_ent l_start l_end)
  (setq ss (ssget "_X" '((0 . "INSERT") (8 . "CAESAR-Bac-Platte") (66 . 1) (2 . "CLAM-2#00"))))
  (cond
    (ss
      (repeat (setq n (sslength ss))
        (setq
          ent (ssname ss (setq n (1- n)))
          n_ent ent
        )
        (while (/= (cdr (assoc 0 (setq dxf_ent (entget (setq n_ent (entnext n_ent)))))) "SEQEND")
          (if (eq (cdr (assoc 2 dxf_ent)) "POINT1")
            (setq l_start (cons (cdr (assoc 10 dxf_ent)) l_start))
            (setq l_end (cons (cdr (assoc 10 dxf_ent)) l_end))
          )
        )
      )
      (setq
        l_start (vl-sort (mapcar '(lambda (x) (list (car x) (cadr x))) l_start) '(lambda (e1 e2) (> (cadr e1) (cadr e2))))
        l_end (vl-sort (mapcar '(lambda (x) (list (car x) (cadr x))) l_end) '(lambda (e1 e2) (> (cadr e1) (cadr e2))))
      )
      (mapcar
        '(lambda (x y)
          (entmake
            (list
              '(0 . "LWPOLYLINE")
              '(100 . "AcDbEntity")
              '(67 . 0)
              '(410 . "Model")
              '(8 . "_CAESAR Flexible")
              '(100 . "AcDbPolyline")
              '(90 . 2)
              '(70 . 0)
              '(43 . 0.0)
              '(38 . 0.0)
              '(39 . 0.0)
              (cons 10 x)
              '(40 . 0.0)
              '(41 . 0.0)
              (cons 42 -0.5)
              '(91 . 0)
              (cons 10 y)
              '(40 . 0.0)
              '(41 . 0.0)
              '(42 . 0.0)
              '(91 . 0)
              '(210 0.0 0.0 1.0)
            )
          )
        )
        (cdr l_start)
        (vl-remove (last l_end) l_end)
      )
    )
  )
  (prin1)
)

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Pour ce genre de problème, j'aime bien utiliser EXCEL et en plus c'est compatible pour les versions LT... Voici un exemple dans ce ZIP...

1. Tu décompresses et tu replaces le dossier tel quel :

       C:\_MNU_sur_C_AUTODESK\LiaisonARC

2. Tu importes la palette d'outils : 91-liaisons_ARC-V1.xtp qui se trouve dans le dossier 

       C:\_MNU_sur_C_AUTODESK\LiaisonARC\SV_palettes

3. Tu ouvres le dessin TEST : 230811_Exemple_arc-REBCAO.dwg  que j'ai du modifier ! Les BLOCS P1 et P2 avaient tous un point d'insertion Décalé et j'ai ajouté les blocs POINT01 et POINT02 dans les deux blocs P1 et P2 qui me permettent de trouver les points d'accrochage !

4. Tu cliques sur l'icone de la palette Calcul LIAISONS (attrib. OBS...).

5. Tu sélectionnes une "colonne" de plancher... puis ENTREE.

6. Un tableau EXCEL s'ouvre et se referme automatiquement

7. Tu cliques sur l'icone de la palette  insérer LIAISONS

 

Tu me dis si tu as des questions ?

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

Citation

Il faudrait prendre en compte l'ordre de selection, a savoir la connexion entre P2 de la plaque N et le P1 de la plaque N+1. 

Tu peux essayer sous cette forme: oblige une sélection dans l'ordre UNE à UNE...

(defun c:test ( / sel ent dxf_ent n_ent l_start l_end)
  (while (setq sel (entsel "\nSélectionner les blocs CLAM dans l'ordre UN à UN: "))
    (cond
      (sel
        (setq
          ent (car sel)
          dxf_ent (entget ent)
        )
        (cond
          ((and
            (eq (cdr (assoc 0 dxf_ent)) "INSERT")
            (eq (cdr (assoc 8 dxf_ent)) "CAESAR-Bac-Platte")
            (equal (assoc 66 dxf_ent) '(66 . 1))
            (wcmatch (cdr (assoc 2 dxf_ent)) "CLAM-2#00")
           )
            (setq n_ent ent)
            (while (/= (cdr (assoc 0 (setq dxf_ent (entget (setq n_ent (entnext n_ent)))))) "SEQEND")
              (if (eq (cdr (assoc 2 dxf_ent)) "POINT1")
                (setq l_start (cons (cdr (assoc 10 dxf_ent)) l_start))
                (setq l_end (cons (cdr (assoc 10 dxf_ent)) l_end))
              )
            )
          )
          (T (princ "\nN'est pas un bloc CLAM!"))
        )
      )
    )
  )
  (cond
    ((and l_start l_end)
      (mapcar
        '(lambda (x y)
          (entmake
            (list
              '(0 . "LWPOLYLINE")
              '(100 . "AcDbEntity")
              '(67 . 0)
              '(410 . "Model")
              '(8 . "_CAESAR Flexible")
              '(100 . "AcDbPolyline")
              '(90 . 2)
              '(70 . 0)
              '(43 . 0.0)
              '(38 . 0.0)
              '(39 . 0.0)
              (cons 10 x)
              '(40 . 0.0)
              '(41 . 0.0)
              (cons 42 (if (< (cadr y) (cadr x)) 0.5 -0.5))
              '(91 . 0)
              (cons 10 y)
              '(40 . 0.0)
              '(41 . 0.0)
              '(42 . 0.0)
              '(91 . 0)
              '(210 0.0 0.0 1.0)
            )
          )
        )
        (cdr (reverse l_start))
        (vl-remove (last (reverse l_end)) (reverse l_end))
      )
    )
  )
  (prin1)
)

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

il y a une heure, sofianerm a dit :

@bonuscad merci énormément, ca a l'air de fonctionner parfaitement !!!! 

J'ai supprimé la ligne (wcmatch (cdr (assoc 2 dxf_ent)) "CLAM-2#00") car mon bloc ne possède pas forcement cette structure de nom.

J'essaie de comprendre le code, comment cela se fait t'il que tu ne recuperes pas l'attribut POINT2 et que tu arrives a faire la liaison ? 

Il ne me reste que l'insertion des blocs aller_froid et retour_froid.

@sofianerm

Tes blocs n'ont que deux attributs, donc si l’étiquette et POINT1 alors je stocke le point d'insertion dans la liste des points de départ autrement par défaut sera forcément le POINT2 donc l'insertion sera stocké dans la liste des points finaux: listes l_start et l_end

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Pour respecter un ordre précis, il faudrait ajouter un N° d'ordre à tes planchers et là le TRI se ferait sur le N° ! J'ai d'ailleurs ajouté un ATTRIBUT pour le N° de PLANCHER sur les 2 BLOCS...

Pour l'instant je fais un TRI sur l'axe Y... Mais ça fonctionne quand même, même s'il ne sont pas alignés en X, voici un exemple du résultat :

illustration_liaison_ARC.png 

Je comprends que tu n'ai pas la main, mais ce serait dommage de te priver de cet outil, en expliquant l'intérêt à tes gentils informaticiens, il pourront te donner l'autorisation ! Je peux leur expliquer... 😁

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

@sofianerm

Citation

Il faudrait que j'insere un bloc aller_froid dans les coordonnées de la 1ere entité de la liste l_start et pour le bloc retour_froid, je l'insere dans les coordonnées que je recupere de la derniere entité de la liste l_end. Je pourrai créer un attribut PCENTRE egalement dans ces blocs, pour définir le point de réference.

Essaye le fichier joint

rac_circuit_panneaux.lsp

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Le 25/08/2023 à 16:44, sofianerm a dit :

Salut @bonuscad merci beaucoup pour ton aide. 

Ca a l'air de bien fonctionner, je vais continuer mes tests. Le seul soucis est qu'il y a un également la valeur de PCENTRE qui s'affiche.

 

Soit tu peux faire le manuellement dans l'éditeur de bloc et rendre la définition d'attribut invisible puis utiliser ATTSYNC dans le dessin

Soit réutiliser le code où j'ai rendu l'attribut invisible (j'ai simplement passé le code dxf 70 de 0 à 1 pour la définition d'attribut et l'attribut lors de l'insertion) pour que ce soit effectif dans d'autres dessins n'ayant pas encore ce bloc PCENTRE.

rac_circuit_panneaux.lsp

  • Like 1

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

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é