| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY präsentiert die PRO Elite™ High Endurance microSD-Flash-Speicherkarten für Videoüberwachung und kontinuierliche Aufzeichnung, eine Pressemitteilung
|
Autor
|
Thema: ObjectModified?? (1591 mal gelesen)
|
ollibaer2004 Mitglied Dipl. Ing. Versorgungstechnik

 Beiträge: 54 Registriert: 28.06.2004 Athlon 64 4000 Windows Xp ADT7 + Rocad 7 http://tga4acad.de.vu
|
erstellt am: 29. Jul. 2004 08:51 <-- editieren / zitieren --> Unities abgeben:         
Moin Forum, ich will mir ein kleines programm schreiben, welches autom. die fläche einer polylinie ermittelt und den zugehörigen text ändert, dabei ist mir bei n.g Programm aufgefallen, dass bei der änderung einer AcDbPolyline die "neue fläche" angezeigt wird, während bei der AcDb2dPolyline die fläche vor der änderung ermittelt wird, weiss jemand warum?? This drawing: Private Sub AcadDocument_ObjectModified(ByVal Object As Object) Dim my As AcadObject Set my = Object On Error Resume Next If (my.ObjectName = "AcDbPolyline" Or my.ObjectName = "AcDb2dPolyline") And my.Area > 0 Then MsgBox "" & my.Area End If Set my = Nothing End Sub gruß olli Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin

 Beiträge: 1250 Registriert: 20.05.2002 Die Phönizier haben das Geld erfunden - aber warum so wenig? (Johann Nepomuk Nestroy)
|
erstellt am: 29. Jul. 2004 15:50 <-- editieren / zitieren --> Unities abgeben:          Nur für ollibaer2004
|
ollibaer2004 Mitglied Dipl. Ing. Versorgungstechnik

 Beiträge: 54 Registriert: 28.06.2004 Athlon 64 4000 Windows Xp ADT7 + Rocad 7 http://tga4acad.de.vu
|
erstellt am: 29. Jul. 2004 16:35 <-- editieren / zitieren --> Unities abgeben:         
wenn du das beispiel mal ausprobieren würdest, müsste es zu den beschriebenen verhalten kommen. ändern eines rechtecks -> genau fläche wird angezeigt ändern einer polylinie -> fläche vor änderung wird angezeigt!! warum? gruß olli
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin

 Beiträge: 1250 Registriert: 20.05.2002 Die Phönizier haben das Geld erfunden - aber warum so wenig? (Johann Nepomuk Nestroy)
|
erstellt am: 29. Jul. 2004 20:55 <-- editieren / zitieren --> Unities abgeben:          Nur für ollibaer2004
|
mapcar Mitglied CADmin

 Beiträge: 1250 Registriert: 20.05.2002 Die Phönizier haben das Geld erfunden - aber warum so wenig? (Johann Nepomuk Nestroy)
|
erstellt am: 29. Jul. 2004 22:28 <-- editieren / zitieren --> Unities abgeben:          Nur für ollibaer2004
Hab mir jetzt die Mühe gemacht - test1 zeichnet was, test2 ist zum Auslesen. Der Fehler ist nicht nachvollziehbar, bei mir kommen korrekte Werte (habe mit STRECKEN die Größe verdoppelt). Code:
Public Sub test1() Dim o As Object Set o = zeichneAltePl Debug.Print o.Area Set o = zeichneNeuePl Debug.Print o.Area End SubPublic Sub test2() Dim o As Object Dim p ThisDrawing.Utility.GetEntity o, p, "Polylinie wählen: " AcadDocument_ObjectModified o End Sub Private Sub AcadDocument_ObjectModified(ByVal Object As Object) Dim my As AcadObject Set my = Object On Error Resume Next If (my.ObjectName = "AcDbPolyline" Or my.ObjectName = "AcDb2dPolyline") And my.Area > 0 Then MsgBox "" & my.Area End If Set my = Nothing End Sub Function zeichneAltePl() Dim plObj As AcadPolyline Dim points(0 To 11) As Double points(0) = 0: points(1) = 0: points(2) = 0 points(3) = 10: points(4) = 0: points(5) = 0 points(6) = 10: points(7) = 10: points(8) = 0 points(9) = 0: points(10) = 10: points(11) = 0 Set plObj = ThisDrawing.ModelSpace.AddPolyline(points) plObj.Closed = True Set zeichneAltePl = plObj End Function Function zeichneNeuePl() Dim plObj As AcadLWPolyline Dim points(0 To 7) As Double points(0) = 20: points(1) = 0 points(2) = 30: points(3) = 0 points(4) = 30: points(5) = 10 points(6) = 20: points(7) = 10 Set plObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points) plObj.Closed = True Set zeichneNeuePl = plObj End Function
Dein Fehler findet also woanders statt... Gruß, Axel Strube-Zettler ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 29. Jul. 2004 23:49 <-- editieren / zitieren --> Unities abgeben:          Nur für ollibaer2004
Abend zusammen, konnte das auch nicht so richtig nachvollziehen irgendwie ... Na jedenfalls, wollte ichs ohne Msgbox oder print lösen und dachte innerhalb des Klassenevents gleich die area als Text einzufügen, ich verzichte mal auf die if-Abfragen & alles wie beschrieben, da mir das Teil grade wieder abgeschmiert ist, folgendes ist nur sinngemäss gedacht:
Code:
Private Sub AcadDocument_ObjectModified(ByVal Object As Object) Dim textObj As AcadText Dim text$ Dim insertionPoint(0 To 2) As Double Dim minPoint, maxPoint text = Str(my.Area) my.GetBoundingBox minPoint, maxPoint insertionPoint(0) = ((maxPoint(0) - minPoint(0)) / 2) + minPoint(0) insertionPoint(1) = ((maxPoint(1) - minPoint(1)) / 2) + minPoint(1) insertionPoint(2) = ((maxPoint(2) - minPoint(2)) / 2) + minPoint(2) Set textObj = ThisDrawing.ModelSpace.AddText(text, insertionPoint, 1)
Is ne schlechte Ausrede für diese Fragmente, ich weiss, aber als ich den Code hatte ist mir Acad gnadenlos abgehaun, und wech, ich hoffe Prinzip kommt rüber ... Eigentlich tu ich dasselbe wie Ihr macht, nur statt Message einen Text zentriert im Object setzen - wenn da nicht diese Abflüge wären  Ich vermute mal da er erst die MsgBox bringt, bevor er das Objekt entgültig neu dimensioniert, dasser einfach sich mit dem GetBoundingbox verhakelt oder so, eine andre Erklärung hab ich nicht dazu, in Verbindung mit Axels erstem Post: > Und in der Hilfe steht sinngemäß: > "Verlassen Sie sich nicht darauf, > dass die Vorgänge in der Reihenfolge ablaufen, die Sie erwarten." lg Nancy -- Microsoft's definition of a boolean: TRUE, FALSE, MAYBE "Embrace and extend"...?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ollibaer2004 Mitglied Dipl. Ing. Versorgungstechnik

 Beiträge: 54 Registriert: 28.06.2004 Athlon 64 4000 Windows Xp ADT7 + Rocad 7 http://tga4acad.de.vu
