| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: DXF speichern unter (3016 mal gelesen)
|
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 22. Mrz. 2004 21:55 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen! Ich habe mir vor einigen Wochen ein VBA Programm geschrieben, mit dem ich Objekte auswähle, die als *.dxf Datei abgelegt werden, um sie dann von einem anderen Programm weiter verarbeiten zu lassen. Dieses funktionierte eigentlich sehr gut. Nun arbeite ich zur Zeit für einen amerikanischen Kunden, der mir AutoCAD Zeichnungen zu mailt, in denen ich dann weiter arbeiten muß. Wenn ich in diesen Zeichnungen mein Programm anwende, funktioniert dies zwar auch, aber der Speicherungsablauf dauert enorm lange. Hat evtl. jemand eine Idee, woran dies liegen kann? Für Hilfe wäre ich sehr dankbar. Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003 AutoCAD 2021/2022 CAD+T HP ZBook 15 G4, 64-bit, WIN 10 Pro
|
erstellt am: 19. Apr. 2004 11:05 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen! Mein Problem mit dem speichern scheint nichts mit den Zeichnungen ansich zu tun zu haben. Ferner ist mir aufgefallen, daß bei dem abspeichern die CPU-Nutzung bezogen auf die acad.exe auf bis zu 95% ansteigt und somit die Gesamtleistung von 100% erreicht wird. Kann dieses evtl. etwas mit der Verwendung des CommonDialog1 unter Windows 2000 Pro. zu tun haben? Beim suchen im Internet bin ich auch noch auf die svchost.exe bzgl. des Einsatzes von dll's gestoßen. Aber zu der svchost.exe gibt es ja Info's vom Systemprogramm bis hin zum Virus? Kann evtl. jemand damit etwas anfangen und mir helfen? Vielen Dank im voraus. Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 19. Apr. 2004 12:46 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hi Dirk, Kann dieses evtl. etwas mit der Verwendung des CommonDialog1 unter Windows 2000 Pro. zu tun haben? Nicht dass ich deine Frage beantworten könnte... reine Interessensfrage: Mir persönlich ist schon schleierhaft, wie Du es geschafft hast das CommonDialog-Control einzubinden ???? Sobald ich das versuche, kommt: Das Steuerelement konnte nicht erstellt werden, da dieses nicht korrekt lizensiert wurde. Hab das mit a2k, xl2k unter win98 und win2k probiert, same shit, different systems lg Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 19. Apr. 2004 14:53 <-- editieren / zitieren --> Unities abgeben:
|
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003 AutoCAD 2021/2022 CAD+T HP ZBook 15 G4, 64-bit, WIN 10 Pro
|
erstellt am: 20. Apr. 2004 21:07 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen! Ich stelle mal meinen kompletten Quellcode hier hinein, in der Hoffnung, daß mir doch noch jemend helfen kann. Private Declare Function SHBrowseForFolder Lib "shell32.dll" _ Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _ Alias "SHGetPathFromIDListA" (ByVal pidl As Long, _ ByVal pszPath As String) As Long Private Type BROWSEINFO hOwner As Long pidlRoot As Long pszDisplayName As String lpszTitle As String ulFlags As Long lpfn As Long lParam As Long iImage As Long End Type Private Const MAX_PATH = 2600 Public Function ReturnFolder(Note As String) As String Dim Browser As BROWSEINFO Dim lngFolder As Long Dim strPath As String With Browser .hOwner = ThisDrawing.hwnd .lpszTitle = Note .pszDisplayName = String(MAX_PATH, 0) End With strPath = String(MAX_PATH, 0) lngFolder = SHBrowseForFolder(Browser) If lngFolder Then SHGetPathFromIDList lngFolder, strPath ReturnFolder = Left(strPath, InStr(strPath, vbNullChar) - 1) End If End Function Private Sub Cbo_Change() If Cbo.Text = "R12 - DXF" Then cmd5.Enabled = True End If If Cbo.Text = "R13 - DXF" Then cmd5.Enabled = False End If End Sub Private Sub cmd2_Click() Dim Ergebnis Ergebnis = Shell("C:\WW4\WW40 c:\ww4\a1\mpr\" & tbo1.Text & ".mpr") End Sub Private Sub cmd5_Click() Dim Ergebnis Ergebnis = Shell("C:\WW4\A1\Bpp -i=C:\WW4\A1\bpp.ini -f=" & tbo1.Text) cmd2.Enabled = True End Sub Private Sub cmd3_Click() Dim objUCS As AcadUCS Dim origin(0 To 2) As Double Dim xAXIS(0 To 2) As Double Dim yAXlS(0 To 2) As Double Dim varPoint As Variant UserForm1.Hide varPoint = ThisDrawing.Utility.GetPoint(, "Please select new UCS origin: ") origin(0) = varPoint(0): origin(1) = varPoint(1): origin(2) = varPoint(2) xAXIS(0) = varPoint(0) + 1: xAXIS(1) = varPoint(1): xAXIS(2) = varPoint(2) yAXlS(0) = varPoint(0): yAXlS(1) = varPoint(1) + 1: yAXlS(2) = varPoint(2) Set objUCS = ThisDrawing.UserCoordinateSystems.Add(origin, xAXIS, yAXlS, "AutoCad2004VbaProgrammersReferenzVonJoeSutphinOdersoAehnlich") ThisDrawing.ActiveUCS = objUCS Set objUCS = Nothing UserForm1.Show End Sub Private Sub cmd4_Click() Dim objDxf As AcadSelectionSet Dim strTempName As String Dim strTempPath As String Dim strFilename As String Dim objExportFile As AcadDocument If (tbo1.Value = "") Then GoTo MyErrorHandler UserForm1.Hide Select Case Cbo.ListIndex Case 0 'Abspeichern des WBloks unter R 12.dxf strTempPath = tbo.Text & "\" & tbo1.Text strFilename = RemoveExtension(ThisDrawing.name) Set objDxf = ThisDrawing.SelectionSets.Add("dxfcnc"): objDxf.SelectOnScreen ThisDrawing.Wblock strTempPath, objDxf Set objExportFile = ThisDrawing.Application.Documents.Open(strTempPath) With objExportFile .SaveAs ThisDrawing.path & "\" & tbo1.Text, acR12_dxf .Close End With Kill strTempPath & ".dwg" strTempPath = RemoveExtension(strTempPath) objDxf.Delete Set objDxf = Nothing Set objExportFile = Nothing UserForm1.Show Case 1 'Abspeichern des WBloks unter R 13.dxf strTempPath = tbo.Text & "\" & tbo1.Text strFilename = RemoveExtension(ThisDrawing.name) Set objDxf = ThisDrawing.SelectionSets.Add("dxfcnc"): objDxf.SelectOnScreen ThisDrawing.Wblock strTempPath, objDxf Set objExportFile = ThisDrawing.Application.Documents.Open(strTempPath) With objExportFile .SaveAs ThisDrawing.path & "\" & tbo1.Text, acR13_dxf .Close End With Kill strTempPath & ".dwg" strTempPath = RemoveExtension(strTempPath) objDxf.Delete Set objDxf = Nothing Set objExportFile = Nothing UserForm1.Show Exit Sub MyErrorHandler: MsgBox "Bitte einen Dateinamen - maximal 8 Zeichen - eingeben", 64, "Hinweis" End Select End Sub Public Function RemoveExtension(FileName1 As String) As String RemoveExtension = Left(FileName1, Len(FileName1) - 4) End Function Private Sub cmd6_Click() strPfad = ReturnFolder("Bitte Verzechnis wählen") If strPfad <> "" Then 'wenn Rückgabewert nicht leer dann tbo.Text = strPfad & "\" & newname '& newname 'alternativ falls Backslash fehlt: End If End Sub Private Sub CommandButton1_Click() AvViewX1.src = "C:\WW4\dxf\" & tbo1.Text & ".dxf" End Sub Private Sub UserForm_Initialize() UserForm1.tbo.Text = "C:\ww4\dxf" StatusBar1.Panels(1).Text = "aktueller Zeichnungsname = " & ThisDrawing.name Cbo.Value = "R12 - DXF" With Cbo .AddItem "R12 - DXF", 0 .AddItem "R13 - DXF", 1 End With End Sub Private Sub cmd1_Click() End End Sub Wie bereits erwähnt, wäre ich für Hilfe sehr dankbar.
Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 22. Apr. 2004 11:24 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen! Wie bereits schon mehrfach erwähnt, habe ich mir ein sehr nützliche VBA-Tool geschreiben. Nun habe ich aber ein Problem, in sofern, daß je nach Größe der Ursprungszeichnung die Erzeugung des Wblocks und die anschließende Abspeicherung unter *.dxf sehr lange dauert. Dateigröße von ca. 250 kby in einigen Sekunden. Dateigröße von ca. 2 mby bis zu 6 Minuten, wobei die CPU-Nutzung dabei mit 100% voll ausgelastet wird. Hier ein Ausschnitt aus meinem Programm, wo ich meine, daß evtl. das Problem liegen könnte. Für Hilfe wäre ich sehr dankbar. Private Sub cmd4_Click() Dim objDxf As AcadSelectionSet Dim strTempPath As String Dim strFilename As String Dim objExportFile As AcadDocument If (tbo1.Value = "") Then GoTo MyErrorHandler UserForm1.Hide Select Case Cbo.ListIndex Case 0 'Abspeichern des WBloks unter R 12.dxf 'strTempPath = ThisDrawing.path & "\" & tbo1.Text strTempPath = tbo.Text & "\" & tbo1.Text strFilename = RemoveExtension(ThisDrawing.name) Set objDxf = ThisDrawing.SelectionSets.Add("dxfcnc"): objDxf.SelectOnScreen ThisDrawing.Wblock strTempPath, objDxf Set objExportFile = ThisDrawing.Application.Documents.Open(strTempPath) With objExportFile .SaveAs ThisDrawing.Path & "\" & tbo1.Text, acR12_dxf .Close End With Kill strTempPath & ".dwg" 'Kill strTempPath 'delete temp. Wblock.dwg File strTempPath = RemoveExtension(strTempPath) objDxf.Delete Set objDxf = Nothing Set objExportFile = Nothing UserForm1.Show Case 1 'Abspeichern des WBloks unter R 13.dxf 'strTempPath = ThisDrawing.path & "\" & tbo1.Text strTempPath = tbo.Text & "\" & tbo1.Text strFilename = RemoveExtension(ThisDrawing.name) Set objDxf = ThisDrawing.SelectionSets.Add("dxfcnc"): objDxf.SelectOnScreen ThisDrawing.Wblock strTempPath, objDxf Set objExportFile = ThisDrawing.Application.Documents.Open(strTempPath) With objExportFile .SaveAs ThisDrawing.Path & "\" & tbo1.Text, acR13_dxf .Close End With Kill strTempPath & ".dwg" 'Kill strTempPath 'delete temp. Wblock.dwg File strTempPath = RemoveExtension(strTempPath) objDxf.Delete Set objDxf = Nothing Set objExportFile = Nothing UserForm1.Show End Select Exit Sub MyErrorHandler: MsgBox "Bitte einen Namen (maximal 8 Zeichen) eingeben", 64, "Hinweis" End Sub Public Function RemoveExtension(FileName1 As String) As String RemoveExtension = Left(FileName1, Len(FileName1) - 4) End Function Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003 AutoCAD 2021/2022 CAD+T HP ZBook 15 G4, 64-bit, WIN 10 Pro
|
erstellt am: 28. Apr. 2004 13:17 <-- editieren / zitieren --> Unities abgeben:
|
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 28. Apr. 2004 14:18 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hi Dirk, Na gut, aber vorweg, ich glaub' kaum, dass ich Dir helfen kann. Mal angenommen Du versuchst das ganze mal ohne Dialog & so, bastelst Dir einfach paar Strings und läßt das ganze mal 'statisch' ablaufen, dauerts dann auch so lange ?? (oder nimm mal statt UF.Hide unload me) Oder noch 'ne Idee, setzt Dir mal an paar passenden Stellen ein: debug.print timer & " commandname" oder sowas und schau' mal, ab wo er beginnt zu lahmen. Ich beklecker mich jetzt nicht grad mit Ruhm mit der Antwort, ich weiss ... lg Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 27. Mai. 2004 13:01 <-- editieren / zitieren --> Unities abgeben:
Hallo Nancy! Hallo Zusammen! Wie kann ich denn den Code bzgl. """" debug.print timer & " commandname" oder sowas und schau' mal, ab wo er beginnt zu lahmen. """" aufbereite, oder anders gefragt: Wie macht man das? Ich habe damit noch nicht gearbeitet. Vielen Dank im voraus. Gruß Dirk
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 27. Mai. 2004 14:24 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hi Dirk, aktivier Dir mal unter Ansicht | Direktfenster. Darein tippe mal zB: ?timer 51615,79 ?now 27.05.04 14:20:27 ?thisdrawing.ActiveLayer.Name 0 ?thisdrawing.activelayout.Name Model ?timer 51639,57 'timer' liefert Dir die vergangenen Sekunden seit 0:00 Uhr das '?' steht nur im Direktbereich für das was 'debug.print' im Modul macht, also nix weiter als das Ergebis ins Direktfenster zu schreiben, halt wie die Msgbox-Anweisung, nur nicht so nervig
Code:
Sub asdf() Dim a#, b# a = Timer MsgBox "woll'n wir doch mal schauen wie lange das Bestätigen dauert ..." b = Timer MsgBox "jo, hat genau " & b - a & " Sekunden gedauert" Debug.Print "jo, hat genau " & b - a & " Sekunden gedauert" End Sub
Mit Commandname meinte ich nur, dass Du Dir halt irgendeine Bez/Merker zuschreibst, damit Du noch weisst, was was war. Naja und nicht grad ein selectonscreen zwischen den Timerz, es sei denn Du willst messen wie lange der User zur Auswahl braucht HTH Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 28. Mai. 2004 12:29 <-- editieren / zitieren --> Unities abgeben:
Hallo Nancy! Erst einmal vielen Dank für Deine Hilfe. Aber genau da _____________________________________________________________________ Naja und nicht grad ein selectonscreen zwischen den Timerz, es sei denn Du willst messen wie lange der User zur Auswahl braucht _____________________________________________________________________ scheint mein Problem zu liegen. Denn in meinem Programm - siehe Code weiter oben - selectiere ich ja Objekte über selectonscreen aus einer Zeichnung, die dann als Block/dwg in ein vorgegebenes Verzeichnis gespeichert, direkt anschließend im Hintergrund geladen und dann als dxf abgespeichert wird. Die Block/dwg wird anschließend über den Befehl KILL gelöscht. Die dxf Datei benötige ich für ein anderes Programm, daß zur Verarbeitung nur dxf Dateien einlesen kann. Genau diese Prozedur dauert je nach Dateigröße der Zeichnung aus der ich die Objekte selectiere zwischen 10 sek. bis hin zu 10 min. Vielleicht kannst Du ja damit noch etwas anfangen? Viele Grüße und ein schönes und hoffentlich sonniges Pfingstwochenende. Auch an den Rest des Forums. Dirk
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 28. Mai. 2004 14:20 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hi Dirk, also ich --> bis hierhin und nicht weiter Keine Ahnung, ich weiss es nicht. Was die Timer angeht, die kannst Du doch setzen wie Du lustig bist, also eben nach selectonscreen , wobei ich mir nun garnich mehr so sicher bin, ob Du dich damit überhaupt an den Fehler besser ranhangeln könntest. CU Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
harryk Mitglied Projektleiter
Beiträge: 124 Registriert: 19.08.2003
|
erstellt am: 01. Jun. 2004 21:35 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
|
BloodyMess Mitglied Applicationingenieur
Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 01. Jun. 2004 22:57 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hallo Dirk, ich habe auch keine wirkliche Ahnung, da ich mich im Moment nicht wirklich mit Acad beschäftigen muss, aber : svchost.exe ist definitiv eine Systemdatei und kann auch durchaus mehrmals als Prozess laufen. Es gab/gibt einen Virus, der hat sich als svdhost.exe getarnt. also auf richtige schreibweise kucken, aber glaub nicht, dass das dein Problem ist. Ich vermute eher, dass es ein Problem mit der amerikanischen Acadversion ist. Benutz doch mal in deiner Version die Dienstprogramme zum überprüfen und evtl. die Bereinigenfunktion. Sonst wüßt ich auf anhieb auch nicht, was es sein könnte. Eine solche Datei einstellen kannst Du net, oder? Welches Acad u welches OS benutzt Du? Gruß TP Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 03. Jun. 2004 12:53 <-- editieren / zitieren --> Unities abgeben:
Hallo Harry! Ich hab mal beides probiert. Bei beiden Varianten - aus dem Programm / zu Fuß - dauert die dxf Abspeicherung fast gleich lang. Meinst Du, daß das Problem evtl. aufs System zurück zuführen ist? Zu Fuß hatte ich es bislang noch nicht verglichen. Aber welchen Grund kann dies blos haben? Gruß Dirk
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
harryk Mitglied Projektleiter
Beiträge: 124 Registriert: 19.08.2003 Revit 2019, ACMep2019, F360
|
erstellt am: 05. Jun. 2004 11:57 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
hi, dann liegts nicht an deinem programm sondern an der datei oder den darin enthaltenen daten. je nachdem wieviele elemente konvertiert werden müssen dauerts halt. deshalb sind dxf dateien auch grösser, schliesslich wirds ja in klartext übersetzt. vorher die zeichnung bereinigen, texte ohne inhalt suchen, punkte rausschmeissen. halt alles was nicht sichtbar ist und nicht benötigt wird. gruss, harry Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
The VIP Mitglied Technischer Zeichner
Beiträge: 170 Registriert: 06.09.2002 AutoCAD Mechanical 6 unter Windows XP
|
erstellt am: 07. Jun. 2004 13:08 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Interessanter Thread, denn auch bei uns in der Firma dauert es seit einigen Wochen mehrere Sekunden, gar Minuten bis eine DXF erstellt wurde! Unterschied: Wir erstellen die DXFs über einen selbstgebastelten Button: Code: ^C^Cwahl;\dxfout;~;v;R12;o;v;;;v;;
Die Zeit dauert aber deswegen nicht kürzer. Ich denke auch kaum dass es mit der Art und Weise WIE die DXF erstellt wird zusammenhängt, sondern dass es ein ACAD oder evtl. Windows (Netzwerk) Problem ist, denn das Problem gibt es erst seit einigen Wochen. Vorher konnte man DXFs sehr schnell erstellen! Ich würde mich auch freuen wenn ich endlich erfahren könnte woran das liegt. Die Konstrukteuere bei uns werden immer wahnsinnig wenn sie eine DXF machen sollen... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |