| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: Instanz einer Klasse an eine offene DWG binden (1783 mal gelesen)
|
Mario Rosenbohm Mitglied Vermessungsingenieur
 
 Beiträge: 121 Registriert: 09.10.2003 AutoCAD Civil 3D 2022 CADdy V.17 Laptop Win10 Intel i7 2.71GHz, 64GB Ram
|
erstellt am: 13. Feb. 2007 09:31 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich habe ein Problem. ... wie beschreibe ich es ? ... .. Am besten ich erkläre es an unserem "alten" CADdy ... Also, wenn ich in CADdy V2 (Vermessungsappl.) ein Projekt geöffnet habe, dann hat CADdy die Vermessungspunkte aus der Datenbank und aus dem PIC die B-Symbole mit FolgenNr 108 (in ACAD => aus dem DWG die entspr.Blöcke) ein eine Speicherliste (im RAM) gelesen. Das bekomme ich ebenfalls hin. Nur in CADdy gibt es innerhalb der Anwendung immer nur 1 PIC, wenn ich ein weiteres bearbeiten möchte, dann muß ich das geladene schließen. Aber in AutoCAD kann ich ein weiteres öffnen und dann verhaspelt sich ja die Application. Denn sie will mit der Speicherliste auf die falsche DWG. Nun will ich aber das gleichzeitige Arbeiten mit mehreren DWG's nicht unterbinden. Wie kann ich dann die Speicherliste, das wäre eine Instanz der Listenklasse an die geöffnete DWG binden. Damit die Application (die Buttons, Menüs und Befehle in AutoCAD) die richtige Listenklasse verwenden? Gruß Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
criecky Mitglied MENSCH
 
 Beiträge: 251 Registriert: 13.01.2004 ACAD 2011- 2017 www.cbyte.eu
|
erstellt am: 16. Feb. 2007 12:08 <-- editieren / zitieren --> Unities abgeben:          Nur für Mario Rosenbohm
hallo mario, so richtig habe ich dich noch nicht verstanden. möchtest pic files einlesen (shit caddy ) ? hast du vor verschiedene files gleichzeitig zu öffnen und dann daran deine daten zu binden (AcApDocManager::curDocument Function) oder geht es wieder mal um eindeutigkeit für jede zeichnung (xdata)? gruss marko! und helau ------------------ Softlan macht das Netzwerk weich! www.cbyte.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mario Rosenbohm Mitglied Vermessungsingenieur
 
 Beiträge: 121 Registriert: 09.10.2003 AutoCAD Civil 3D 2022 CADdy V.17 Laptop Win10 Intel i7 2.71GHz, 64GB Ram
|
erstellt am: 16. Feb. 2007 13:42 <-- editieren / zitieren --> Unities abgeben:         
Hi Marko, die AutoCAD-DWG (activeDocument o.ä.) enthält Blöcke mit Attribute. Für jeden Block incl. seiner Attribute existiert in einer DesktopSQL DB ein Datensatz. Im AutoCAD habe ich mir Funktionen geschaffen um diese Blöcke zu erzeugen, verschieben, die Attribute zu ändern und um den Datenbestand zwischen der DB und der DGW kongruent zu halten. Wenn ich z.b. einen Block einfüge muss ich prüfen, ob das Attribut "Punktnummer", also eine eindeutige Nummer/Text des Blockes bereits in der DWG bzw der DB vorhanden ist. In der DB ist das ja kein Problem "SELECT ..." aber in der DWG muss man alle Blöcke durchlaufen und alle Attribute der Blöcke. Um dies performanter zu gestalten möchte ich am Anfang die DWG einmal auslesen und die Daten in eine Hashlist packen. Dort kann ich dann sehr schnell an alle Daten heran. Nur wenn ich mehrere DWG's offen habe muß ich ja die Hashlist der DWG zuordnen können. ...mmm... Da fällt mir was ein ein. Kann man innerhalb der "Application-Klasse" : Code:
Public Class KSROApplicationKoordToolsExtApp Implements Autodesk.AutoCAD.Runtime.IExtensionApplicationHier z.B. Public Sub Initialize() Implements Autodesk.AutoCAD.Runtime.IExtensionApplication.Initialize End Sub Public Sub Terminate() Implements Autodesk.AutoCAD.Runtime.IExtensionApplication.Terminate End Sub End Class
... eine Variable am leben halten? Da könnte man dann ja die angelegten Hashlisten verwalten. Gruß Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| Anzeige: | Infos zum Werbeplatz >> | BlechCAD 3D CAD APP für Blechverarbeitung Metallbau- Fassadenbau- Planer, die aus fertigen Ansichten und Schnitten von Blechen, die Abwicklung zu bearbeiten haben, für eine NC-Software und Kantbankdaten.
Speziell für Aufträge die immer verschiedene Blecharten und Abmessungen aufweisen.
Blechabwicklungen für die Fertigung erstellen in 2-3 Mi
|
|
Mario Rosenbohm Mitglied Vermessungsingenieur
 
 Beiträge: 121 Registriert: 09.10.2003 AutoCAD Civil 3D 2022 CADdy V.17 Laptop Win10 Intel i7 2.71GHz, 64GB Ram
|
erstellt am: 23. Feb. 2007 22:11 <-- editieren / zitieren --> Unities abgeben:         
Hallo, Problem gelöst. Man kann Instanzen einer Klasse relativ einfach an die DWG binden. Nämlich in der "Commands"-Klasse der Application. Diese wird für jede DWG euerzeugt, beim 1. Aufruf eines Kommandos, welches diese Klasse bereitstellt. Beispiel:
Code: <Assembly: ExtensionApplication(GetType(TEST.KSROApplicationExtApp))> <Assembly: CommandClass(GetType(TEST.KSROApplicationCommands))> Public Class KSROApplicationExtApp Implements Autodesk.AutoCAD.Runtime.IExtensionApplication
Public Sub Initialize() Implements Autodesk.AutoCAD.Runtime.IExtensionApplication.Initialize Dim ARXModule As System.Reflection.Module = System.Reflection.Assembly.GetExecutingAssembly(). _ GetModules()(0) Dim ARXModulePath As String = ARXModule.FullyQualifiedName Dim acEditor As Editor = Application.DocumentManager.MdiActiveDocument.Editor Try ARXModulePath = ARXModulePath.Substring(0, ARXModulePath.LastIndexOf("\")) ARXModulePath = ARXModulePath.Substring(0, ARXModulePath.LastIndexOf("\")) Catch acEditor.WriteMessage("Fehler beim Erfragen des ARXModulepfades!" + vbCrLf) Exit Sub End Try Dim acCustomizationSection As CustomizationSection = New CustomizationSection(ARXModulePath + "\TEST.cui") End Sub Public Sub Terminate() Implements Autodesk.AutoCAD.Runtime.IExtensionApplication.Terminate End Sub End Class Public Class KSROApplicationCommands
Private TestClass As ClassTestClass Public Sub New() Me.TestClass = New ClassTestClass() Me.TestClass.OpenTestClass() End Sub Protected Overrides Sub Finalize() MyBase.Finalize() End Sub <CommandMethod("TESTEXPORT")> _ Public Sub TESTExport() Dim acEditor As Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument. _ Editor acEditor.WriteMessage("... Exportiere ...") Me.TestClass.Export() acEditor.WriteMessage(" ... Fertig." + vbCrLf) End Sub End Class
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |