Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Autocad hängt nach .Net Funktionen

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
Autor Thema:  Autocad hängt nach .Net Funktionen (1295 mal gelesen)
veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 23. Jun. 2009 09:41    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!
Ich habe jetzt schon öfter das Phänomen festgestellt, dass nach dem Ende bei .NET Funktionen im Autocad, dann beim bewegen der Maus das Fadenkreuz kopiert wird.
Sprich fährt man mit der Maus hin und her wird der Bildschirm mit Fadenkreuzen zugedeckt.

Was kann das für eine Ursache haben?
Ein Fehler während dem Code wo dann eine Transaction die nicht richtig beendet wurde?

mfg

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


Ex-Mitglied

erstellt am: 23. Jun. 2009 09:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

kenn ich so nicht, nie gesehen.

Greifst Du auf Bildschirm-Lib's hin, z.B. auf JIG-Funktionen?
Ist das reproduzierbar, d.h. tritt nach Durchlauf eines bestimmten Codes auf?

Wie verhält sich denn AutoCAD in dieser Situation, kannst Du noch Elemente anklicken bzw. grundsätzlich weiterarbeiten? Was ist nach Minimieren/Wiederherstellen des AutoCAD-App-Fensters?

Dreh mal im AutoCAD die Bildschirm-Beschleunigung ab.
Probiers auch mal auf einem anderen Rechner mit anderer Graphikkarte, wenn Du die Chance hast.

- alfred -

------------------
www.hollaus.at

veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 23. Jun. 2009 10:22    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

Ok, ganz nachvollziehen kann ich es noch nicht.

Es kam ein Fehler bei ReadDWGFile die Funktion ist beim Aufruf über try catch gehandelt.(DWG war nicht vorhanden)
im catch jedoch nur ne msgbox mit Errorcode und Beschreibung

Dim tAcadDocLock As ApplicationServices.DocumentLock
                    Dim myTransMan As DatabaseServices.TransactionManager
                    Dim myTrans As DatabaseServices.Transaction
                    Dim myDwg As Document
                    Dim mydb As DatabaseServices.Database
                    Dim tBlTabRecID As ObjectId
                    Dim OldBorder As DatabaseServices.BlockReference
                    myDwg = ApplicationServices.Application.DocumentManager.MdiActiveDocument
                    mydb = myDwg.Database
                    myTransMan = myDwg.TransactionManager
                    myTrans = myTransMan.StartTransaction
                    Rahmenformat = AcadFunctions.GetPaperSize(lay.Rahmengroeße)
                    tAcadDocLock = myDwg.LockDocument
                    Dim tDB As Database = New Database(False, True)
                    'If IO.File.Exists("D:\RahmenSK\Format\" & Rahmenformat & ".dwg") Then
                    tDB.ReadDwgFile("D:\RahmenSK\Format\" & Rahmenformat & ".dwg", IO.FileShare.None, True, "")
                    tBlTabRecID = myDwg.Database.Insert(Rahmenformat, tDB, False)
                    AcadFunctions.InsertBlock(New Geometry.Point3d(0, 0, 0), Rahmenformat, "BORDER", 1, 1, 1) ' & Rahmenformat
                    'Else
                    '  MsgBox("Neuer Rahmen konnte nicht gefunden werden!")
                    'End If

                    OldBorder = CType(lay.RahmenID.GetObject(OpenMode.ForWrite, True, True), DatabaseServices.BlockReference)

                    OldBorder.Erase(True)

                    myTrans.Commit()
                    If tDB IsNot Nothing Then tDB.CloseInput(True) : tDB.Dispose() : tDB = Nothing
                    If tAcadDocLock IsNot Nothing Then tAcadDocLock.Dispose()

es passiert jedoch nicht immer, habs 2-3 mal probiert ohne acad zu schließen, dann kam es wieder mal.
Habe die Zeichnung minimiert und dann kam im Befehlsfenster ununterbrochen folgendes sehr schnell hintereinander (da war Zeichnung1, die Standard dwg beim öffnen, offen)

Befehl: _MODEL
Unbekannter Objekttyp 0!
Befehl: _AMMODE
Unbekannter Objekttyp 0!

als ich diese auch minimierte war es weg.
bekam jedoch ein paar Sekunden drauf einen Autocad Error der einen Absturz und Fehlerbericht zufolge hatte.

Können Objekte die angelegt und bearbeitet wurden aber dann nicht freigegeben, oder auf nothing gesetzt wurden sowas verursachen?

mfg

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


Ex-Mitglied

erstellt am: 23. Jun. 2009 10:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

nur geraten, weil in diesem Code leider nicht zu erkennen:

Wenn Du in das 'catch' hineinfällst (von dem Du schreibst, aber ich es im Code nicht sehe), hast Du dann sichergestellt, dass alles geschlossen/disposed wurde? Die tDB, die Transaction, das DocumentLock?

Und wenn er die Datei nicht finden konnte, hast Du dann trotzdem '.CloseInput' gemacht?

Hast Du vorher überprüft, ob es die Blockdefinition (RahmenFormat) schon gibt, wenn's die nämlich schon gibt, dann glaube ich, könnte es Brösel geben? Unabhängig davon würde ich das immer zuvor prüfen, denn es geht tausend mal schneller, die interne Blockdefinition zu verwenden als eine externe DWG zu öffnen.

Viel Erfolg, - alfred -

------------------
www.hollaus.at

veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 23. Jun. 2009 10:48    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

Nein, das war eben noch nicht gegeben. Aber es passierte ja dann eben auch nicht immer.

Ich habe das try Catch jetzt über die Funktion gelegt, und eine Abfrage ob das File existiert.

Dass das File immer geladen wird hat seinen Grund, ich will dass es überschrieben wird, falls der Block erneuert werden soll.
Es kommt immer wieder vor, dass ein Update kommt, und so kann ich sicherstellen, dass der neue drinnen ist.

Aber das Problem trat bei anderen Funktionen die einen Fehler verursachten auch schon auf.
Darum habe ich jetzt mal nachgefragt woran das liegen kann, damit die Fehlersuche schneller geht.

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

veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 23. Jun. 2009 10:53    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

Nein, das war eben noch nicht gegeben. Aber es passierte ja dann eben auch nicht immer.

Ich habe das try Catch jetzt über die Funktion gelegt, und eine Abfrage ob das File existiert.

Dass das File immer geladen wird hat seinen Grund, ich will dass es überschrieben wird, falls der Block erneuert werden soll.
Es kommt immer wieder vor, dass ein Update kommt, und so kann ich sicherstellen, dass der neue drinnen ist.

Aber das Problem trat bei anderen Funktionen die einen Fehler verursachten auch schon auf.
Darum habe ich jetzt mal nachgefragt woran das liegen kann, damit die Fehlersuche schneller geht.

mfg

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


Ex-Mitglied

erstellt am: 23. Jun. 2009 10:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

Zitat:
Dass das File immer geladen wird hat seinen Grund, ich will dass es überschrieben wird, falls der Block erneuert werden soll
...Glatteiswarnung!! 

Eine Blockdefinition ersetzt man nicht einfach so, dass man eine gleichnamige Blockdefinition in die BlockTableRecords hinzufügt. Das funktioniert zwar mit dem Benutzerinterface von AutoCAD (das in diesen Fällen auch fragt, ob diese zu ersetzen ist und sich dann entsprechend verhält), das erkennst Du schon damit, dass eine BlockReference auf eine ObjectID verweist (auf die ObjectID des BlocktableRecords it der Definition des Blocks), wenn Du jetzt aus der Externen DWG was hereinholst, wird dieses zwangsweise eine neue ObjectID. Und hat diese Blockdefinition den gleichen Namen, bin ich fast überzeugt davon, dass Du nach Ausführen Deiner Funktion nachher mit '_audit' Defekte in der Zeichnung feststellen wirst.

Die richtige Vorgehensweise ist:

a) prüfen, ob es einen BlockTableRecord (für diesen Blocknamen) gibt

a1) gibt es diese nicht, kannst Du tun, wie es jetzt programmiert ist

a2) gibt es diese bereits, dann musst Du den BlockTableRecord öffnen, die Geometrieteile daraus entfernen und die einzelnen Geometrieelemente Deiner externen Zeichnung da hineinkopieren.

HTH, - alfred -

------------------
www.hollaus.at

veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 23. Jun. 2009 11:27    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

ist es da nicht einfacher, den alten BTR zu löschen?

Für micht klingt dass jetzt schwieriger da alles zu löschen und das neue hineinzukopieren.

mfg

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


Ex-Mitglied

erstellt am: 23. Jun. 2009 11:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi, 
Zitat:
ist es da nicht einfacher, den alten BTR zu löschen?
...kann nicht gelöscht werden, wenn bereits BlockReferences eingesetzt sind, die auf diesen BTR verweisen. 

- alfred -

------------------
www.hollaus.at

veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 23. Jun. 2009 11:36    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

ich muss aber zuerst die dwg datei einlesen oder nicht? um die elemente in den alten BTR hineinkopieren zu können oder?

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


Ex-Mitglied

erstellt am: 23. Jun. 2009 11:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi, 
Zitat:
ich muss aber zuerst die dwg datei einlesen oder nicht? um die elemente in den alten BTR hineinkopieren zu können oder?
...wo/wie solltest Du die Information (wie der Block aussehen sollte) sonst herbekommen?

- alfred -

------------------
www.hollaus.at

veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 23. Jun. 2009 12:31    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

Zitat:
Original erstellt von a.n.:

Und wenn er die Datei nicht finden konnte, hast Du dann trotzdem '.CloseInput' gemacht?


Was ist dass .CloseInput?Was bewirkt dass?

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


Ex-Mitglied

erstellt am: 23. Jun. 2009 12:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

na Du hättest es ja in Deinem Code verwendet:

Zitat:
tDB.CloseInput(True)

...schliesst den offenen FileHandle.

- alfred -

------------------
www.hollaus.at

veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 23. Jun. 2009 12:50    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

achso, da habe ich drübergelesen.

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

Silvan01
Mitglied



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

Beiträge: 128
Registriert: 28.04.2009

AutoCAD Civil 2009
AutoCAD Civil 2010
Visual Studio 2008

erstellt am: 09. Sep. 2010 11: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 veydan 10 Unities + Antwort hilfreich

Hallo,

ich weiß der Beitrag ist schon etwas älter aber ich stoße auf das selbe Problem! Daher die Fragen:

Zitat:
a) prüfen, ob es einen BlockTableRecord (für diesen Blocknamen) gibt

a1) gibt es diese nicht, kannst Du tun, wie es jetzt programmiert ist

a2) gibt es diese bereits, dann musst Du den BlockTableRecord öffnen, die Geometrieteile daraus entfernen und die einzelnen Geometrieelemente Deiner externen Zeichnung da hineinkopieren.


Zu a) Ich habe die ObjectID von dem Neuen Block, weiß aber nicht wie ich abfragen ob es einen Blocktablerecord gibt, also wie mache ich das  ?

Zu a2) Wie bekomme ich den Blocktablerecord von dem bereits vorhandenen Block um diesen zu löschen?

Grüße und Dank im Vorraus

Silvan

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


Ex-Mitglied

erstellt am: 09. Sep. 2010 12:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

Du kannst zuerst mal prüfen, ob ObjectID.IsValid andalso (not ObjectID.IsErased) der BlockTableRecordID gültig ist.

Zu A2: Wenn Du schon die BlockTableRecordID hast, dann brauchst Du diese nur mehr mit TransAction.Getobject zum Schreiben öffnen. Löschen darfst Du diese aber erst, wenn es keine Referenz mehr gibt.

- alfred -

------------------
www.hollaus.at

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