Hot News:

Unser Angebot:

  Foren auf CAD.de
  VBasic / vb.net / vbs / wsh
  Block skalierbar in Zeichnung einfügen (vb.net - Programmierung)

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
  
Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
Autor Thema:  Block skalierbar in Zeichnung einfügen (vb.net - Programmierung) (1655 mal gelesen)
Günther Frischbier
Mitglied
EDV-Organisator


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

Beiträge: 62
Registriert: 11.02.2002

AutoCAD Mechanical 2012 64-Bit
Windows 7 Enterprise
Microsoft Visual Studio 2010 Express / Microsoft .NET Framework Version 4.0.30319 RTMRel

erstellt am: 13. Aug. 2013 11: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 Forum,

ich möchte per vb.net einen Block in eine AutoCAD-Zeichnung einfügen. Allerdings soll der Anwender in der Lage sein, nach Angabe des Einfügepunktes den Skalierfaktor vorgeben zu können (wie im AutoCAD mit dem Befehl "_.insert" und Wahl der Option "F" für Faktor). Mit Programmcode sieht bislang so aus (Skalierung auf 1):

Private Sub Block_Laden()
        Dim oACAD As AcadApplication = Nothing
        Dim oACADDoc As AcadDocument = Nothing
        Dim Pfad As String = "C:\TEMP\"
        Dim Symbol As String
        Dim InsPoint As Object = Nothing
        Dim oBlockRef As AcadBlockReference

        Symbol = Pfad & "W001.dwg"
        InsPoint = oACADDoc.Utility.GetPoint(, "Einfügepunkt / Insertion point ...: ")
        oBlockRef = oACADDoc.ModelSpace.InsertBlock(InsPoint, Symbol, 1, 1, 1, 0)
    End Sub

Wer hat eine Lösung, den Skalierfakor 1 variabel beim Einfügen zu gestalten? Für eine Lösung wäre ich sehr dankbar!

Gruß
Günther

------------------
Gruss

Günther

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

MWN
Mitglied
Dipl.-Ing.


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

Beiträge: 492
Registriert: 14.02.2007

erstellt am: 13. Aug. 2013 13:17    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 Günther Frischbier 10 Unities + Antwort hilfreich

Hallo Günther,

ich habe im Moment leider kein AutoCAD zur Hand, würde allerdings auf einen der folgenden Parameter tippen:

Zitat:
oBlockRef = oACADDoc.ModelSpace.InsertBlock(InsPoint, Symbol, 1, 1, 1, 0)

Vielleicht hilft dir ein Blick in die Schnittstellenbeschreibung (API) weiter.
Sollte es einer der Parameter sein, brauchst du ihn nur noch mit einer InputBox abzufragen.
Ist allerdings nur eine Vermutung.
Grüße und HTH

Tobias

------------------
Besucht mich doch mal in meiner Tischlerei

"...Kommunikation ist nur so gut wie ihr Ergebnis..." - frei nach Richard Bandler / John Grinder

"...Wenn du das tust, was du schon immer tust, wirst du auch nur das erhalten, was du schon immer erhalten hast..."

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

Günther Frischbier
Mitglied
EDV-Organisator


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

Beiträge: 62
Registriert: 11.02.2002

AutoCAD Mechanical 2012 64-Bit
Windows 7 Enterprise
Microsoft Visual Studio 2010 Express / Microsoft .NET Framework Version 4.0.30319 RTMRel

erstellt am: 13. Aug. 2013 13: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

Hallo Tobias,

danke zunächst für die Antwort. Mit einer Input-Box wäre es jedoch nur möglich einen fixen Faktor einzugeben. Ich möchte jedoch erreichen, dass es wie mit einer Lisp-Routine in AutoCAD möglich ist, über die Eingabe "F" (für Faktor) solange den am Fadenkreuz hängenden Block ändern zu können, bis die Skalierung passt.


Auszug aus dem AutoCAD-Befehlsfenster:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

(command "_.insert" "C:/Temp/M001.dwg")    -- Lisp-Programm (1 Zeile)

***** DPI-Version  _.insert Blocknamen eingeben oder [?]:
C:/Temp/M001.dwg
Prüft Mechanical-Daten...

Anzahl gefundener Fehler: 0    Anzahl behobener Fehler: 0

Einheiten: Millimeter  Konvertierung:      1.00
Einfügepunkt angeben oder [Basispunkt/Faktor/X/Y/Z/Drehen]:
Einfügepunkt angeben oder [Basispunkt/Faktor/X/Y/Z/Drehen]: f
Skalierfaktor für XYZ-Achsen angeben <1>: 5
Einfügepunkt angeben oder [Basispunkt/Faktor/X/Y/Z/Drehen]: f
Skalierfaktor für XYZ-Achsen angeben <1>: 12
Einfügepunkt angeben oder [Basispunkt/Faktor/X/Y/Z/Drehen]: f
Skalierfaktor für XYZ-Achsen angeben <1>: 20
Einfügepunkt angeben oder [Basispunkt/Faktor/X/Y/Z/Drehen]:
Drehwinkel angeben <0>:

---------------------------------------------------------------

Ich kann also in diesem Lisp-Programm so lange den Faktor verändern,
bis der am Fadenkreuz hängende Block eine geeignete Skalierung hat.


------------------
Gruss

Günther

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

MWN
Mitglied
Dipl.-Ing.


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

Beiträge: 492
Registriert: 14.02.2007

erstellt am: 13. Aug. 2013 13:55    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 Günther Frischbier 10 Unities + Antwort hilfreich

Hallo Günther,

