bonuscad Posté(e) le 14 août 2023 Posté(e) le 14 août 2023 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
bonuscad Posté(e) le 14 août 2023 Posté(e) le 14 août 2023 NB: Enlever le "_X" à la fonction (ssget) si tu veux pouvoir sélectionner les blocs manuellement et non pas toutes les insertions du dessin Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
rebcao Posté(e) le 15 août 2023 Posté(e) le 15 août 2023 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 @)
bonuscad Posté(e) le 17 août 2023 Posté(e) le 17 août 2023 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
bonuscad Posté(e) le 17 août 2023 Posté(e) le 17 août 2023 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
rebcao Posté(e) le 17 août 2023 Posté(e) le 17 août 2023 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 : 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 @)
bonuscad Posté(e) le 22 août 2023 Posté(e) le 22 août 2023 @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
bonuscad Posté(e) le 27 août 2023 Posté(e) le 27 août 2023 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 1 Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant