| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Block einfügen / Sichtbarkeit (4360 mal gelesen)
|
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 29. Jan. 2006 13:03 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen! Wie bekomme ich es hin, daß ein Block den ich aus einem VBA Programm einfüge direkt am Fadenkreuz hängt und sichtbar ist. Code:
If Opt.Value = True Then Set BlockRef = ThisDrawing.ModelSpace.InsertBlock(IPoint, _ Schraubenname, 1#, 1#, 1#, Angle) BlockRef.Layer = Cbo.Value BlockRef.Linetype = Cbo1.Value BlockRef.TrueColor = c BlockRef.Update If Chk.Value = True Then BlockRef.Explode End If End If
Vielen Dank im voraus. Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 29. Jan. 2006 15:46 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hallo Dirk, grundsätzlich geht das nicht. Du kannst den Block nur an eine Dummy Position einfügen und dann per SendCommand die Verschiebenfunktion von AutoCAD aufrufen und den Block vorselektieren. Goofy hat so was mit Attributen gemacht. siehe hier Stelli ------------------ Warum lisp'eln wenn's auch anders geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002
|
erstellt am: 02. Feb. 2006 19:53 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hallo Dirk, Probier mal folgende Lisp- und VBAzeilen: Lisp: ------ (defun blockIn(blockname) (princ) (setvar "cmdecho" 0) ;Unterdrücken der Befehle in der Befehlszeile (Command "_-Insert" Blockname pause "1.0" "1.0" "0" ) ;Einfügen des Blocks 'Blockname', positionieren, X-Skalierun auf 1, Y-Skalierung auf 1 und Drehung = 0° (command "_explode" "_Last" ) ;Block sprengen (Setvar "cmdecho" 1) ;Befehle in der Befehlszeile wieder ausgeben (princ) ) ---------------------------------------------------------------------- VBA: ----- ThisDrawing.SendCommand "(blockIn " & BLOCKNAME & ")" & vbCr Da du bei dir ja einen Block erstellst, kannst du ihn natürlich über die Blockeinfüge-Funktion einfügen.
Ich bin zwar kein Freund vom SendCommand, aber es lässt sich halt mit VBA sonst nicht machen. Gruß, Carsten Wesseler 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: 07. Feb. 2006 10:56 <-- editieren / zitieren --> Unities abgeben:
Hallo Carsten! Ich habe noch nicht ganz verstanden wie ich Deinen Vorschlag in meinem Programm einbauen kann. Dies ist der Bereích "Block einfügen":
Code:
If Opt.Value = True Then Set BlockRef = ThisDrawing.ModelSpace.InsertBlock(IPoint, _ Schraubenname, 1#, 1#, 1#, xAngle) On Error Resume Next BlockRef.Layer = Cbo.Text BlockRef.Linetype = Cbo1.Text BlockRef.TrueColor = c BlockRef.Update If Chk.Value = True Then BlockRef.Explode End If End If
Muß ich da erst ein Lispprogramm erstellen oder kann man dieses so wie Du es geschrieben hast komplett in VBA einbinden? Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002
|
erstellt am: 07. Feb. 2006 15:21 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hallo Dirk, Packt den Lisp Code mal in den (Text-) Editor und speicher das als .lsp-Datei. Diese musst du dann per Appload in AutoCAD laden. Die Variable "Blockname" übergibt dann in VBA den Namen des einzufügenden Blocks. Spiel mal ein bißchen damit rum. Bin gerade auf 'ne ADT 2006 Schulung. Schaue heute Abend noch mal rein. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Patrick79ch Mitglied ICT-Manager
Beiträge: 13 Registriert: 14.12.2006
|
erstellt am: 14. Dez. 2006 12:47 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hallo zusammen. Ich habe den obenstehenden Code in LISP und VBA angewandt, und es funktioniert grandios! :-) Ich hab jetzt aber das Problem, dass ich einen eingefügten Block gerne am Mauszeiger angeheftet hätte, ihn absetzen möchte und dann den Winkel mit der Maus bestimmen möchte - mal ganz bildlich gesprochen. Ohne dass ich zwischen durch einen neuen Befehl aufrufen muss. Zusätzlich wäre noch die Bedingung dass der Block auf einem definierten Layer liegen müsste. Hat jemand eine Idee wie ich das in VBA/Lisp abhandeln könnte? :-) Wäre sehr dankbar! HERZLICHEN DANK! :-) ------------------ ich bin neu - kann nix :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 14. Dez. 2006 12:51 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hallo Patrick, Erst einmal Willkommen. Ändere oben die Zeile: Command "_-Insert" Blockname pause "1.0" "1.0" "0" ) in Command "_-Insert" Blockname pause "1.0" "1.0" ) Dann sollte es mit dem Winkel funktionieren. Den Layer kannst du ja entweder im Lisp aktivieren oder schon im VBA Code, das ist dir überlassen. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Patrick79ch Mitglied ICT-Manager
Beiträge: 13 Registriert: 14.12.2006
|
erstellt am: 14. Dez. 2006 14:01 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hallo Carsten Das ging ja schnell! Herzlichen Dank! Ich hab das mal so eingefügt. Jetzt kann man den Winkel bestimmen, allerdings fügt er das Element nachher nochmals ein wieder mit dem Winkel 0... komisch! Layer voreinstellen ist kein Thema, geht in VBA :-) Aber den Blocknamen aus VBA übergeben funktioniert irgendwie nicht! (vorher hatte ich eben den (blockin)-Befehl direkt im Textfenster eingegeben da funktionierte er. Der Befehl wird im AutoCAD Textfenster wie folgt benötigt:
Code: (blockin "T:\\Mobiliar\\AusstattungDiverses\\Ausstattung\\BILD GROSS.dwg")
geliefert wird er aber aus VBA so: Code:
Pfad = Image1.ControlTipText ThisDrawing.SendCommand "(blockin " & Pfad & ")" & vbCrergibt in AutoCAD Textfenster (blockin T:\Mobiliar\AusstattungDiverses\Ausstattung\BILD GROSS.dwg)
entsprechend wird der Befehl nicht ausgeführt. Da komm ich nicht mehr weiter... ------------------ ich bin neu - kann nix :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Patrick79ch Mitglied ICT-Manager
Beiträge: 13 Registriert: 14.12.2006
|
erstellt am: 14. Dez. 2006 14:15 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Kleine Korrektur : Winkel funzt! Musste die LSP neu laden! :-) Demzufolge habe ich blos noch probleme den korrekten String aus VBA ins Textfenster zu bringen :-) ------------------ ich bin neu - kann nix :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 14. Dez. 2006 14:31 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hi, Du musst es folgermaßen machen: Dim path As String path = """S:/Bib/Verbindungsbeschlaege/Glasklemm_Schrankbeschlaege/01.dwg""" ThisDrawing.SendCommand "(blockIn " & path & ")" & vbCr Gruß, Carsten Mal so nebenbei, was ist / macht ein ICT-Manager?! [Diese Nachricht wurde von Carsten1210 am 14. Dez. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Patrick79ch Mitglied ICT-Manager
Beiträge: 13 Registriert: 14.12.2006
|
erstellt am: 14. Dez. 2006 14:48 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hallo Carsten!! Hat so funktioniert, wenn ich den Pfad fix so einschreibe: Code:
path = """T:/Mobiliar/Caddys/Take Off/SHARING BOY-67X40X107.dwg""" ThisDrawing.SetVariable "cmdecho", 0 ThisDrawing.SendCommand "(blockIn " & path & ")" & vbCr
Wenn ich aber folgendes versuche: Code:
(Image1.ControlTipText entspricht dem Wert des Pfades+Datei, welche ich als Block einfügen will)path = """" & Image1.ControlTipText & """" ThisDrawing.SetVariable "cmdecho", 0 ThisDrawing.SendCommand "(blockIn " & path & ")" & vbCr
erscheint folgende Meldung im Textfenster:
Code:
Befehl: (blockIn "T:\Mobiliar\Caddys\Take Off\SHARING BOY-67X40X107.dwg")"MobiliarCaddysTake OffSHARING BOY-67X40X107.dwg": Kann Datei nicht finden im Suchpfad: \\ping\daten$\A870955\Eigene Dateien\ (aktuelles Verzeichnis) C:\Dokumente und Einstellungen\A870955\Anwendungsdaten\Autodesk\AutoCAD 2006\R16.2\deu\support\ C:\Programme\AutoCAD 2006\support\ C:\Programme\AutoCAD 2006\fonts\ C:\Programme\AutoCAD 2006\help\ C:\Programme\AutoCAD 2006\Express\ C:\Programme\AutoCAD 2006\support\color\ T:\ACAD_VBA\ C:\Programme\AutoCAD 2006\drv\ C:\Programme\AutoCAD 2006\ *Ungültig* ; Fehler: Funktion abgebrochen
Kann ich die "\" irgendwie in "/" oder "\\" umsetzen? (die beiden Varianten scheinen ja zu funktionieren.) Dass ich den Pfad von dem Imageobjekt aus dem Tooltiptext nehme, hat den Grund, dass ich daher die Information kriege, welchen Block ich benötige.
------------------ ich bin neu - kann nix :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Patrick79ch Mitglied ICT-Manager
Beiträge: 13 Registriert: 14.12.2006
|
erstellt am: 14. Dez. 2006 14:51 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Oh, auf dein Nebenbei :-) (hatte ich gar nicht gesehen! :-) ) ICT-Management ist das was ich grade an der Fachhochschule Nordwestschweiz studiere. Nennt sich nachher ICT-Manager / Wirtschaftsinformatiker FH *stolz* Das Studium ist darauf ausgelegt, dass man nachher in der Lage sein sollte komplexe IT-Projekte leiten zu können. Nun denn "Leiten" ist immer das eine "selber programmieren" wie ich grade feststelle, das andere :-) (ICT heisst im übrigen: Information and Communication Technologies) ------------------ ich bin neu - kann nix :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 14. Dez. 2006 16:05 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hallo Patrick, Danke für die Erläuterung. Wieder schlauer geworden. Probier es mal so: Public Sub test() Dim path As String Dim abc abc = "S:/Bib/01_Verbindungsbeschlaege/01_Schnaepper/01.dwg" path = """" & abc & """" ThisDrawing.SendCommand "(blockIn " & path & ")" & vbCr End Sub Edit: Sehe gerade, das du es schon hattest. Dann fehlen vielleicht noch 2 " links und rechts vom String. Fürs ersetzen von Zeichen in einem String gibt es die funktion replace. Die erleuterung dafür findest du in der VBA-Hilfe in der IDE. Gruß, Carsten [Diese Nachricht wurde von Carsten1210 am 14. Dez. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Patrick79ch Mitglied ICT-Manager
Beiträge: 13 Registriert: 14.12.2006
|
erstellt am: 14. Dez. 2006 16:26 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hi Carsten :-) Jetzt klappts! Folgendermassen hab ich's gelöst:
Code:
Pfad = Image1.ControlTipTextpath = """" & (Replace(Pfad, "\", "/")) & """" ThisDrawing.SetVariable "cmdecho", 0 ThisDrawing.SendCommand "(blockIn " & path & ")" & vbCr
Allerdings, wie es so ist, habe ich jetzt noch einen Schönheitsfehler entdeckt :-D Der Block wird jetzt, eingefügt, man kann ihn drehen - cool! :-) Aber anschliessend fragt er noch alle leeren Attribute ab! (siehe unten!) Diese muss ich mit Enter bestätigen. Kann ich das irgendwie unterdrücken? Dann sollte es so sein, wie ich mir das vorstelle :-)
Code:
Befehl: (blockIn "T:/Mobiliar/Caddys/Take Off/SHARING BOY-67X40X107.dwg")Drehwinkel angeben <0.00000000>: Attributwerte eingeben Datenblatt: BauteilCode: FM-Code: GLT-Wert: System/Anlage: Text-Att-0 <74>: SAP Artikel Nr: Bemerkungen:
Schon mal ganz herzlichen Dank für die Hilfe - wär echt nicht drauf gekommen - macht Spass! :-) ------------------ ich bin neu - kann nix :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 14. Dez. 2006 19:44 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hallo Patrick, Schau dir mal die Variable "Attreq" an. Bei dir sollte diese auf 1 stehen. Stell die mal auf 0 und deine Attribute werden beim einfügen nicht mehr abgefragt. Ich würds aber nach dem einfügen wieder zurücksetzen. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Patrick79ch Mitglied ICT-Manager
Beiträge: 13 Registriert: 14.12.2006
|
erstellt am: 15. Dez. 2006 09:40 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
|
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 15. Dez. 2006 09:45 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
|