| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | PNY wird von NVIDIA zum Händler des Jahres gewählt - zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Hilfslinien/Hilfslinienpunkte von Bemaßungen verschieben? (1219 mal gelesen)
|
snoopyonline Mitglied Architekt
 
 Beiträge: 192 Registriert: 17.05.2003 Rechner: i5-2500@3.3 GHz, 16GB RAM, Windows7 64bit Software: ACA2013, BDS Premium 2015/2016
|
erstellt am: 15. Okt. 2013 10:28 <-- editieren / zitieren --> Unities abgeben:         
Hallo Forum, ich versuche gerade, die Hilfslinienpunkte von in der AutoCAD-Zeichnung vorhandenen Bemaßungen zu verschieben. Ich prüfe alle Zeichnungs-Objekte, ob es sich bei diesen um eine Bemaßung (DxfName = "DIMENSION") handelt - falls ja wird die folgende Sub mit der ObjectID des betreffenden Objekts aufgerufen. Code:
Private Sub rnddim(ByVal OID As Autodesk.AutoCAD.DatabaseServices.ObjectId) Try Dim myEnt As Dimension = OID.GetObject(OpenMode.ForWrite) Dim pset As New Point3dCollection 'Dim msgstr As String = "DIM (" & myEnt.ObjectId.ToString & ")" & vbCrLf myEnt.GetStretchPoints(pset) For r As Integer = 0 To pset.Count - 1 Dim oldpt As Point3d = pset.Item(r) Dim newpt As Point3d = New Point3d(baseround(oldpt.X, dblXBase), baseround(oldpt.Y, dblXBase), baseround(oldpt.Z, dblXBase) * zfact) Dim pvector As Vector3d = New Vector3d(newpt.X - oldpt.X, newpt.Y - oldpt.Y, newpt.Z - oldpt.Z) 'MsgBox(pvector.X & "|" & pvector.Y & "|" & pvector.Z) myEnt.MoveStretchPointsAt(New IntegerCollection(r), pvector) 'msgstr = msgstr & pset.Item(r).X & "," & pset.Item(r).Y & vbCrLf 'DrawDBPoint(New Point2d(pset.Item(r).X, pset.Item(r).Y), r + 1) Next 'MsgBox(msgstr) Catch ex As Exception ListBox2.Items.Add(ListBox1.Items(ListBox1.SelectedIndex) & "|" & OID.ToString & "|" & "Bemassung: " & " " & ex.Message) oiderrorlist.Add(OID) End Try End Sub
Die Funktion Dimension.GetStretchPoints() liefert die Koordinaten aller Definitionspunkte zurück (Hilfslinienpunkte 1&2, Position der Bemaßungslinie und des Maßtextes) und der Vector pvector enthält nach Rundung der Ausgangskoordinaten auch einen sinnvollen Wert. Nur die Methode Dimension.MoveStretchPointsAt bewirkt leider rein gar nichts. Was mache ich falsch bzw. worin liegt mein Denkfehler bzgl. der verwendeten Methode? Vielleicht hat von euch ja jemand einen Tipp, wie ich die Position der Hilfslinienpunkte verschieben kann... Vielen Dank im Voraus, Gruß Sebastian ------------------ http://www.sebastian-schild.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Karlovac Mitglied

 Beiträge: 54 Registriert: 12.09.2013 AutoCAD Mechanical 2012-2015 Windows 7 Enterprise X64 Visual Studio 2010/2013 Intel Xeon W3680 Nvidia Quadro 2000 16 GB RAM
|
erstellt am: 16. Okt. 2013 11:01 <-- editieren / zitieren --> Unities abgeben:          Nur für snoopyonline
Hallo Sebastian, Zitat:
Nur die Methode Dimension.MoveStretchPointsAt bewirkt leider rein gar nichts.
wenn du über die .NET API Objekte verändern willst, musst du zuerst eine Transaction starten: dürfte in VB ca. so aussehen
Code:
Dim db As Autodesk.AutoCAD.DatabaseServices.Database = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database Dim tr As Autodesk.AutoCAD.DatabaseServices.Transaction = db.TransactionManager.StartTransaction()Using tr 'Änderung deines Objektes hier tr.Commit() End Using
das "tr.Commit" führt die Änderung durch warum das "Using"? --> siehe hier p.s. sorry für den Code, schreibe normalerweise nicht in VB
Gruß Karlovac [Diese Nachricht wurde von Karlovac am 16. Okt. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snoopyonline Mitglied Architekt
 
 Beiträge: 192 Registriert: 17.05.2003
|
erstellt am: 16. Okt. 2013 13:56 <-- editieren / zitieren --> Unities abgeben:         
Hallo Karlovac, danke für deine Antwort. Allerdings habe ich nur einen Code-Ausschnitt aus dem Großen-Ganzen gepostet... Die aufgeführte Sub wird innerhalb einer Transaction ausgeführt und diese wird auch Commited! In meinem Tool gibt es auch noch diverse andere Unter-Subs für andere Objekttypen, welche auf gleiche Weise / an gleicher Stelle gestartet werden und tatsächlich auch etwas (sogar das gewünschte ;-) bewirken. Es ging mir nur um den konkreten Problemfall mit den Bemaßungspunkten, bei denen ich entweder die falsche Methode versucht oder irgendeine andere essentielle Einstellung vergessen habe... Gruß, Sebastian ------------------ http://www.sebastian-schild.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Karlovac Mitglied

 Beiträge: 54 Registriert: 12.09.2013 AutoCAD Mechanical 2012-2015 Windows 7 Enterprise X64 Visual Studio 2010/2013 Intel Xeon W3680 Nvidia Quadro 2000 16 GB RAM
|
erstellt am: 16. Okt. 2013 14:56 <-- editieren / zitieren --> Unities abgeben:          Nur für snoopyonline
Hallo, sorry, wollte nicht deine Kompetenzen in Frage stellen :-) bei deinem Code liegt der Fehler glaub ich hier: Code:
myEnt.MoveStretchPointsAt(New IntegerCollection(r), pvector)
habe das so geschrieben: Code:
Dim IntCol As IntegerCollection = New IntegerCollection() IntCol.Add(r) myEnt.MoveStretchPointsAt(IntCol, pvector)
Gruß Karlovac Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
snoopyonline Mitglied Architekt
 
 Beiträge: 192 Registriert: 17.05.2003
|
erstellt am: 16. Okt. 2013 15:14 <-- editieren / zitieren --> Unities abgeben:         
Hallo Karlovac, ich hoffe meine erste Antwort hat nicht allzu sehr nach "auf-den-Schlips-getreten-gefühlt" geklungen... Dem war keineswegs so. Und in der Tat muss man nicht automatisch davon ausgehen, dass um den geposteteten Code herum noch viel mehr Geschriebs herum existiert ;-) Und ein mit Liebe platziertes Transaction.Abort() als krönendem Abschluss der mühevoll gezimmerten Sub ist mir auch schon oft passiert... Nun aber zurück zum eigentlichen Thema: DANKE! Die ultrakurze Erzeugung der IntegerCollection, welche offensichtlich keine war, war genau mein Fehler... Jetzt klappts wunderbar und ich kann mich weiter mit den Dimensions austoben! Gruß, Sebastian ------------------ http://www.sebastian-schild.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |