Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Position vom Bemaßungstext einer gedrehten linearen Bemaßung beeinflussen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Position vom Bemaßungstext einer gedrehten linearen Bemaßung beeinflussen (1867 mal gelesen)
AlexanderRi
Mitglied
Elektroniker


Sehen Sie sich das Profil von AlexanderRi an!   Senden Sie eine Private Message an AlexanderRi  Schreiben Sie einen Gästebucheintrag für AlexanderRi

Beiträge: 20
Registriert: 05.05.2010

erstellt am: 16. Jul. 2011 14:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
ich will von einer gedrehten linearen Bemaßung folgendes mit VBA erledigen:

1. Abfragen, ob der Bemaßungstext innerhalb oder außerhalb der Hilfslinien vom AutoCAD erzeugt wird?
2. Wenn AutoCAD den Bemaßungstext außerhalb der Hilfslinien erzeugen will, dann soll der Bemaßungstext rechts (von den Hilfslinien) erzeugt werden.

Dim objAcadDimRotated As AcadDimRotated

Alexander

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 16. Jul. 2011 16:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>>>damals<<< hast Du ja keine Rückmeldung gegeben, wie weit bist Du da gekommen oder hats damals an was gefehlt?

Der gegebene Code (die eine Zeile) ist aber nicht alles, was Du versucht hast?
Was hast Du bisher probiert?

- alfred -

------------------
www.hollaus.at

AlexanderRi
Mitglied
Elektroniker


Sehen Sie sich das Profil von AlexanderRi an!   Senden Sie eine Private Message an AlexanderRi  Schreiben Sie einen Gästebucheintrag für AlexanderRi

Beiträge: 20
Registriert: 05.05.2010

erstellt am: 16. Jul. 2011 17:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

"Damals" war etwas anderes.

Zum aktuellen Thema habe ich inzwischen mit VB.NET das Prüfen - ob Bemaßungstext innerhalb oder außerhalb der Hilfslinien - fertig:

Dim currentTextPosition As Double() = CType(objAcadDimRotated.TextPosition, Double())
Dim isTextOutside As Boolean = If((currentTextPosition(0) < line.StartPoint(0)) OrElse (currentTextPosition(0) > line.EndPoint(0)), True, False)
If isTextOutside Then objAcadDimRotated.TextInside = True

Es scheint keine Eigenschaft von der Bemaßung zu geben, die aussagt, wie der Bemaßungstext positioniert wurde.

Jetzt fehlt mir noch die Lösung für das Positionieren des Bemaßungstextes rechts oder links von den Hilfslinien.
Hast Du dafür eine Lösung?

Alexander

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 16. Jul. 2011 17:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

Dein Code gilt aber imho nur für horizontale Bemaßungen (horizontal in bezug auf WCS), bei vertikalen (oder vertikal-nahen) Bemaßungen wird das imho so nicht funken.

- alfred -

------------------
www.hollaus.at


Ex-Mitglied

erstellt am: 17. Jul. 2011 12:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

anbei mal ein Code, der den Bemassungstext nach aussen und rechts (aus planlesbar-Sicht) stellt.
Damit hast Du auch die Eigenschaften, auf die Du zugreifen kannst, um Punkte der Bemaßung mit der Textposition abgleichen zu können.

Nur zur Vorsicht, ich hab das jetzt nicht mit allen Bemaßungsstilvarianten probiert (insbesondere mit allen Varianten von DIMTAD, DIMJUST, DIMTXTDIRECTION, DIMATFIT, DIMTMOVE, und vielleicht noch ein paar, die Einfluss haben können).
Mit dem Standard 'ISO-25'-Bemaßungsstil funkt unten folgender Code.

Code:
   <Autodesk.AutoCAD.Runtime.CommandMethod("CADde_ChangeDimTextToRight")> _
   Public Shared Sub CADde_ChangeDimTextToRight()
      Dim tAcadDoc As ApplicationServices.Document = ApplicationServices.Application.DocumentManager.MdiActiveDocument
      Dim tAcadDocLock As ApplicationServices.DocumentLock = Nothing
      Dim tTrAct As DatabaseServices.Transaction = Nothing
      Try

         'selektieren wir mal die Bemassung
         Dim tSelRes As EditorInput.PromptEntityResult = tAcadDoc.Editor.GetEntity("Bemaßung selektieren: ")
         If (tSelRes IsNot Nothing) AndAlso (tSelRes.Status = EditorInput.PromptStatus.OK) Then
            'ok, es wurde ein Element selektiert
            If tSelRes.ObjectId.ObjectClass.DxfName.ToUpper Like "*DIMENSION*" Then
               'ok, hat auch was mit DIMension zu tun
               tAcadDocLock = tAcadDoc.LockDocument
               tTrAct = tAcadDoc.TransactionManager.StartTransaction

               Dim tDim As DatabaseServices.AlignedDimension = TryCast(tTrAct.GetObject(tSelRes.ObjectId, DatabaseServices.OpenMode.ForWrite), DatabaseServices.AlignedDimension)
               If tDim IsNot Nothing Then
                  'ok, ausgerichtete Bemaßung vorhanden

                  'winkel zwischen erstem und zweiten Punkt der Bemaßung
                  Dim tAng As Double = tDim.XLine1Point.GetVectorTo(tDim.XLine2Point).AngleOnPlane(New Geometry.Plane)
                  If (tAng < 0.5 * Math.PI) OrElse (tAng > 1.5 * Math.PI) Then
                     'dann ist der zweite Punkt der 'rechte
                     tDim.TextPosition = tDim.DimLinePoint
                  Else
                     'dann ist der erste Punkt der 'rechte'
                     tDim.TextPosition = tDim.DimLinePoint + 1.1 * (tDim.XLine1Point - tDim.XLine2Point)
                  End If
                  tTrAct.Commit()
               Else
                  tAcadDoc.Editor.WriteMessage("Selektiertes Objekt ist keine 'Ausgerichtete Bemaßung'." & vbNewLine)
               End If
            Else
               tAcadDoc.Editor.WriteMessage("Selektiertes Objekt ist keine Bemaßung." & vbNewLine)
            End If
         Else
            tAcadDoc.Editor.WriteMessage("Keine gültige Objektselektion" & vbNewLine)
         End If

      Catch ex As Exception
         Call MsgBox("Fehler aufgetreten (Position: 'CADde_ChangeDimTextToRight')" & vbNewLine & ex.Message)
      Finally
         If tTrAct IsNot Nothing Then tTrAct.Dispose() : tTrAct = Nothing
         If tAcadDocLock IsNot Nothing Then tAcadDocLock.Dispose() : tAcadDocLock = Nothing
      End Try
   End Sub


HTH, - alfred -

------------------
www.hollaus.at

[Diese Nachricht wurde von a.n. am 17. Jul. 2011 editiert.]

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz