Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Vorhandene Zeichnung Skalieren, Positionieren und anschließend Exceltabelle einfügen

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
  
Von Digital Twins bis Hochleistungs-Computing: PNY präsentiert seine Zukunftstechnologien für die Industrie von morgen, eine Pressemitteilung
Autor Thema:  Vorhandene Zeichnung Skalieren, Positionieren und anschließend Exceltabelle einfügen (2956 mal gelesen)
CoXiDo
Mitglied



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

Beiträge: 12
Registriert: 27.02.2005

erstellt am: 28. Feb. 2005 09:37    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,
bin neu hier und auch ohne Erfahrung was AutoCAD angeht, muß allerdings für bestimmmte Leute ne Automatisierungssoftware schreiben.

Hab es geschafft mit VBA bis jetzt über OLE AutoCAD 14R anzusprechen und Dateien zu öffnen. Doch nach Stunden der forschung komm ich nicht weiter und hoffe bei euch hier fündig zu werden.

Problem:

Ich soll eine vorhandene AutoCAD zeichnung als erstes Skalieren. Sie soll komplett auf eine bestimmte höhe verkleinert werden, danach soll ich sie an einen bestimmten punkt positionieren und zu guter letzt eine Exceltabelle als autocadobjekt unter diese zeichnung an einer bestimmten postion einfügen.

Zum schluß soll das ganze unter ein DIN A3 Blatt alles ausgedruckt werden.

Kann mit da jemand weiter Helfen?

Zusätzliche Info:

Alle layer in ACAD sollen aktiviert sein.

Übersourcecodebeispiele währe ich sehr dankbar.

Danke

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

Huebi
Mitglied
Vermessungsing.


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

Beiträge: 107
Registriert: 08.01.2004

Intel Core Duo E6750@2.66GHz
NVIDIA GeForce 8600 GT
AutoCAD 2004, 2007, 2008
AcadMAP 2004 und 2007
Civil 3D 2008
ADT 2009

erstellt am: 28. Feb. 2005 10:38    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 CoXiDo 10 Unities + Antwort hilfreich

Servus CoXiDo,

erstmal wilkommen im Forum!
Ohne AutoCAD Kenntnisse wirst Du Dir sehr hart tun bei dem was Du vor hast, da VBA für AutoCAD natürlich an den Methoden und Funktionen in AutoCAD zusammenhängt.
Zuerst versuche doch mal zu beschreiben, wie Du das, was Du machen möchtest, manuell in AuoCAD machen würdest.
Es klingt so, als möchtest Du einen Ausschnittplot verkleinert auf ein festes Format bringen und dazu via OLE eine Excel-Tabelle einblenden.
Das mit dem Einblenden von Excel-Tabellen wurde schon mehrfach im AutoCAD-Forum beschrieben (schau mal unter Suchen nach) und ich hab wenig Hoffnung, daß Du das mit VBA automatisieren kannst.
Beschreibe doch mal die Schritte, die das künfige Programm abarbeiten soll und vielleicht (sehr wahrscheinlich, wenn die Fragestellung konkret ist) wird Dir dann hier im Forum bei der Umsetzung (wenn's hakt) geholfen.

Liebe Grüße aus München
Hübi

------------------
Schaun ma mal, dann seng ma scho.... 

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

CoXiDo
Mitglied



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

Beiträge: 12
Registriert: 27.02.2005

erstellt am: 28. Feb. 2005 11:52    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

An Hubi,

erstmal möchte ich auf deine Antwort eingehen. Ich kenn mich zwar nicht aus aber ich denke es sollte doch nicht so unlösbar sein.
Es ist ja kein Problem den Modelbereich auf dem sich die zeichnung befindet auszulesen und z.B. einen normalen Text einzufügen.
Es ist ja auch kein Problem einzelne linien oder Kreise zu selektieren und z.B. die Farbe und position zu bestimmen.

1.Frage:
wie selektiere ich ein komplettes Bild im Modelbereich?

2. Frage: wie verändere ich die Größe und die postition  der kompletten auswahl

3. Frage: einfügen der daten aus meiner Excel Tabelle

ob nun die komplette Tabelle oder nur die ausgelesenen daten eingebunden werden könne  ist egal. Ich erstelle mit den Daten nur eine Legende die unter der Zeichnung beim ausdrucken sichbar sein soll.

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

CoXiDo
Mitglied



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

Beiträge: 12
Registriert: 27.02.2005

erstellt am: 28. Feb. 2005 12:45    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

Hi,
damit jeder mein Problem versteht hier die mauelle vorgehensweise:

-mit der Maus die komplette Zeichnung selektieren mit allen erstellten Layern

-Zeichnung skalieren. Höhe = 146mm
-Zeichnung move(alle, erster punkt 0,0, zweiter 20,145)
-Rasterabstand mit LIMMAX 1980,297

-Excelvorgehensweise:

aus einer Exceltabelle werden zuerst 20 Zeilen kopiert (STRG+C)
und dann in AutoCAD als "AUTOCAD-Objekt" eingefügt

-skalierfaktor x= 0,34, y=0,531
-im Autocad den befehl explode eingeben um layer und farbe ändern zu können


danke im vorraus

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

Huebi
Mitglied
Vermessungsing.


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

Beiträge: 107
Registriert: 08.01.2004

Intel Core Duo E6750@2.66GHz
NVIDIA GeForce 8600 GT
AutoCAD 2004, 2007, 2008
AcadMAP 2004 und 2007
Civil 3D 2008
ADT 2009

erstellt am: 28. Feb. 2005 14:11    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 CoXiDo 10 Unities + Antwort hilfreich

Hallo CoXiDo,

ich denke, zuerst brauchst Du die Maximalwerte (Ausdehnung) Deiner Zeichnung um sie skalieren zu können. Schau Dir dazu mal diesen Beitrag an: http://ww3.cad.de/foren/ubb/Forum259/HTML/000520.shtml

Den Befehl "_scale" und "_move" machst Du am besten via "SendCommand" z.B. so (unter der Annahme, Deine Zeichungseinheit entspricht 1mm):

Code:

Dim AllMin, AllMax As Variant    'Die zuvor ermittelten Maximalwerte
Dim XMinStr, YMinStr, ScaleFaktor As String
Const SollHoehe = 146

ScaleFaktor = CStr(SollHoehe / (AllMax(1) - AllMin(1))): If InStr(ScaleFaktor, ",") Then Mid(ScaleFaktor, InStr(ScaleFaktor, ","), 1) = "."
XMinStr = CStr(AllMin(0)): If InStr(XMinStr, ",") Then Mid(XMinStr, InStr(XMinStr, ","), 1) = "."
YMinStr = CStr(AllMin(1)): If InStr(YMinStr, ",") Then Mid(YMinStr, InStr(YMinStr, ","), 1) = "."
'Skalieren
ThisDrawing.SendCommand "_scale" & vbCr & "alle" & vbCr & vbCr & _
                        XMinStr & "," & YMinStr & vbCr & ScaleFaktor & vbCr
'verschieben
ThisDrawing.SendCommand "_move" & vbCr & "alle" & vbCr & vbCr & _
                        "0,0" & vbCr & "20,145" & vbCr


Wozu Du den Wert von LIMMAX ändern magst kann ich nicht ganz nachvollziehen (und muß es eigentlich auch nicht) aber das geht natürlich analog:

Code:

ThisDrawing.SendCommand "LIMMAX" & VbCr & "1980,297" & VbCr

Beim Einfügen der Excel-Tabelle passe ich. Es ist mir auch neu, daß man diese als AuoCAD-Objekt einfügen kann. Ich kenne nur das Einblenden der Tabelle als OLE-Objekt, das über AutoCAD Befehle nicht angesprochen werden kann. Falls es da was anderes gibt, würde es mich freuen, wenn ich davon auch erfahren würde.

Ich hoffe, es hat was geholfen
Hübi

------------------
Schaun ma mal, dann seng ma scho.... 

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

CoXiDo
Mitglied



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

Beiträge: 12
Registriert: 27.02.2005

erstellt am: 28. Feb. 2005 16:13    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

Hi,

jo die ansätze waren schon super. Allerdings hätt ich da trotzdem noch ein paar fragen. Also als erstes,
ich programmiere ja mit VB6 und nicht mit dem vom Autocad mitgelierferten VBA. Daher kann ich solche Objekte wie ThisDrawing und die Methode SendCommand nicht benutzen bzw. finden.

Desweiteren hatte ich die idee die Funktion

          ScaleEntity(BasePoint, ScaleFactor)

einzugeben. Mein Code


    Dim Selectionset As Object     
                                       
    Set Selectionset = acadDoc.SelectionSets.Add("Test")
   
    Dim p1(0 To 2) As Double, p2(0 To 2) As Double

    Dim selmin, selmax As Variant
   
    p1(0) = 0
    p1(1) = 0
    p1(2) = 0
   
    p2(0) = 1000
    p2(1) = 1000
    p2(2) = 0
   
    selmin = p1
    selmax = p2
   
    Selectionset.Select acSelectionSetAll, selmin, selmax
    Selectionset.ScaleEntity(BasePoint, ScaleFactor)

Ich habe gehofft das dieses schon klappen würde aber tuts net.

WALUM? :-)

Danke

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

Huebi
Mitglied
Vermessungsing.


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

Beiträge: 107
Registriert: 08.01.2004

Intel Core Duo E6750@2.66GHz
NVIDIA GeForce 8600 GT
AutoCAD 2004, 2007, 2008
AcadMAP 2004 und 2007
Civil 3D 2008
ADT 2009

erstellt am: 28. Feb. 2005 17:04    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 CoXiDo 10 Unities + Antwort hilfreich

Servus CoXiDo,

Zitat:
Also als erstes,
ich programmiere ja mit VB6 und nicht mit dem vom Autocad mitgelierferten VBA. Daher kann ich solche Objekte wie ThisDrawing und die Methode SendCommand nicht benutzen bzw. finden.

Du benutzt doch die Variable "acadDoc" die Du auch als AutoCAD-Document in Deinem VB6 Programm definierst. Nun nimm einfach den Namen "ThisDrawing" und ersetze es mit Deinem "acadDoc" und schon sollte es funktionieren.

Hier mal ein Schnellschuß in VB6:

Code:

Private Sub Command1_Click()

Dim AcadApp As Object
Dim MyDrawing As AcadDocument
Dim Min, Max, AllMin, AllMax As Variant
Dim AcSSet As AcadSelectionSet
Dim FilterType(0) As Integer
Dim FilterData(0) As Variant
Dim ScaleFactor As Double

On Error Resume Next
Set AcadApp = GetObject(, "Autocad.Application")
If Err <> 0 Then
  MsgBox ("Bitte die betreffende Zeichnung in AutoCAD öffnen")
End If
AcadApp.Visible = True
Set MyDrawing = AcadApp.ActiveDocument
On Error GoTo 0

'Filter auf den Modellbereich setzen
FilterType(0) = 67
FilterData(0) = "0"

'Erstelle Auswahlsatz "Alle"
On Local Error Resume Next
If TypeName(MyDrawing.SelectionSets("Auswahl")) = "Nothing" Then
  Set AcSSet = MyDrawing.SelectionSets.Add("Auswahl")
Else
  Set AcSSet = MyDrawing.SelectionSets("Auswahl")
End If
AcSSet.Clear
AcSSet.Select acSelectionSetAll, , , FilterType, FilterData

'Schleife durch den Auswahlsatz für Maximalwerte
For i = 0 To AcSSet.Count - 1
  AcSSet.Item(i).GetBoundingBox Min, Max
  If i = 0 Then
    AllMin = Min
    AllMax = Max
  Else
    If Min(0) < AllMin(0) Then AllMin(0) = Min(0)
    If Min(1) < AllMin(1) Then AllMin(1) = Min(1)
    If Max(0) > AllMax(0) Then AllMax(0) = Max(0)
    If Max(1) > AllMax(1) Then AllMax(1) = Max(1)
  End If
Next i

ScaleFactor = 0.5

'Alle Elemente skalieren
For i = 0 To AcSSet.Count - 1
  AcSSet.Item(i).ScaleEntity AllMin, ScaleFactor
Next i

End Sub


Das sollte doch ein wenig weiterhelfen, oder?

Gruß vom Hübi

------------------
Schaun ma mal, dann seng ma scho.... 

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

CoXiDo
Mitglied



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

Beiträge: 12
Registriert: 27.02.2005

erstellt am: 01. Mrz. 2005 12:07    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


skalieren.txt

 
Hallo.

Erstmal vielen dank Hubi für deine Hilfe und unterstützung. Ich war gestern doch zu ko den Code zu verstehen aber ich bin ihn heut durchgegangen und hab mir mal ein dummy prog geschireben.
Dein Ansatz find ich logisch aber :-) es tut nix.
Es wird nichts verkleinert bzw. skaliert und ich weiß net warum.

Also nochmal von vorne. Im Anhang liegt der code, ist nur wenig anders als der von Hubi einen eintrag vorher.

Ansonsten noch die Frage, währe es den in LISP möglich ein Skript zu schreiben mit dem ich alle Elemente im Modelbereich selektieren, dann skalieren und zu guter letzt positionieren kann?

Wenn man sich mit meinem Sourcecode beschäftigt stellt man fest das die Funktion ScaleEntity nix tut!

Danke

[Diese Nachricht wurde von CoXiDo am 01. Mrz. 2005 editiert.]

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

Huebi
Mitglied
Vermessungsing.


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

Beiträge: 107
Registriert: 08.01.2004

Intel Core Duo E6750@2.66GHz
NVIDIA GeForce 8600 GT
AutoCAD 2004, 2007, 2008
AcadMAP 2004 und 2007
Civil 3D 2008
ADT 2009

erstellt am: 01. Mrz. 2005 14:24    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 CoXiDo 10 Unities + Antwort hilfreich

Servus CoXiDo,

Also zuerstmal: Mein Name is Huebi und nicht Hubi!!!!! *lach*, ich bitte um Beachtung.

Zum zweiten gebe ich Dir den Rat das Programm erst in VBA für AutoCAD zu erstellen. Da hast Du den vollen Zugriff auf die (sehr umfangreiche und mit Beispielen gut dokumentierte) Hilfe. Wenn's läuft kannst Du's ja dann nach VB6 portieren.
Beim übertragen nach VB6 mußt Du natürlich auch an die Verweise denken (aber das weißt Du ja sicher).

Nun zu Deinem Code:
Du öffnest eine AutoCAD Zeichnung namens "AcDok" und möchtest in dieser Zeichnung dann ein SelectionSet definieren. In Deinem Code hast Du aber 2 AutoCAD Zeichnungen in Aktion. Deine "AcDok" und mein "MyDrawing". Wenn Du das SelectionSet in "MyDrawing" definierst muß es Dich doch nicht wundern, daß Du in "AcDok" nicht auf diese SelectionSet zugreifen kannst - oder?

Ich hab den Eindruck, daß Du derzeit ein bischen zu verwirrt bist. Geh einfach mal den Code Schritt für Schritt durch und schiel nicht schon gleich wieder auf eine andere Lösung, die sicherlich nicht viel einfacher zu realisieren sein wird wird als diese.

Als kleines Bonbon hier mal Dein Code überarbeitet (und er funktioniert hervorragend in VB6). Den Befehl für "Move" darfst Du aber selbst ranhängen *lach*..was ja nun nicht all zu schwer sein dürfte *zwinker*.

Code:

Private Sub Command2_Click()

Dim AcadApp As Object
Dim AcDok As AcadDocument
Dim Min, Max, AllMin, AllMax As Variant
Dim AcSSet As Object
Dim FilterType(0) As Integer
Dim FilterData(0) As Variant
Dim ScaleFactor As Double

Me.Hide

'Zu öffnenden Zeichnung
DwgName = "F:\tmp\Zeichnung1.dwg"

'Instanz starten und sichtbar machen
On Error Resume Next
Set AcadApp = GetObject(, "Autocad.Application")
If AcadApp Is Nothing Then
  Set AcadApp = CreateObject("Autocad.Application")
End If
AcadApp.Visible = True
On Error GoTo 0 'Fehler zurücksetzen

'Dwg Zeichnung öffnen
Set AcDok = AcadApp.Documents.Open(DwgName)

'Filter auf den Modellbereich setzen
FilterType(0) = 67
FilterData(0) = "0"

'Erstelle Auswahlsatz "Alle"
On Local Error Resume Next
If TypeName(AcDok.SelectionSets("Auswahl")) = "Nothing" Then
  Set AcSSet = AcDok.SelectionSets.Add("Auswahl")
Else
  Set AcSSet = AcDok.SelectionSets("Auswahl")
End If
AcSSet.Clear

AcSSet.Select acSelectionSetAll, , , FilterType, FilterData

'Schleife durch den Auswahlsatz für Maximalwerte
For i = 0 To AcSSet.Count - 1
  AcSSet.Item(i).GetBoundingBox Min, Max
  If i = 0 Then
    AllMin = Min
    AllMax = Max
  Else
    If Min(0) < AllMin(0) Then AllMin(0) = Min(0)
    If Min(1) < AllMin(1) Then AllMin(1) = Min(1)
    If Max(0) > AllMax(0) Then AllMax(0) = Max(0)
    If Max(1) > AllMax(1) Then AllMax(1) = Max(1)
  End If
Next i

MsgBox "gleich wird 5-fach vergrößert"

'Alle Elemente skalieren
ScaleFactor = 5
For i = 0 To AcSSet.Count - 1
  AcSSet.Item(i).ScaleEntity AllMin, ScaleFactor
  AcSSet.Item(i).Update
Next i

MsgBox "gleich wird 5-fach verkleinert"

'Alle Elemente skalieren
ScaleFactor = 0.2
For i = 0 To AcSSet.Count - 1
  AcSSet.Item(i).ScaleEntity AllMin, ScaleFactor
  AcSSet.Item(i).Update
Next i

MsgBox "Fertig"

AcDok.Save
AcDok.Close

Me.Show
End Sub


Gruß aus dem kalten München *bibber*

Huebi

------------------
Schaun ma mal, dann seng ma scho.... 

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

CoXiDo
Mitglied



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

Beiträge: 12
Registriert: 27.02.2005

erstellt am: 01. Mrz. 2005 15:08    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

okay nochmals danke. aber ich sag dir bei mir tut sich da garnichts.
Egal welches Bild ich starte. DIe skalierung der einzelnen Objekte ändert sich nicht.

Woran könnte das liegen?

Danke

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

Huebi
Mitglied
Vermessungsing.


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

Beiträge: 107
Registriert: 08.01.2004

Intel Core Duo E6750@2.66GHz
NVIDIA GeForce 8600 GT
AutoCAD 2004, 2007, 2008
AcadMAP 2004 und 2007
Civil 3D 2008
ADT 2009

erstellt am: 01. Mrz. 2005 15:32    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 CoXiDo 10 Unities + Antwort hilfreich

Menno Franjo!

Gehst Du mal in Einzelschritten durch das Programm? Guckst Du Dir die Variablen im Überwachungsfenster an ob sie gefüllt werden? Hast Du in VB6 den Verweis auf AutoCAD gesetzt? Wann ist eine Variable leer und wann gefüllt? Funktioniert überhaupt das Starten von AutoCAD und das Öffnen der Datei? Hast Du den Code mal in "VBA für AutoCAD" angeguckt?

Fragen über Fragen.
Geht nicht gibt's nicht.
Bei mir klappt's hervorragend.

Wenn Du willst, daß man Dir hilft (und ich hab's Dir wirklich schon vorgekaut), dann mußt Du schon präziser werden ab welcher Variablen oder welcher Codezeile es nicht funktioniert.

Gruß Hübi

------------------
Schaun ma mal, dann seng ma scho.... 

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

CoXiDo
Mitglied



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

Beiträge: 12
Registriert: 27.02.2005

erstellt am: 01. Mrz. 2005 16:00    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

Also Huebi,

ich bin dir sehr dankbar für die Hilfe und weiß es auch zu schätzen.
Das mit dem Debugen hab ich schon längst doch es sind verschiedene Probleme.

Ich fang mal mit dem hauptproblem an.

    AcSSet.Item(i).ScaleEntity AllMin, ScaleFactor

wenn man sich AcSSet genauer anschaut und die einzelnen Elemente betrachtet erwarte ich eigentich nach dem durchlauf dieser funktion das sich z.B. beim rechteck die werte für Witdh und Hight ändern.

Das tuen sie allerdings nicht!!! und ich verstehe nicht warum.

Von VB6 kann ich nicht loslassen und auf VBA übergehen da mein Admin nicht das komplette ACad packet installiert hat und ich kein VBA drauf habe!!! (bzw. vielleicht bin ich auch zu blöde es zu finden)

und das ist es eigentlich auch schon woran ich die ganze Zeit hocke.

Ein weiteres Problem ist auch das ich net so Standartmässig Objekttypen vergeben kann wie

    Dim AcDok As AcadDocument

Meine möglichkeit ist entweder

    Dim AcDok As AutoCAD.IAcadDocument

mit der allerdings immer fehlermeldungen wie Typemismatch auftauchen
oder damit sich auch irgendwas tut

    Dim AcDok As Object

Indem nun alle ACOBJ bei mir normale Objekte sind die überladen werden kann ich eigentlich trotzdem alles machen was ich will.
Dein Code klappt ja auch bis auf die oben erwähnte Zeile.

Beim Debugen (jetzt das 5 mal) stimmt alles überein ausser die zeile.
Dann währ das problem ja auch gelöst.

Tut mir wirklich Leid das ich euch allen hier so auf die Nerven damit gehe aber ich tick langsam auch aus bei der Sache.


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

Huebi
Mitglied
Vermessungsing.


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

Beiträge: 107
Registriert: 08.01.2004

Intel Core Duo E6750@2.66GHz
NVIDIA GeForce 8600 GT
AutoCAD 2004, 2007, 2008
AcadMAP 2004 und 2007
Civil 3D 2008
ADT 2009

erstellt am: 01. Mrz. 2005 16: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 Nur für CoXiDo 10 Unities + Antwort hilfreich

Servus Franjo,

ich glaub Dir schon, daß Du bald am Verzweifeln bist (armer Kerl).
Ich vermute mal, daß es etwas mit der AutoCAD-Release zu tun haben könnte. Evtl. unterstützt ja Vers. 14 die Methode object.ScaleEntity nicht (das wär eine Frage für die 14-Anwender - bitte melden!!).

Naja, als Workaoround kann ich Dich nur auf meinen ersten Beitrag verweisen (SendCommand). Das sollte doch funktionieren - ist ja recht "robust" *lach*.

Vielleicht kann Dir ja jemand anders weiterhelfen - ich für meinen Teil bin mit meinem 1x1 am Ende.

Gruß vom Hübi

------------------
Schaun ma mal, dann seng ma scho.... 

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

CoXiDo
Mitglied



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

Beiträge: 12
Registriert: 27.02.2005

erstellt am: 02. Mrz. 2005 10:47    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 :-)

Es hat geklappt. Also erstmal vielen lieben dank Huebi!!!!
Und nun nochmal für alle meine Funktionierende Lösung:

CODE:

Dim acApp As Object                'Anwendungsobject
    Dim acDoc As Object            'Dokumentobject
    Dim acSelect As Object          'Selectionobject (Ausgewählte
                                    'Elemente)
   
   
    'Setzen des Aktuellen Dokumentes und öffnen der Datei
    Set acApp = CreateObject("Autocad.Application")
    Set acDoc = acApp.ActiveDocument
       
    acDoc.Open ("C:\temp\blabla.dwg")
   
    'Raster setzten LIMMAX 1980, 297
    Dim newLimits(0 To 3) As Double
    newLimits(0) = 0#
    newLimits(1) = 0#
    newLimits(2) = 1980#
    newLimits(3) = 297#
   
    acDoc.Limits = newLimits
   
   
    'Auswahl der Bildelemente treffen
    Set acSelect = acDoc.SelectionSets.Add("Auswahl")
    Dim FilterType(0) As Integer
    Dim FilterData(0) As Variant
   
    FilterType(0) = 67
    FilterData(0) = "0"
   
    Call acSelect.Clear
    Call acSelect.Select(acSelectionSetAll, , , FilterType,  _
                        FilterData)
   
   
    'Start und End Punkte setzten
    Dim start(0 To 2) As Double
    Dim ende(0 To 2) As Double      'Alle Elemente werden verschoben
                                    'so das die Ecke links unten
                                    'die Position hat: _move 20,145
    start(0) = 0
    start(1) = 0
    start(2) = 0
   
    ende(0) = 20
    ende(1) = 145
    ende(2) = 0
   
    acApp.Visible = True            'macht Autocad sichtbar
   
    Dim ScaleFactor As Double      'Dimensionierungsfaktor
    ScaleFactor = 0.518
   
   
    'Skalierung
    Dim dummy As Object
       
    For i = 0 To acSelect.Count - 1 Step 1
        Set dummy = acSelect.Item(i)
        dummy.ScaleEntity start, ScaleFactor
        dummy.Move start, ende
    Next i
   
    acDoc.Regen (acAllViewports)    'gesammte Zeichnung neu
                                    'Regenerieren

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



Anzeige:Infos zum Werbeplatz >>

LAYOUT CAD APP für AEC - Architektur-, Ingenieur- und Bauwesen

LAYOUT = ein Werkzeug für die Erstellung von Signallageplänen

Huebi
Mitglied
Vermessungsing.


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

Beiträge: 107
Registriert: 08.01.2004

Intel Core Duo E6750@2.66GHz
NVIDIA GeForce 8600 GT
AutoCAD 2004, 2007, 2008
AcadMAP 2004 und 2007
Civil 3D 2008
ADT 2009

erstellt am: 02. Mrz. 2005 16:34    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 CoXiDo 10 Unities + Antwort hilfreich

Na Gott sei's gedankt!!!!

Ich freu mich mit Dir Franjo, daß es nun endlich klappt.
Bekommst auch 10 Pünktchen dafür *smile*

Gruß aus München

Hübi

------------------
Schaun ma mal, dann seng ma scho.... 

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