| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: UMDREH-Funktion für M-Texte? (3711 mal gelesen)
|
DPNineFive Mitglied Technischer Systemplaner (VAT)
Beiträge: 10 Registriert: 25.09.2013
|
erstellt am: 02. Okt. 2013 09:32 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, Gibt's eine Möglichkeit, alle in der Zeichnung vorhandenen M-Texte in einem Schritt um 180° zu drehen? Für Linien, Polylinien, Splines und Spiralen gibt es ja die UMDREH Funktion... Ich möchte ungern 100 M-Texte mit verschiedenen Drehwinkeln einzeln im Eigenschaftenfenster um 180° drehen. | Hat AutoCAD ("reines" ACAD 2013) eine UMDREH-Ähnliche Funktion für M-Texte, die (M-) Texte um 180° drehen kann? | ------------------ Gruß Damian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wuehlmaus Mitglied Landschaftsarchitekt
Beiträge: 350 Registriert: 03.12.2010 win 10, win7 64bit, ISDP 2016-2018(9)iRenderNXT, thearender, SketchUP, Adobe CS 5.5 DesignSuite
|
erstellt am: 02. Okt. 2013 10:05 <-- editieren / zitieren --> Unities abgeben: Nur für DPNineFive
Hi Damian, ich bin mir nicht sicher ob ich deine Frage richtig verstanden habe. Aber wenn ich den Drehwinkel von Texten verändern möchte, wähle ich diese Texte aus und gebe den Winkel (für alle ausgewählten) im Eigenschaftfenster an - fertig. Also am schnellsten so machen: 1. Einen Text auswählen 2. rechte Maustaste -> ähnliche auswählen 3. Eigenschaften öffenen und Drehung einstellen 4. fertig Wenn du allerdings die Drehung deshalb ändern möchtest weil du im Layout die Zeichnung "gedreht" hast, dann würde ich eher einen Textstil nehmen der die Textobjekte automatisch an das Layout anpasst, bzw. dies bei den vorhandenen Textelementen in den Eigenschaften einstellen ("Ausrichtung an Layout anpassen" - dies kannst du allerdings nur einstellen wenn der Textstil eine Beschriftung ist). Bis später chris ------------------ www.Gestalten-mit-AutoCAD.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DPNineFive Mitglied Technischer Systemplaner (VAT)
Beiträge: 10 Registriert: 25.09.2013
|
erstellt am: 02. Okt. 2013 10:33 <-- editieren / zitieren --> Unities abgeben:
Hi Chris Ich mache das generell natürlich auch über das Eigenschaftenfenster. Das Problem... ...ist ein Grundleitungsplan, in dem die Leitungen natürlich "kreuz und quer" im Erdreich verlegt werden. Meine Beschriftungen (Maßstabsabhängig) hab ich an die Drehung der Rohrleitungen angepasst. Die Gundleitungen hab ich zuerst im Kellergeschoss-Grundriss des Architekten eingezeichnet. Beim Einfügen und Drehen im Lageplan (eingenordet) stehen die Texte allerdings zum Teil auf dem Kopf. Deswegen würde ich einige (ca. 100) Texte gerne einfach um 180° drehen, ohne sie einzeln über das Eingenschaften-Fenster mit Angabe Drehwinkel (bei den meisten Text anders) drehen zu müssen... Gibts da eine einfachere Möglichkeit als jeden einzeln zu drehen? [Ausschnitt des Grundleitungsplanes im Anhang] ------------------ Gruß Damian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 02. Okt. 2013 11:41 <-- editieren / zitieren --> Unities abgeben: Nur für DPNineFive
ich hatte mal was gemacht. Orotate, rotiert die Objekte auf der Stelle. Wenn du die Objekte alle um den Basispunkt rotieren lässt, ist das Ergebnis meist doch nicht so das Wahre. Auf meiner Seite habe ich sogar noch eine Weitere davon ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DPNineFive Mitglied Technischer Systemplaner (VAT)
Beiträge: 10 Registriert: 25.09.2013
|
erstellt am: 02. Okt. 2013 12:02 <-- editieren / zitieren --> Unities abgeben:
|
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Autodesk Building Design Suite Premium 2021 Windows 10 Pro 64bit HP Workstation Z620, 24GB GeForce GTX 970
|
erstellt am: 02. Okt. 2013 12:53 <-- editieren / zitieren --> Unities abgeben: Nur für DPNineFive
Hi, ich hab da auch mal einen Code in VBA geschrieben, schon etwas älter aber funktioniert noch. Dreht Texte, Mtexte, Attribute, Bemaßungen, Führungen und ändert deren Einsetzpunkte. Ich habe den Code schnell zusammenkompiert, einfach mal testen ob es passt. Code: ' Dreht Texte um deren Einsetzpunkt um sie von links lesbar zu machen aufs aktuelle BKS. ' Weiters wird der Einsetzpunkt auf den jeweils gegenüberliegenden geändert. Public Sub TextAutoRotate2() Dim SS As AcadSelectionSet Dim FltTypes(7) As Integer Dim FltData(7) As Variant Dim objText As AcadText Dim objMText As AcadMText Dim objMLeader As AcadMLeader Dim objATText As AcadAttributeReference Dim count As Long Dim Atts As Variant Dim objAngle As Double Dim objEnt As AcadEntity Dim PtMin As Variant Dim PtMax As Variant Dim ucsAngle As Variant Dim transWinkel As Double Dim UCSX As Variant Dim PI As Double On Error GoTo Err_Control PI = 4 * Atn(1) ThisDrawing.StartUndoMark FltTypes(0) = -4: FltData(0) = "<OR" FltTypes(1) = 0: FltData(1) = "INSERT" FltTypes(2) = 0: FltData(2) = "TEXT" FltTypes(3) = 0: FltData(3) = "MTEXT" FltTypes(4) = 0: FltData(4) = "ATTDEF" FltTypes(5) = 0: FltData(5) = "DIMENSION" FltTypes(6) = 0: FltData(6) = "MULTILEADER" FltTypes(7) = -4: FltData(7) = "OR>" ' Frage nach den zu bearbeitenden Objekten On Error Resume Next Set SS = CreateSelectionSet() ' Selectionset erstellen, Benutzer fragen und Filter anwenden SS.Clear SS.SelectOnScreen FltTypes, FltData If SS.count = 0 Then GoTo Exit_HereSS On Error GoTo Err_ControlSS ' get the X direction vector UCSX = ThisDrawing.GetVariable("UCSXDIR") ' get the angle in radians ucsAngle = ThisDrawing.Utility.AngleFromXAxis(Point3D(0, 0, 0), UCSX) If ucsAngle = 0 Then transWinkel = 0 Else transWinkel = 2 * funPI - ucsAngle End If For Each objEnt In SS If TypeOf objEnt Is AcadText Or TypeOf objEnt Is AcadAttribute Then Set objText = objEnt objAngle = objText.Rotation - ucsAngle RotateTextUCS objText, objAngle ElseIf TypeOf objEnt Is AcadMText Then Set objMText = objEnt objAngle = objMText.Rotation RotateTextUCS objMText, objAngle ElseIf TypeOf objEnt Is AcadBlockReference Then Atts = objEnt.GetAttributes For count = UBound(Atts) To 0 Step -1 Set objATText = Atts(count) objAngle = objATText.Rotation - ucsAngle RotateTextUCS objATText, objAngle Next count ElseIf TypeOf objEnt Is AcadMLeader Then Set objMLeader = objEnt If objMLeader.ContentType = acMTextContent Then objAngle = objMLeader.TextRotation If objAngle > PI / 2 + 0.0000001 And objAngle <= 1.5 * PI + 0.0000001 Or objAngle <= -PI / 2 + 0.0000001 And objAngle > -PI * 1.5 + 0.0000001 Then objMLeader.TextRotation = objAngle + PI Select Case objMLeader.TextJustify Case acAttachmentPointTopLeft objMLeader.TextJustify = acAttachmentPointBottomRight Case acAttachmentPointTopCenter objMLeader.TextJustify = acAttachmentPointBottomRight Case acAttachmentPointTopRight objMLeader.TextJustify = acAttachmentPointBottomLeft Case acAttachmentPointMiddleLeft objMLeader.TextJustify = acAttachmentPointMiddleRight Case acAttachmentPointMiddleCenter 'objMLeader.TextJustify = acAttachmentPointMiddleCenter Case acAttachmentPointMiddleRight objMLeader.TextJustify = acAttachmentPointMiddleLeft Case acAttachmentPointBottomLeft objMLeader.TextJustify = acAttachmentPointTopRight Case acAttachmentPointBottomCenter objMLeader.TextJustify = acAttachmentPointTopCenter Case acAttachmentPointBottomRight objMLeader.TextJustify = acAttachmentPointTopLeft End Select Select Case objMLeader.TextLeftAttachmentType Case acAttachmentBottomLine objMLeader.TextLeftAttachmentType = acAttachmentBottomOfTopLine Case acAttachmentBottomOfBottom objMLeader.TextLeftAttachmentType = acAttachmentBottomOfTop Case acAttachmentBottomOfTop objMLeader.TextLeftAttachmentType = acAttachmentBottomOfBottom Case acAttachmentBottomOfTopLine objMLeader.TextLeftAttachmentType = acAttachmentBottomLine Case acAttachmentMiddle 'objMLeader.TextLeftAttachmentType = acAttachmentMiddle Case acAttachmentMiddleOfBottom objMLeader.TextLeftAttachmentType = acAttachmentMiddleOfTop Case acAttachmentMiddleOfTop objMLeader.TextLeftAttachmentType = acAttachmentMiddleOfBottom Case acAttachmentTopOfTop objMLeader.TextLeftAttachmentType = acAttachmentBottomOfBottom End Select Select Case objMLeader.TextRightAttachmentType Case acAttachmentBottomLine objMLeader.TextRightAttachmentType = acAttachmentBottomOfTopLine Case acAttachmentBottomOfBottom objMLeader.TextRightAttachmentType = acAttachmentBottomOfTop Case acAttachmentBottomOfTop objMLeader.TextRightAttachmentType = acAttachmentBottomOfBottom Case acAttachmentBottomOfTopLine objMLeader.TextRightAttachmentType = acAttachmentBottomLine Case acAttachmentMiddle 'objMLeader.TextRightAttachmentType = acAttachmentMiddle Case acAttachmentMiddleOfBottom objMLeader.TextRightAttachmentType = acAttachmentMiddleOfTop Case acAttachmentMiddleOfTop objMLeader.TextRightAttachmentType = acAttachmentMiddleOfBottom Case acAttachmentTopOfTop objMLeader.TextRightAttachmentType = acAttachmentBottomOfBottom End Select 'objMLeader.Evaluate End If End If Else objEnt.Rotation = transWinkel End If Next objEnt Exit_HereSS: SS.Delete Exit_Here: ThisDrawing.EndUndoMark Exit Sub Err_Control: Err.Clear Resume Exit_Here Err_ControlSS: Err.Clear Resume Exit_HereSS End Sub Public Sub RotateTextUCS(objRotate As AcadEntity, objAngle As Double) Dim Alignment As Integer Dim RotationPoint As Variant Dim objTextType As TextType Dim PI As Double If TypeOf objRotate Is AcadText Then objTextType = ttText ElseIf TypeOf objRotate Is AcadAttribute Then objTextType = ttAttribute ElseIf TypeOf objRotate Is AcadMText Then objTextType = ttMText ElseIf TypeOf objRotate Is AcadAttributeReference Then If objRotate.MTextAttribute Then objTextType = ttMLAttribute Else objTextType = ttAttributeReference End If End If PI = 4 * Atn(1) If objAngle > PI / 2 + 0.0000001 And objAngle <= 1.5 * PI + 0.0000001 Or objAngle <= -PI / 2 + 0.0000001 And objAngle > -PI * 1.5 + 0.0000001 Then Select Case objTextType Case ttAttribute, ttAttributeReference, ttText Select Case objRotate.Alignment Case acAlignmentLeft, acAlignmentAligned, acAlignmentFit RotationPoint = objRotate.insertionPoint Case Else RotationPoint = objRotate.TextAlignmentPoint End Select Case ttMLAttribute RotationPoint = objRotate.TextAlignmentPoint Case ttMText RotationPoint = objRotate.insertionPoint End Select objRotate.Rotate RotationPoint, PI If objTextType = ttMText Then Select Case objRotate.AttachmentPoint Case acAttachmentPointTopLeft objRotate.AttachmentPoint = acAttachmentPointBottomRight Case acAttachmentPointTopCenter objRotate.AttachmentPoint = acAttachmentPointBottomRight Case acAttachmentPointTopRight objRotate.AttachmentPoint = acAttachmentPointBottomLeft Case acAttachmentPointMiddleLeft objRotate.AttachmentPoint = acAttachmentPointMiddleRight Case acAttachmentPointMiddleCenter 'objRotate.AttachmentPoint = acAttachmentPointMiddleCenter Case acAttachmentPointMiddleRight objRotate.AttachmentPoint = acAttachmentPointMiddleLeft Case acAttachmentPointBottomLeft objRotate.AttachmentPoint = acAttachmentPointTopRight Case acAttachmentPointBottomCenter objRotate.AttachmentPoint = acAttachmentPointTopCenter Case acAttachmentPointBottomRight objRotate.AttachmentPoint = acAttachmentPointTopLeft End Select objRotate.insertionPoint = RotationPoint Else Select Case objRotate.Alignment Case acAlignmentLeft objRotate.Alignment = acAlignmentTopRight Case acAlignmentCenter objRotate.Alignment = acAlignmentTopCenter Case acAlignmentRight objRotate.Alignment = acAlignmentTopLeft Case acAlignmentAligned '***** Sonderfall ***** 'objRotate.Alignment = acAlignmentTopRight Case acAlignmentMiddle 'objRotate.Alignment = acAlignmentTopRight Case acAlignmentFit 'Sonderfall 'objRotate.Alignment = acAlignmentTopRight Case acAlignmentTopLeft If objTextType = ttMLAttribute Then objRotate.Alignment = acAlignmentBottomRight Else objRotate.Alignment = acAlignmentRight End If Case acAlignmentTopCenter If objTextType = ttMLAttribute Then objRotate.Alignment = acAlignmentBottomCenter Else objRotate.Alignment = acAlignmentCenter End If Case acAlignmentTopRight If objTextType = ttMLAttribute Then objRotate.Alignment = acAlignmentBottomLeft Else objRotate.Alignment = acAlignmentLeft End If Case acAlignmentMiddleLeft objRotate.Alignment = acAlignmentMiddleRight Case acAlignmentMiddleCenter 'objRotate.Alignment = acAlignmentTopRight Case acAlignmentMiddleRight objRotate.Alignment = acAlignmentMiddleLeft Case acAlignmentBottomLeft objRotate.Alignment = acAlignmentTopRight Case acAlignmentBottomCenter objRotate.Alignment = acAlignmentTopCenter Case acAlignmentBottomRight objRotate.Alignment = acAlignmentTopLeft End Select Select Case objRotate.Alignment Case acAlignmentLeft, acAlignmentAligned, acAlignmentFit objRotate.insertionPoint = RotationPoint Case Else objRotate.TextAlignmentPoint = RotationPoint End Select End If End If End Sub
------------------ Roland Feletic PCD ZT-GmbH Autodesk Building Design Suite Premium 2014 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DPNineFive Mitglied Technischer Systemplaner (VAT)
Beiträge: 10 Registriert: 25.09.2013
|
erstellt am: 02. Okt. 2013 15:04 <-- editieren / zitieren --> Unities abgeben:
|
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 02. Okt. 2013 15:28 <-- editieren / zitieren --> Unities abgeben: Nur für DPNineFive
|
DPNineFive Mitglied Technischer Systemplaner (VAT)
Beiträge: 10 Registriert: 25.09.2013
|
erstellt am: 02. Okt. 2013 16:06 <-- editieren / zitieren --> Unities abgeben:
|
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 02. Okt. 2013 16:29 <-- editieren / zitieren --> Unities abgeben: Nur für DPNineFive
... dann machst du den VB Editor auf (Alt + F11) Klickst doppelt aud ThisDrawing und fügst den code in das Fenster ein. Aber ich kann dich schon vorher beruhigen - Der code funktioniert nicht, da fehlt wohl noch was ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Autodesk Building Design Suite Premium 2021 Windows 10 Pro 64bit HP Workstation Z620, 24GB GeForce GTX 970
|
erstellt am: 02. Okt. 2013 16:58 <-- editieren / zitieren --> Unities abgeben: Nur für DPNineFive
Hi, im Anhang nun die Projektdatei. Einfach .dwg entfernen und Projekt.dvb mit VBALAD laden. Diese zwei Funktionen haben noch gefehlt. Wenn ein Fehler bei dir auftritt, dann liegt es daran, dass ich AutoCAD 2014 habe. Dann einfach den Code in ein neues Projekt kopieren oder die Verweise richtig stellen. Code:
Public Function CreateSelectionSet(Optional ssName As String = "SS") As AcadSelectionSet Dim objSelSet As AcadSelectionSet Dim objSelCol As AcadSelectionSets Set objSelCol = ThisDrawing.SelectionSets For Each objSelSet In objSelCol If objSelSet.Name = ssName Then objSelCol.Item(ssName).Delete Exit For End If Next Set objSelSet = objSelCol.Add(ssName) Set CreateSelectionSet = objSelSet End Function Public Function Point3D(x As Double, y As Double, Optional z As Double = 0) As Variant Dim retVal(0 To 2) As Double retVal(0) = x: retVal(1) = y: retVal(2) = z Point3D = retVal End Function
------------------ Roland Feletic PCD ZT-GmbH Autodesk Building Design Suite Premium 2014 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Autodesk Building Design Suite Premium 2021 Windows 10 Pro 64bit HP Workstation Z620, 24GB GeForce GTX 970
|
erstellt am: 02. Okt. 2013 17:00 <-- editieren / zitieren --> Unities abgeben: Nur für DPNineFive
|
DPNineFive Mitglied Technischer Systemplaner (VAT)
Beiträge: 10 Registriert: 25.09.2013
|
erstellt am: 03. Okt. 2013 13:21 <-- editieren / zitieren --> Unities abgeben:
|