ok - verständlich.
Und die Lisp - Routine kannst du von deinem Makro aus nicht ansteuern?
Vielleicht auch soweit, dass du den Parameter für den Einfügepunkt bereits übergeben hast und die Skalierfunktion ausgewählt, sodass dein Anwender nur noch den Wert eingeben und den Block absetzen brauch, bzw. den Skalierfaktor noch einmal ändern kann?
Grüße

Tobias

------------------
Besucht mich doch mal in meiner Tischlerei

"...Kommunikation ist nur so gut wie ihr Ergebnis..." - frei nach Richard Bandler / John Grinder

"...Wenn du das tust, was du schon immer tust, wirst du auch nur das erhalten, was du schon immer erhalten hast..."

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

Günther Frischbier
Mitglied
EDV-Organisator


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

Beiträge: 62
Registriert: 11.02.2002

AutoCAD Mechanical 2012 64-Bit
Windows 7 Enterprise
Microsoft Visual Studio 2010 Express / Microsoft .NET Framework Version 4.0.30319 RTMRel

erstellt am: 13. Aug. 2013 14:02    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 Tobias,

ja, ich kann von Vb.net aus eine Lisp-Datei starten. Da ich aber über das Vb.net-Programm ca. 100 verschiedene Blöcke auswählen kann, brauchte ich auch die gleiche Anzahl von Lisp-Routinen, die jeweils den Blocknamen enthalten. Diese Vielzahl von Programmen wollte ich tunlichst vermeiden, auch bez. der Programmpflege, sondern möchte alles gern im Vb.net-Programm abwickeln.

------------------
Gruss
Günther

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

MWN
Mitglied
Dipl.-Ing.


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

Beiträge: 492
Registriert: 14.02.2007

erstellt am: 13. Aug. 2013 14:28    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 Günther Frischbier 10 Unities + Antwort hilfreich

Anderer Vorschlag: ich denke, eine funktionalität wie im Lisp wirst du so ohne weiteres nicht realisiert bekommen.
Was hältst du davon, wenn du dem Anwender den Block in der Skalierung 1 zeigst (an der Maus hängend), gefolgt von einer  Messagebox ("so OK - JA - NEIN"). Bei "NEIN" kann dein Anwender einen Skalierfaktor wählen und bei klick auf OK zeigst du ihm den skalierten Block, wieder gefolgt von einer Messagebox ("so OK - JA - NEIN").
Das Spiel wiederholt sich so lange, bis dein Anwender die Messagebox mit "JA" bestätigt und dein Block wird im AutoCAD eingefügt.
Alternativ würde mir noch einfallen: den Block mit Faktor 1 skaliert im AutoCAD einfügen, danach die Abfrage (MSG Box) stellen: "so OK - Ja - NEIN - Skalieren - Drehen - ...", bei Auswahl von Skalieren, Drehen den Block noch einmal mit vb.net aufgreifen und entsprechend bearbeiten.
[Edit]Oder du schreibst dir eine allgemein gültige Lisp - Routine, die als Parameter den Pfad zum Block vom vb.net übergeben bekommt - weiß allerdings nicht, ob das geht.[/Edit]
[Edit2]Und wenn das nicht geht, könntest du dir über vb.net eine temporäre Lisp - Routine erstellen, die vb.net "zusammenschreibt", nachdem der entspr. Block ausgewählt wurde und die dann im AutoCAD gestartet wird[/Edit2]
Grüße

Tobias

------------------
Besucht mich doch mal in meiner Tischlerei

"...Kommunikation ist nur so gut wie ihr Ergebnis..." - frei nach Richard Bandler / John Grinder

"...Wenn du das tust, was du schon immer tust, wirst du auch nur das erhalten, was du schon immer erhalten hast..."

[Diese Nachricht wurde von MWN am 13. Aug. 2013 editiert.]

[Diese Nachricht wurde von MWN am 13. Aug. 2013 editiert.]

[Diese Nachricht wurde von MWN am 13. Aug. 2013 editiert.]

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

Günther Frischbier
Mitglied
EDV-Organisator


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

Beiträge: 62
Registriert: 11.02.2002

AutoCAD Mechanical 2012 64-Bit
Windows 7 Enterprise
Microsoft Visual Studio 2010 Express / Microsoft .NET Framework Version 4.0.30319 RTMRel

erstellt am: 13. Aug. 2013 14: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

Hallo Tobias,

das wäre ein Ansatz. Werde mal diesen Weg verfolgen! Danke nochmals für deine prompten Antworten!

------------------
Gruss
Günther

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

Günther Frischbier
Mitglied
EDV-Organisator


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

Beiträge: 62
Registriert: 11.02.2002

AutoCAD Mechanical 2012 64-Bit
Windows 7 Enterprise
Microsoft Visual Studio 2010 Express / Microsoft .NET Framework Version 4.0.30319 RTMRel

erstellt am: 14. Aug. 2013 11:18    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 Forum,

ich habe jetzt nach längerem Tüfteln eine Vb.net-Lösung. Für alle, die es interessiert, hier der Programmcode:

Private Sub Block_Laden()
        Dim oACAD As AcadApplication = Nothing
        Dim oACADDoc As AcadDocument = Nothing
        Dim Pfad As String = "C:\TEMP\"
        Dim Symbol As String
        Dim oBlockRef As AcadBlockReference
        Dim CommandString As String = Nothing

        Symbol = Pfad & "W001.dwg"

        ' Block in Zeichnung einfügen (Möglichkeit des Skalierens und Drehens am Fadenkreuz)

        CommandString = "(command " & Chr(34) & "_.insert" & Chr(34) & " " & Chr(34) & Symbol & Chr(34) & ")" & vbCr
        oACADDoc.SendCommand(CommandString)
    End Sub

------------------
Gruss
Günther

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