Aller au contenu

commande polyligne avec largeur globale


Zaher_chn

Messages recommandés

@Zaher_chn

Bonjour,

Une autre méthode possible avec juste une sélection.

Pour cela il faudrait que tu décompose le bloc qui représente tes contours de mur et appliquer le code suivant.

Avec ton dessin de test, ça à l'air de fonctionner.

(defun c:zaher ( / ss modelSpace e_first p_s p_e n e pt_s pt_e off prm pt lst_pt nw_pl)
  (setq ss (ssget '((0 . "LWPOLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 1) (-4 . "NOT>"))))
  (cond
    (ss
      (setq modelSpace (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))))
      (while (> (sslength ss) 0)
        (setq
          e_first (ssname ss 0)
          p_s  (vlax-curve-getStartPoint e_first)
          p_e (vlax-curve-getEndPoint e_first)
        )
        (ssdel e_first ss)
        (repeat (setq n (sslength ss))
          (setq
            e (ssname ss (setq n (1- n)))
            pt_s (vlax-curve-getStartPoint e)
            pt_e (vlax-curve-getEndPoint e)
          )
          (cond
            ((member (setq off (distance p_s pt_s)) '(15.0 18.0 20.0))
              (setq prm -1)
              (repeat (1+ (fix (vlax-curve-getEndParam e_first)))
                (setq
                  pt
                  (mapcar '*
                    (mapcar '+
                      (vlax-curve-getPointAtParam e_first (setq prm (1+ prm)))
                      (vlax-curve-getPointAtParam e prm)
                    )
                    '(0.5 0.5 0.5)
                  )
                  lst_pt (cons (list (car pt) (cadr pt)) lst_pt)
                )
              )
              (setq nw_pl (vlax-invoke modelSpace 'AddLightWeightPolyline (apply 'append lst_pt)))
              (vlax-put nw_pl 'ConstantWidth off)
              (cond
                ((eq off 20.0) (vlax-put nw_pl 'Layer "_MTH_Voile extérieur ht 2.80m_280"))
                ((or (eq off 15.0) (eq off 18.0)) (vlax-put nw_pl 'Layer "_MTH_Voile intérieur ht 2.60m_260"))
              )
              (ssdel e ss)
              (setq lst_pt nil)
            )
          )
        )
      )
    )
  )
  (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 @didier,

Je viens de tester le code que tu as fait et il fonctionne comme je le voulais.

 

Merci @bonuscad pour ta proposition de code. L'idée de vouloir tout faire d'un seul coup est géniale et ça me ferait gagner énormément de temps.

Etant donnée que tu as pris le temps de réaliser ce code, je me permets de te faire un retour sur les points négatifs que j'ai trouvé:

- il ne fonctionne pas avec les blocs, les lignes ou xref comparé a celui de @didier

- lorsqu'il y'a des portes ou fenêtre, la polyligne n'est pas créée au niveau de celles-ci

- les plans doivent être parfaitement dessinés sinon le code ne fonctionne pas ou bien il crée des polylignes orientées différemment du voile (les plans archi/structure ne le sont pas tous)

- les polylignes créées sont jointes alors qu'il est intéressant pour moi d'avoir une polyligne droite

Je ne suis pas très bon dans la programmation autolisp, je suis justement en train d'apprendre et il me semble que ton code se base sur les calques créés ce qui fait qu'il ne comprends pas lorsqu'un mur a une épaisseur différente.

Je tiens quand même à te remercier pour le temps que tu as mit deçu.

Zaher 🙂

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @Zaher_chn

SI le dessin est bien fait, toujours dans les mêmes normes et que l'on trouve les mêmes entités, la programmation devient efficace.

SI le dessin est des fois des blocs, des fois des lignes, des fois des polylignes des fois des XREF, la programmation devient très compliquée pour gérer tous les cas possibles.

C'est pour cette raison que je t'ai proposé quelque chose "entre les deux" c'est du dessin assisté suite à la saisie de l'utilisateur.

On ne pourra guère faire mieux avec les entrants que tu as.

Amicalement

 

Lien vers le commentaire
Partager sur d’autres sites

OK @Zaher_chn

Je suis content pour toi, le but est atteint.


Il faut comprendre et je pense que tu l'as bien compris (à l'inverse de dc01 ) que les questions que l'on pose pour aider sont utiles pour trouver la solution.
Si l'on devait continuer à se faire mordre ainsi, on aiderait beaucoup moins.
Dans les dernières décennies tout s'est bien passé, ce n'est que depuis peu que les "gens" deviennent agressifs, je regrette bien amèrement ces changements d'attitude.

Amicalement

 

  • Like 2
Lien vers le commentaire
Partager sur d’autres sites

  • 3 mois après...

Bonjour @didier,

Je reviens vers toi car, comme tu l'avais prédis, j'aurais besoin d'une petite amélioration concernant le petit programme que tu as crée précédemment.

En effet, lorsque je change de SCU (autre que le général), la polyligne ne se crée par correctement car ses coordonnées et sa largeur changent aléatoirement.

Ce n'est pas très grave car je n'ai juste qu'a travailler sur le SCU général au lieu de le changer mais ce serait plus pratique si je pouvais éviter de le faire tout le temps 🙂

Merci encore ce que t'as déjà fait, il m'est très utile 🙂

Lien vers le commentaire
Partager sur d’autres sites

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é