|
erstellt am: 30. Jul. 2004 12:51 <-- editieren / zitieren --> Unities abgeben:         
erst einmal danke für die mühen... der ganze sinn hinter dem ganzen sollte eigentlich so sein. ich mir ein programm gebastelt --> 1. polylinie zeichnen 2. fläche ermitteln 3. einfügepunkt für text festlegen 4. text mit flächenangabe einfügen 5. polyline mit text zu einer gruppe zusammenfassen Name: "Fläche" & objektid. funktioniert auch über einnen reactor wollte ich dann überprüfen ob da geänderte objekt eine polyline ist und zur gruppe fläche* gehört. wenn ja soll der text mit neuem flächeninhalt geändert werden. leider zeigt er beim mir die fläche der polyline (_pline) vor der änderung an. nur die fläche eine rechtecks (_rectang) wir korrekt angezeigt... na ja mal weiter schaun. gruß try and error Olli Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin

 Beiträge: 1250 Registriert: 20.05.2002 Die Phönizier haben das Geld erfunden - aber warum so wenig? (Johann Nepomuk Nestroy)
|
erstellt am: 30. Jul. 2004 13:48 <-- editieren / zitieren --> Unities abgeben:          Nur für ollibaer2004
Das war mir doch schon vorher klar, und deswegen habe ich dir dieses Zitat geschickt - das hat so nach Reaktoren gerochen... Das sind olle Kamellen - du darfst nicht an dem Objekt, das den Reaktor auslöst, irgendwas machen - für so was nimmt man einen zusätzlichen Editor-Reaktor. Das heisst: geändertes Objekt merken, dann warten, bis alles im Database-Reaktor vorüber ist. Und in Editor:CommandHasEnded schaust du dann nach, ob ein Objekt auf dem ToDo-Stapel liegt und kannst es dann verarbeiten - erst dann! Das Problem ist, ganz genau wie ich vermutet habe, dass deine Fläche-Funktion ausgeführt wird, bevor die Änderung stattfindet. Nochmal zum hinter-die-Löffel-schreiben: Verlass dich nicht auf eine naheliegende und scheinbar offensichtliche Reihenfolge der Dinge! Gruß, Axel Strube-Zettler ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
   
 Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 02. Aug. 2004 14:03 <-- editieren / zitieren --> Unities abgeben:          Nur für ollibaer2004
|
ollibaer2004 Mitglied Dipl. Ing. Versorgungstechnik

 Beiträge: 54 Registriert: 28.06.2004 Athlon 64 4000 Windows Xp ADT7 + Rocad 7 http://tga4acad.de.vu
|
erstellt am: 04. Aug. 2004 12:25 <-- editieren / zitieren --> Unities abgeben:         
@fuchsi der Tipp war SUPER!! PLINETYPE auf 1 ,bei mir stand er aud 0 ;o) und schon klappt auch das o.g.Beispiel @ Axel hab mir zwar jetzt einen Merker gebaut der wartet bis der Befehl Beended ist, kann ich mir aber jetzt schenken ... danke an alle Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin

 Beiträge: 1250 Registriert: 20.05.2002 Die Phönizier haben das Geld erfunden - aber warum so wenig? (Johann Nepomuk Nestroy)
|
erstellt am: 04. Aug. 2004 14:57 <-- editieren / zitieren --> Unities abgeben:          Nur für ollibaer2004
|
ollibaer2004 Mitglied Dipl. Ing. Versorgungstechnik

 Beiträge: 54 Registriert: 28.06.2004 Athlon 64 4000 Windows Xp ADT7 + Rocad 7 http://tga4acad.de.vu
|
erstellt am: 06. Aug. 2004 12:45 <-- editieren / zitieren --> Unities abgeben:         
|