Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Block InsertionPoint

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:  Block InsertionPoint (1799 mal gelesen)
H.D.
Mitglied



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

Beiträge: 25
Registriert: 12.05.2005

P4 3.20 GHz
1,00 GB RAM
WinXP SP2
Autodesk Architectural Desktop 2004

erstellt am: 06. Okt. 2005 16:09    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

Hello everybody!

Hab mal wieder ein kleines Problem mit einem Block!

Ich will auf eine modifikation in einer Zeichnung reagieren. Und zwar wenn ein Block bewegt wird will ich kontrollieren, ob dieser in einem anderen Bereich der Zeichnung plaziert werden darf. Dabei soll der Block "Grob" in der Zeichung plaziert werden können. Per VBA will ich die fein Justierung durchführen.

Mein Problem liegt darin das ich den geänderten InsertionPoint meiner Blockreferenz nicht zuweisen kann.


Private Sub AcadDocument_ObjectModified(ByVal Object As Object)
  Dim Point1 as variant
  Dim Point2(2) as double
  dim dx as long
  dim dy as long
  dim dz as long

'InsertionPoint auslesen:
  Point1 = Object.InsertionPoint

'Manipulation der Koordinaten
  Point2(0) = Point1(0) + dx
  Point2(1) = Point1(1) + dy
  Point2(2) = Point1(2) + dz

'Neuen InsertionPoint zuweisen
  Object.InsertionPoint = Point2  '<==== Problem!!! ???

end sub

In der AutoCAD hilfe steht das der InsertionPoint Read und Write fähig ist, auch für AcadBlockReferenzen. Warum funzt es nicht bei mir?

Gruss

H.D.

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

startrek
Moderator
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 06. Okt. 2005 20:33    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 H.D. 10 Unities + Antwort hilfreich

Hi H.D.,

ich weiss es nicht, denke aber mal, dass das Event _ObjectModified
objektbezogen Readonly zugreift. Zumindest lautet der Fehler so ähnlich.

Reine Vermutung:
IMHOIn my humble oppinion (Meiner Meinung nach) würdest Du ja sonst eine Kettenreaktion auslösen,
da das Ändern des InsertionPoints wiederum ein ObjectModified auslöst,
was seinerseits ein ObjectModified auslöst, was wiederum ein ObjectModified ... usw.usf.

bitteres Ende: Endlosschleife/nicht genügend Stapelspeicher/c'est lavie oder so;-)

Aber wiegesagt, nur Vermutung, kann auch falsch liegen, keine Ahnung.

gruss Nancy
--
Error 032: Recursion error - see error 032. ;-)  

[Diese Nachricht wurde von startrek am 06. Okt. 2005 editiert.]

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

H.D.
Mitglied



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

Beiträge: 25
Registriert: 12.05.2005

P4 3.20 GHz
1,00 GB RAM
WinXP SP2
Autodesk Architectural Desktop 2004

erstellt am: 07. Okt. 2005 08:25    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

Moin,

Danke für Deine Antwort Nancy!

Die Frage die ich mir jetzt stelle ist: Wann wird der Interrupt ausgelöst?

Wird dieser ausgelöst bei einer reinen Zuweisung also auch wenn Point1 = Point2 ist oder erst dann wenn Point1 <> Point2 ist?

Vielleicht weiss jemand von Euch eine Antwort.

Gruss

H.D.

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 07. Okt. 2005 12:10    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 H.D. 10 Unities + Antwort hilfreich

startreck hat recht.
Du darfst in einem Reaktor nichts machen, was wiederum den selben Reaktor auslösen könnte.
d.h. Im Reaktor ObjectModified darfst du das selbe Objkte (das den Reaktor ausgelöst hat) nicht wieder ändern.

Du könntest da eher mit einem Editor Reaktor arbeiten
command-WillStart, Command-Ended und Command-Cancelled und analysieren welchen Befehl der Benutzer aufgerufen hat und welche Objekte damit betroffen sind und danach den Block positionieren

Ist zwar ein merklich höherer Aufwand, aber aus meiner Sicht die einzige Möglichkeit ein geändertes Objekt nochmal mittels Reaktor zu ändern

------------------

Ing. Anton Fuchs
WWW.FFZELL.AT.TC

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

startrek
Moderator
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 07. Okt. 2005 21:29    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 H.D. 10 Unities + Antwort hilfreich

 
Zitat:
Original erstellt von H.D.:
Wird dieser ausgelöst bei einer reinen Zuweisung also auch wenn Point1 = Point2 ist oder erst dann wenn Point1 <> Point2 ist?

das lässt sich doch recht simpel testen;-)
Ja - es crasht auch wenn Point1() = Point2(),
alldieweil zwar die Punktkoordinaten deckungsgleich sein mögen,
aber es wird trotzdem als 'write' interpretiert, auch wenns haargenau dasselbe ist.
Versuch dich auf Umwege da ranzuhangeln, mit _ObjectModified() wirste da wahrscheinlich nicht so richtig glücklich werden - siehe fuchsi
Nicht mal sowas geht:

Code:

Option Explicit

Private Sub AcadDocument_ObjectModified(ByVal Object As Object)
  Dim Point1 As Variant
  Dim dx#, dy#, dz#
 
  dx = 50: dy = 50: dz = 50

'InsertionPoint auslesen:
  Point1 = Object.InsertionPoint

'Manipulation der Koordinaten
  Point2(0) = Point1(0) ' + dx
  Point2(1) = Point1(1) ' + dy
  Point2(2) = Point1(2) ' + dz
 
  'On Error Resume Next
  If CDbl(Point1(0)) = Point2(0) And CDbl(Point1(1)) = Point2(1) _
  And CDbl(Point1(2)) = Point2(2) Then
    Debug.Print Point2(0), Point2(1), Point2(2)
    Exit Sub
  Else
    Set dummy = Object
    Call x
  End If

End Sub

Sub x()
  On Error Resume Next
  dummy.InsertionPoint = Point2
  Debug.Print Point2(0), Point2(1), Point2(2)
End Sub


@fuchsi, alder schlumbi  , dös nächste Moal schreibst mi richtig, oder glei Nancy ;;-)))

lg Nancy     

[Diese Nachricht wurde von startrek am 07. Okt. 2005 editiert.]

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

H.D.
Mitglied



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

Beiträge: 25
Registriert: 12.05.2005

P4 3.20 GHz
1,00 GB RAM
WinXP SP2
Autodesk Architectural Desktop 2004

erstellt am: 08. Okt. 2005 10:40    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

Danke an Euch beiden!

Ihr habt es mal wieder geschaft meinen Horizont zu erweitern:-)

Gruss

H.D.

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 16. Okt. 2005 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 Nur für H.D. 10 Unities + Antwort hilfreich

Hallo H.D.

führe doch einfach mit

Code:

Static vlbo_CodeEvent as boolean

if vlbo_CodeEvent = true
  ' Mach nichts
  vlbo_CodeEvent=false
else
  vlbo_CodeEvent=true
  ' dein Code
end if


ein Flag ein. Hiermit kannst du steuern ob der Code durch ein verschieben oder durch deinen eigenen Code ausgelöst wurde.

Stelli

------------------
Warum lisp'eln wenn's auch anders geht.

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