Aller au contenu

Echelle de hachure


Sami2601

Messages recommandés

Bonjour tout le monde,

 

J'ai une fonction qui permet de changer les hachures d'un calque avec une échelle.

(defun c:HatchReben ()
  ; Set variables for layer name, new hatch pattern, hatch scales, and hatch color
  (setq layerName "01232 - Bodenbedeckung - Reben Füllfläche"
        newHatchPattern "GB_REBEN"
        hatchscales 0.25
        hatchColor '(130 130 130)) ; RGB color (130, 130, 130)
  
  ; Check if the specified layer exists
  (if (tblsearch "LAYER" layerName)
    (progn
      ; Get information about the existing layer
      (setq oldLayer (tblsearch "LAYER" layerName))
      (setq oldLayerColor (cdr (assoc 62 oldLayer)))
      (setq oldLayerLinetype (cdr (assoc 6 oldLayer)))
      (setq oldLayerLinetypescales (cdr (assoc 48 oldLayer)))
    )
    ; Display a message if the layer is not found
    (prompt (strcat "\nLayer " layerName " not found."))
  )
  
  ; Select all hatches on the specified layer
  (setq ss (ssget "X" (list (cons 8 layerName) (cons 0 "HATCH"))))
  
  ; Check if hatches are found on the specified layer
  (if ss
    (progn
      (setq i 0)
      ; Loop through each selected hatch
      (while (< i (sslength ss))
        ; Get the entity name of the hatch
        (setq hatchEntity (ssname ss i))
        ; Get the layer of the hatch
        (setq hatchLayer (cdr (assoc 8 (entget hatchEntity))))
        
        ; Check if the hatch is on the specified layer
        (if (= hatchLayer layerName)
          (progn
            ; Modify the hatch entity to change its pattern and scales
            (entmod (subst (cons 2 newHatchPattern) (assoc 2 (entget hatchEntity)) (entget hatchEntity)))
            (entmod (subst (cons 41 hatchscales) (assoc 41 (entget hatchEntity)) (entget hatchEntity)))
            
            ; Change hatch color to RGB (130, 130, 130)
            (entmod (subst (cons 62 hatchColor) (assoc 62 (entget hatchEntity)) (entget hatchEntity)))
            
            ; Restore original layer properties
            (entmod (subst (cons 6 oldLayerLinetype) (assoc 6 (entget hatchEntity)) (entget hatchEntity)))
            (entmod (subst (cons 48 oldLayerLinetypescales) (assoc 48 (entget hatchEntity)) (entget hatchEntity)))
          )
        )
        ; Move to the next hatch in the selection set
        (setq i (1+ i))
      )

Le problème c'est que bien que l'échelle soit correcte quand on vérifie sur les propriétés de la hachure, mais visuellement elle ne l'est pas. Si on remodifie manuellement l'échelle en remettant la même valeur (sur cet exemple 0.25) dans les propriétés de la hachure sélectionnée, ca marche.

Quelqu'un aurait il une idée sur la provenance de ce problème?

 

Je vous remercie d'avance.

Meilleures salutations.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @Sami2601

Je n'ai pas envie de chercher à comprendre le travail des autres aussi je propose cette routine qui demande de cliquer sur une entité Hachure et qui modifie toutes les hachures du calque de l'entité exemple en ansi31 échelle 0.5, est-ce que ça vous va ?
 

Je ne change pas l'angle de la hachure

Je peux la retravailler en faisant des demandes en ligne de commande au lieu de cliquer une entité.
Changer les valeurs de nom de hachure et d'échelle dans le code pour coller à vos besoins pour l'instant.

La commande à taper est "sami2601"

Amicalement

(defun c:sami2601 ( / ec ex ln n ob ss typh)
    (setq ex (car (entsel "\nCliquez sur la hachure pour détecter le calque :\n")))
    (if (= (cdr (assoc 0 (entget ex))) "HATCH")
        (progn
            (setq typh "ansi31" ec 0.5
                  ln (cdr (assoc 8 (entget ex)))
                  ss (ssget "X" (list (cons 8 ln) (cons 0 "HATCH")))
                  )
            (repeat (setq n (sslength ss))
                (setq ob (vlax-ename->vla-object (ssname ss (setq n (1- n)))))
                (vla-put-patternscale ob ec)
                (vla-SetPattern ob acHatchPatternTypePreDefined typh)
                )
            )
        (alert" l'entité n'est pas une hachure ")
    )
    )

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @philsogood

Je te remercie pour l'alerte, je corrige de ce pas.
je n'en peux plus de tes fautes de praffes j'en fais donc tant que ça ?
Je l'aurais sans doute vue tout seul et corrigée, mais puisque tu m'alertes, ce sera encore plus rapide.

Se relire et se relire encore permet d'éviter 90 % des fautes de frappe ou d'orthographe, ce serait bien que cette règle soit plus appliquée (hihi).

Amicalement

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é