Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD ObjectARX und .NET
  Hilfslinien/Hilfslinienpunkte von Bemaßungen verschieben?

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
  
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


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

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 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 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



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

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 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 Nur für snoopyonline 10 Unities + Antwort hilfreich

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


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

Beiträge: 192
Registriert: 17.05.2003

erstellt am: 16. Okt. 2013 13:56    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 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



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

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 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 Nur für snoopyonline 10 Unities + Antwort hilfreich

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



Anzeige:Infos zum Werbeplatz >>

HGS-ROHR CAD APP für AEC - Architektur-, Ingenieur- und Bauwesen

Dieses Tool ermöglicht eine präzise Planung und Visualisierung von Rohrleitungssystemen und trägt dazu bei, die Effizienz und Qualität des Rohrleitungsbaus zu verbessern. HGS-ROHR ist ein Software-Tool von HGSimon CAD Engineering für den Rohrleitungsbau, für AUTO-CAD; BRICS-CAD; ZWCAD; GSTAR-CAD

snoopyonline
Mitglied
Architekt


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

Beiträge: 192
Registriert: 17.05.2003

erstellt am: 16. Okt. 2013 15:14    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 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 >>)

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)2025 CAD.de | Impressum | Datenschutz