Aller au contenu

INTERVENTION SUR TEXTMULT DE DIMENSION ( DES COTES )


PHILPHIL

Messages recommandés

bonjour

 

j'ai récupérer des fichiers  REVIT ou ARCHICAD

sur toutes les cotations,  la largeur totale de la regle du  texte  ( quand on double clique dessus ) de cote     est énorme  (le "width" du textmult de la cotation est énorme.)

sur certaines il y a un meme un masque de texte, ce qui fait que quand les cotes sont sur l'avant plan, ca m occulte une partie des entités dessin.

OUI JE N'ai qu'a mettre les cotations en arriere plan, mais ca ne régle pas efficacement le problème pour autant, et pour les suivants.

avez vous un lisp ou bout de lisp , ou vous intervenez sur le textmult de la cotation que je puisse changer le "width" du textmult en 0 de toutes les cotations ?

merci

Phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Salut, la routine suivante passe la largeur du MText de la cote passé en argument à 0 (il faut chercher le MText dans le bloc anonyme (*D...) de la côte.
 

(defun dimTextWidthTo0 (dim / blk break ent dxf)
  (setq	blk (tblsearch "block" (cdr (assoc 2 (entget dim))))
	ent (cdr (assoc -2 blk))
  )
  (while (and ent (not break))
    (if	(= (cdr (assoc 0 (setq dxf (entget ent)))) "MTEXT")
      (progn
	(entmod (subst '(41 . 0.0) (assoc 41 dxf) dxf))
	(setq break T)
      )
      (setq ent (entnext ent))
    )
  )
)

 

PS @Fraid  vlax-release-object n'est pas utile avec les objets AutoCAD. On l'utilise pour "libérer" les objets externes créés ou obtenus avec vlax-get-object, vlax-create-object ou vlax-get-or-create-object (ex : application Excel).

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Ma remarque est uniquement pour supprimer son histoire de 

3 hours ago, PHILPHIL said:

sur certaines il y a un meme un masque de texte, ce qui fait que quand les cotes sont sur l'avant plan, ca m occulte une partie des entités dessin.

en supprimant le masque d'arrière-plan depuis la palette de propriétés (ce qui évite de programmer un LISP pour cela).

Ensuite pour l'histoire de la règle, cette largeur de MTEXT est contenue dans le code DXF 41 d'une entité MTEXT; cf. ci-dessous la sélection de la SubEntity d'une DIMENSION correspondant au texte de cote :

Commande: (explore-dxf (entget (car (nentsel)) '("*")) 0 nil nil)
Choix de l'objet:
Explore DXF in progress from "MTEXT" (<Nom d'entité: a0175f50>) :
|      (-1 . <Nom d'entité: a0175f50>)
|      (0 . "MTEXT")
|      (330 . <Nom d'entité: a0175a20>)
|      (5 . "2AD")
|      (100 . "AcDbEntity")
|      (67 . 0)
|      (8 . "0")
|      (62 . 0)
|      (440 . 16777216)
|      (48 . 0.1)
|      (100 . "AcDbMText")
|      (10 1.0 0.226536 0.0)
|      (40 . 0.1)
|      (41 . 10.8658)
|      (46 . 0.0)
|      (71 . 5)
|      (72 . 1)
|      (1 . "\\A1;2.000")
|      (7 . "Standard")
|      (210 0.0 0.0 1.0)
|      (11 1.0 0.0 0.0)
|      (42 . 0.338813)
|      (43 . 0.102115)
|      (50 . 0.0)
|      (73 . 1)
|      (44 . 1.0)
|      (90 . 3)
|      (63 . 9)
|      (421 . 13158600)
|      (45 . 1.25)
|      (441 . 0)
|
End of exploration...

Donc par exemple on remarque ici que le code DXF 41 n'est pas à 0.0
Pour accéder à cette entité, ce n'est pas faisable directement depuis la liste DXF de l'objet DIMENSION. Pour cela il faut considérer la cote comme une référence de bloc donc tu peux essayer d'accéder au MTEXT ainsi :

(defun c:SetDimWidth0 (/ jsel i name ent entlist)

	(if (setq jsel (ssget '((0 . "DIMENSION"))))
		(progn
			(repeat (setq i (sslength jsel))
				(setq name (ssname jsel (setq i (1- i)))
				      entlist (tblsearch "BLOCK" (cdr (assoc 2 (entget name))))
				      ent (cdr (assoc -2 entlist))
				)
				(while ent
					(if (and
						(= "MTEXT" (cdr (assoc 0 (entget ent))))
						(entmod
							(subst '(41 . 0.0)
							       (assoc 41 (entget ent))
							       (entget ent)
							)
						)
						(entupd ent)
					    )
						(setq ent nil)
						(setq ent (entnext ent))
					)
				)
			)
			(command "_REGENALL")
		)
	)
	(princ)

)

Finalement (gile) a été plus rapide (et concis), cependant en testant le programme le MTEXT ne se met pas à jour via (entupd) donc un coup de REGEN et c'est bon. :3

Bisous,
Luna

 

Lien vers le commentaire
Partager sur d’autres sites

en supposant que tes cotes on un style différent que Standard, un ptit truc qui te met toutes tes cote en style standard

(je résous souvent mes problème de cotes en appliquant un style)

si le standard ne te plais pas, tu peux ammener une cote qui va bien et appliqué son Style 

(tu remplace Standard par le nom du Style)

(vl-load-com)
(defun c:cotestand nil
    (vlax-for obj (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) 
        (if (and (wcmatch (vla-get-objectname obj) "*Dimension") (/= (vla-get-stylename obj) "Standard"))
          (progn
            (vla-put-stylename obj "Standard")
            (vla-Update Obj)
          )
        )
    )
)

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Sans passer par tous ces fonctions LISP, il existe la petite fonction de base d'Autocad SLECTSIMILAR...

Cette fonction est assez bien paramétrable et permet de sélectionner un grand nombre d’entité d'un seul coup et selon des critères assez précis (Calque, Couleur, Type et Style d'objet...) !

 

Lien vers le commentaire
Partager sur d’autres sites

Le plus simple, c'est en théorie la solution que propose Luna, à travers la palette de propriétés.

on sélectionne tout, puis on choisi les cotes.

Mais il peut y avoir plusieurs sortes de cotes, alignées, angulaires, ....

puis la quantité de propriétés à changer

Les cotes font partie des objets complexes d'Autocad, il y a beaucoup de cas possible, surtout venant d'un autre logiciel ...

sans un exemple précis, on ne peut qu' émettre des suppositions.

aller PHILPHIL, répond nous !!!

Lien vers le commentaire
Partager sur d’autres sites

hello

merci  pour vos réponses, je regarde ca

merci pour les lisp

une version lisp est plus rapide, et pas besoin de se poser de questions, surtout que ce genre de chose peut revenir

j'ai mis un exemple des milliers de cotes qu'il peut y avoir.

et un "dump"

 

Commande: IN
 

SELECTIONNER UNE ENTITE POUR INFO NENTSEL.; IAcadMText: Interface AutoCAD Mtext (texte multiple)
; Valeurs de propriétés:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00007ff7f6354e50>
;   AttachmentPoint = 5
;   BackgroundFill = 0
;   Document (RO) = #<VLA-OBJECT IAcadDocument 000001e9aef27d88>
;   DrawingDirection = 1
;   EntityTransparency = "DuBloc"
;   Handle (RO) = "9848"
;   HasExtensionDictionary (RO) = 0
;   Height = 0.0875
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 000001ea08b0e118>
;   InsertionPoint = (26.3697 7.42976 0.0)
;   Layer = "6_00 - Cotations__"
;   LineSpacingDistance = 0.145833
;   LineSpacingFactor = 1.0
;   LineSpacingStyle = 1
;   Linetype = "ByLayer"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Material = "ByLayer"
;   Normal = (0.0 0.0 1.0)
;   ObjectID (RO) = 74
;   ObjectName (RO) = "AcDbMText"
;   OwnerID (RO) = 75
;   PlotStyleName = "ByBlock"
;   Rotation = 0.0
;   StyleName = "Century Gothic_3"
;   TextString = "\\A1;239"
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 000001ea08b0e710>
;   Visible = -1
;   Width = 245380.0
LE CALQUE DE L ENTITE EST : 6_00 - Cotations__

 

 

Fraid, merci   mais je ne veux pas etre aussi destructeur en changeant le style de l'archi

ca m'a permis de découvrir un truc

un "\x" au lieux d'un "\p" dans le texte de cote  ne donne pas la meme chose, intéressant pour moi qui met le texte de cote au dessus et non pas au centre, pour la cotation des baies
 

Commande:
IE

SELECTIONNER UNE ENTITE POUR INFO ENTSEL.; IAcadDimRotated: Interface AutoCAD Rotated Dimension
; Valeurs de propriétés:
;   AltRoundDistance = 0.0
;   AltSubUnitsFactor = 100.0
;   AltSubUnitsSuffix = ""
;   AltSuppressLeadingZeros = 0
;   AltSuppressTrailingZeros = 0
;   AltSuppressZeroFeet = -1
;   AltSuppressZeroInches = -1
;   AltTextPrefix = ""
;   AltTextSuffix = ""
;   AltTolerancePrecision = 2
;   AltToleranceSuppressLeadingZeros = 0
;   AltToleranceSuppressTrailingZeros = 0
;   AltToleranceSuppressZeroFeet = -1
;   AltToleranceSuppressZeroInches = -1
;   AltUnits = 0
;   AltUnitsFormat = 2
;   AltUnitsPrecision = 2
;   AltUnitsScale = 25.4
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00007ff7f6354e50>
;   Arrowhead1Block = "Oblique"
;   Arrowhead1Type = 5
;   Arrowhead2Block = "Oblique"
;   Arrowhead2Type = 5
;   ArrowheadSize = 0.164042
;   DecimalSeparator = "."
;   DimConstrDesc = Une exception s’est produite
;   DimConstrExpression = Une exception s’est produite
;   DimConstrForm = 0
;   DimConstrName = Une exception s’est produite
;   DimConstrReference = 0
;   DimConstrValue = Une exception s’est produite
;   DimensionLineColor = 0
;   DimensionLineExtend = 0.246063
;   DimensionLinetype = "DuBloc"
;   DimensionLineWeight = -2
;   DimLine1Suppress = 0
;   DimLine2Suppress = 0
;   DimLineInside = 0
;   DimTxtDirection = 0
;   Document (RO) = #<VLA-OBJECT IAcadDocument 000001e9aef27d88>
;   EntityTransparency = "DuCalque"
;   ExtensionLineColor = 0
;   ExtensionLineExtend = 0.328084
;   ExtensionLineOffset = 0.0625
;   ExtensionLineWeight = -2
;   ExtLine1Linetype = "DuBloc"
;   ExtLine1Suppress = 0
;   ExtLine2Linetype = "DuBloc"
;   ExtLine2Suppress = 0
;   ExtLineFixedLen = 1.5
;   ExtLineFixedLenSuppress = -1
;   Fit = 3
;   ForceLineInside = -1
;   FractionFormat = 0
;   Handle (RO) = "90E2"
;   HasExtensionDictionary (RO) = 0
;   HorizontalTextPosition = 0
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 000001e9ea97ac28>
;   Layer = "6_00 - Cotations__"
;   LinearScaleFactor = 100.0
;   Linetype = "ByLayer"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Material = "ByLayer"
;   Measurement (RO) = 150.0
;   Normal = (0.0 0.0 1.0)
;   ObjectID (RO) = 72
;   ObjectName (RO) = "AcDbRotatedDimension"
;   OwnerID (RO) = 70
;   PlotStyleName = "ByLayer"
;   PrimaryUnitsPrecision = 0
;   Rotation = 0.0
;   RoundDistance = 0.0
;   ScaleFactor = 0.3048
;   StyleName = "Cote_intérieure_100_AT_3"
;   SubUnitsFactor = 100.0
;   SubUnitsSuffix = ""
;   SuppressLeadingZeros = 0
;   SuppressTrailingZeros = -1
;   SuppressZeroFeet = -1
;   SuppressZeroInches = -1
;   TextColor = 0
;   TextFill = 0
;   TextFillColor = 0
;   TextGap = 0.0328084
;   TextHeight = 0.0783126
;   TextInside = -1
;   TextInsideAlign = 0
;   TextMovement = 0
;   TextOutsideAlign = 0
;   TextOverride = "<>\\Xallège BA 100Ht"
;   TextPosition = (25.0847 10.1896 0.0)
;   TextPrefix = ""
;   TextRotation = 0.0
;   TextStyle = "Century Gothic_1"
;   TextSuffix = "x147Ht"
;   ToleranceDisplay = 0
;   ToleranceHeightScale = 1.0
;   ToleranceJustification = 1
;   ToleranceLowerLimit = 0.0
;   TolerancePrecision = 4
;   ToleranceSuppressLeadingZeros = 0
;   ToleranceSuppressTrailingZeros = 0
;   ToleranceSuppressZeroFeet = -1
;   ToleranceSuppressZeroInches = -1
;   ToleranceUpperLimit = 0.0
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 000001e9ea97a260>
;   UnitsFormat = 2
;   VerticalTextPosition = 1
;   Visible = -1

LE CALQUE DE L ENTITE EST : 6_00 - Cotations__

 

 

a+

Phil

EXEMPLE COTE WIDTH.dwg

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

hello

je viens  de  tester les lisp  et ca ne semble pas fonctionner sur le fichier envoyé

pourtant ca parait logique

faut peut etre aller attaquer le "width" directement  sans passer par le code 41 dxf ?

a+

Phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

hello

ca  fonctionne sous autocad architecture 2021

ca NE fonctionnement PAS sous autocad architecture 2022

donc  il doit y avoir un BUG sous la 2022

 

merci

 

Phil PBO

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

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é