| | | 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
Beiträge: 20 Registriert: 05.05.2010
|
erstellt am: 16. Jul. 2011 14:53 <-- editieren / zitieren --> Unities abgeben:
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 / zitieren -->
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
Beiträge: 20 Registriert: 05.05.2010
|
erstellt am: 16. Jul. 2011 17:15 <-- editieren / zitieren --> Unities abgeben:
"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 / zitieren -->
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 / zitieren -->
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 >>)
|