Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Objekte kopieren

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:  Objekte kopieren (1868 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: 20. Feb. 2009 08: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

Hallo!
Ich habe folgendes Problem.
Ich habe eine gewisse Anzahl an Dokumenten wo die Gesamte Zeichnung im Modellbereich ist (incl RA und SK)

Ziel ist eine DWG wo alle Zeichnungen enthalten ist.
Sprich für jede Ausgangszeichnung ist in der DWG ein neues Layout mit der Zeichnung.
soweit die Theorie.

In der Praxis sieht es jedoch anders aus.
Die einzige Möglichkeit die ich jetzt gefunden habe um alles vom Modell ins Layout zu bringen ist folgende hier mal in VBA)

Code:

        Dim Enti As Common.AcadEntity
        Dim Alle() As Object
        Dim i As Integer

        i = 0
        ReDim Alle(ThisDrawing.ModelSpace.Layout.Block.Count - 1)
        ThisDrawing.ActiveLayout = ThisDrawing.Layouts.Item("Model")

        For Each Enti In ThisDrawing.ModelSpace.Layout.Block
            Alle(i) = Enti
            i = i + 1
        Next Enti
     
      ThisDrawing.ActiveLayout = ThisDrawing.Layouts.Add("Layout" & ThisDrawing.Layouts.Count)
     
     
        Call ThisDrawing.CopyObjects(Alle, ThisDrawing.PaperSpace)


das funktiniert wunderbar. lager ich diesen Code in eine exe aus die dann Autocad steuern bekomme ich eine Fehlermeldung beim CopyObjects...

Hier der Code der das Ganze von einer in die andere Zeichnung ins neue Layout gibt (funktioniert auch nur in VBA)

Code:

        Dim Enti As AcadEntity
        Dim Alle() As Object
        Dim i As Integer
        Dim olddwg As AcadDocument
        Dim newdwg As AcadDocument
       
        Set newdwg = ThisDrawing.Application.Documents(1)
        Set olddwg = ThisDrawing.Application.Documents(0)
       
        MsgBox newdwg.Name
       
        i = 0
        ReDim Alle(olddwg.Layouts("Layout1").Block.Count - 1)
        olddwg.ActiveLayout = olddwg.Layouts("Layout1")

        For Each Enti In olddwg.Layouts("Layout1").Block
            Set Alle(i) = Enti
            i = i + 1
        Next Enti

      newdwg.ActiveLayout = newdwg.Layouts.Add("Layout" & 5)

        Call olddwg.CopyObjects(Alle, newdwg.PaperSpace)


Fehlermeldung im Autocad bei CopyObject wenn ich es über die EXE probiere:
Ungültige Objektanordnung
bei Autodesk.AutoCAD.Interopt.AcadDocumentClass.CopyObjects(Object Objects, Object Owner, Object&IdPairs)

Hat jemand eine Idee dazu?
Oder einen einfachen weg Alles vom Modell ins Layout zu bekommen?
Wie gesagt in VBA funktioniert das ganze ich brauche es aber in .NET bzw über die EXE gesteuert.

mfg

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: 20. Feb. 2009 09:26    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

Habe den Fehler gefunden:

Imports Autodesk.AutoCAD.Interop

Dim Alle() As Object
muss in der exe als

Dim Alle() As common.AcadEntity deklariert werden
dann gehts.

mfg

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


Ex-Mitglied

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

Hi,

OK, Typdeklaration ist schon etwas, wo eigentlich mit 'Option Explicit' und 'Option Strict' (Entweder in den Projekteigenschaften unter 'Kompilieren' oder im Module in den ersten Zeilen) Dir schon beim Tippen des Codes auffallen würde, dass Typ-Konflikte existieren!!

Wieso machst Du EXE? Lädst Du das AutoCAD   IN   Deine Applikation oder umgekehrt? (nicht wichtig, interessiert mich nur)

- alfred -

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

[Diese Nachricht wurde von a.n. am 20. Feb. 2009 editiert.]

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: 20. Feb. 2009 09:42    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 jetzt nur mal zum testen einfacher, da ich beim Debuggen einfach auf das aktive Autocad zugreife und da noch schneller bin wenn ich nur kurz was probiere.

Wahrscheinlich werde ich das ganze dann in eine .dll verpacken und diese laden, da es wenn es fertig ist schneller arbeitet.

schau mir jetzt das Selectionset Objekt an, da gibt es sicher eine Möglichkeit alle Elemente im Modell auszuwählen und dann dem CopyObject zuzuweisen.
Dann muss ich nicht alle Elemente durchgehen und im Array speichern...

Ist option strict wirklich notwendig, oder nur empfehlenswert?

Bekomme schon einen Fehler wenn ich einen Blocknamen mit einem String vergleiche:

If UCase(ActBlx.Name) = UCase(oBlockName)
lässt spätes binden nicht zu?????

Habe noch ein weiteres Problem.
Viele Funktionen geben Object zurück.
Wie kann ich Object in ein StringArray oder DoubleArray Convertieren?
z.b:
Dim medianames() As String
medianames = ActLayout.GetCanonicalMediaNames()
lässt er nicht zu, da Object in ein Stringarray gespeichert werden soll.
gibt es da eine einfache Lösung?

mfg

[Diese Nachricht wurde von veydan am 20. Feb. 2009 editiert.]

[Diese Nachricht wurde von veydan am 20. Feb. 2009 editiert.]

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


Ex-Mitglied

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

Hi,

...sorry, die Rückfragen sind mir 'durchgeschlüpft' 

Zitat:
da gibt es sicher eine Möglichkeit alle Elemente im Modell
...ja, für SelectionSet DXFFilter mit Code 410 = Model, aber in diesem Fall hast Du Deine Elemente ja schon im BlockTableRecord von ModelSpace gesammelt zur Verfügung.

Zitat:
Ist option strict wirklich notwendig, oder nur empfehlenswert?
...allgemein 'empfehlenswert', in unserer Firma habe ich das zur Vorschrift gemacht, da die Wahrscheinlichkeit von Runtime-Fehlern wegen Typkonflikten damit (nahezu) ausgeschlossen werden.

Zitat:
If UCase(ActBlx.Name) = UCase(oBlockName)
lässt spätes binden nicht zu?????
...hängt jetzt von der Definition von oBlockName ab, ich hätte dann halt oBlockName.ToString geschrieben.
Zitat:
medianames = ActLayout.GetCanonicalMediaNames()
...sollte funktionieren mit
medianames = ctype(ActLayout.GetCanonicalMediaNames(),string())

Statt CType kannst Du auch mit TryCast arbeiten, der Unterschied liegt nur im Fehlerhandling, wenn die Typkonvertierung nicht funktionieren sollte.

So....spät, aber hoffentlich nicht zu spät 

- 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