| |
| 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??mal anders?? (2426 mal gelesen)
|
OlliBaer Mitglied Dipl. Ing. TGA
Beiträge: 19 Registriert: 06.08.2003
|
erstellt am: 15. Aug. 2003 08:43 <-- editieren / zitieren --> Unities abgeben:
hallo zusammen, ich möchte gerne einen block einfügen. dieser soll aber nicht mittels point = ThisDrawing.Utility.GetPoint(, "Einfügepunkt wählen") Set blockref = ThisDrawing.ModelSpace.InsertBlock(point, name, 1, 1, 1, 0) eingefuegt werden, sondern ich möchte den block sichtbar am mauszeiger hängen und dann erst plazieren. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pan Mitglied
Beiträge: 141 Registriert: 18.01.2003 HP Z200 Win 7 prof ADT 2012
|
erstellt am: 15. Aug. 2003 14:09 <-- editieren / zitieren --> Unities abgeben: Nur für OlliBaer
Hallo dachte immer ich wär der einzige der sichtbares Schieben braucht. Sieh doch mal nach AcadXDynamicGraphics von der Acadx-Webseite. Damit kann man Objekte sichtbar schieben. Musst mal sehen ob man das Tool hierfür einarbeiten kann. Bisher mach ichs mit Lisp, setze Objekte irgendwo hinter 0,0 und schieb es dann sichtbar ein. Gruß Pan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
OlliBaer Mitglied Dipl. Ing. TGA
Beiträge: 19 Registriert: 06.08.2003
|
erstellt am: 15. Aug. 2003 16:37 <-- editieren / zitieren --> Unities abgeben:
|
pan Mitglied
Beiträge: 141 Registriert: 18.01.2003 HP Z200 Win 7 prof ADT 2012
|
erstellt am: 15. Aug. 2003 16:52 <-- editieren / zitieren --> Unities abgeben: Nur für OlliBaer
|
OlliBaer Mitglied Dipl. Ing. TGA
Beiträge: 19 Registriert: 06.08.2003
|
erstellt am: 15. Aug. 2003 17:29 <-- editieren / zitieren --> Unities abgeben:
|
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 18. Aug. 2003 07:35 <-- editieren / zitieren --> Unities abgeben: Nur für OlliBaer
Hallo Olli, ein bisschen musst du aber schon aufpassen, wie z.B. bei transparenten Befehlen wie Zoom, Pan, etc. Da wirst du warscheinlich rausgeschmissen, du kannst es aber übergehen, probier's einfach mal aus. Was bei uns auch manchmal passiert ist, wenn wir danach einen Zoom-Befehl aufgerufen haben, hat ACAD plötzlich als ersten Punkt automatisch den letzten Punkt für das Zoom-Fenster angenommen. Ich mußte daraufhin alle "Ghostblocks" wieder entfernen, leider. Ich hatte Höhenkoten gemacht, bei denen man die Höhe beim einsetzen sehen konnte, die sich auch veränderte, wenn man auf dem Bildschirm herumfuhr. Oder Schnittlinien, bei denen man gleich sehen konnte in welche Richtung die Blöcke schauen, das ist hier alles möglich, spiel dich einfach ein wenig. Leider dauert es noch etwas bis die Version für 2004 rauskommt. ------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
harryk Mitglied Projektleiter
Beiträge: 124 Registriert: 19.08.2003
|
erstellt am: 19. Aug. 2003 18:06 <-- editieren / zitieren --> Unities abgeben: Nur für OlliBaer
Hi, geht auch anders, einfach nen bissl Lisp dafür beschäftigen (nicht lachen...) Das hier in einer .lsp Datei speichern und laden: (defun blockIn(Path) (setvar "cmdecho" 0) (princ) (Command "_-Insert" path pause "1.0" "1.0"pause) (setvar "cmdecho" 1) (princ) ) Pause repräsentiert eine Benutzereingabe, kann durch Variabeln ersetzt werden. Von einem VBA Form ruft Ihr das Dingen folgendermassen auf: Private Sub CommandButton1_Click() Dim path As String path = """G:/CADLIB/RrWaende/cwa280D.dwg""" Me.Hide ThisDrawing.SendCommand "(blockIn " & path & ")" & vbCr Me.Show End Sub darauf achten das Backslash in Pfaden von Lisp nicht aktzeptiert wird. CMDECHO würd ich noch nach VBA verschieben dann dürfte man nichts mehr sehen. Um ggf. den Block mit VBA weiter zu bearbeiten muss dann allerdings das zuletzt erzeugte Element abgfragt werden usw.. Um das zusätliche laden oder verteilen der lisp Datei zu vermeiden könnte man diese Datei jetzt noch mit VBA vorher erzeugen und ausführen, nur so ne Idee. May it help! Gruss, Harry Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 20. Aug. 2003 06:45 <-- editieren / zitieren --> Unities abgeben: Nur für OlliBaer
@Harry Ob das wirklich so gscheit ist??? Wir brauchen den Block in diesem Beispiel ja noch einmal, den Sinn hinter dem Herumspringen verstehe ich nicht, wozu kann man denn in VBA einen Block einsetzen. ------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 20. Aug. 2003 07:01 <-- editieren / zitieren --> Unities abgeben: Nur für OlliBaer
@Harry Entschuldige, hab mich im Beitrag geirrt. Aber trotzdem, dein Vorschlag ist ok, aber wenn man den Block noch einmal im Przedurablauf benötigt, dann kann man ihn nicht brauchen. Überhaupt wenn du dir meine Beispiele anschaust. Der Vorteil von AcadX ist der, das man ja nicht nur Blöcke als Vorschau haben kann, jedes Zeichenelement ist möglich. ------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
harryk Mitglied Projektleiter
Beiträge: 124 Registriert: 19.08.2003
|
erstellt am: 20. Aug. 2003 07:31 <-- editieren / zitieren --> Unities abgeben: Nur für OlliBaer
klar kannst Du den eingefügten Block weiterverwenden, wie schon gesagt Du musst nur noch mit VBA das zuletzt erzeugte Element rausfischen und an ein Object übergeben. Welche Beispiele meinst denn Du?? Was anderes als Blöcke visuell einfügen hab ich selbst noch nicht gebraucht, hin und wieder helfe ich mir wenn ich der utility.getpoint Funktion vorher einen Punkt mitgebe, das Gummiband reicht eigentlich aus. Gruss, Harry Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
harryk Mitglied Projektleiter
Beiträge: 124 Registriert: 19.08.2003 Revit 2019, ACMep2019, F360
|
erstellt am: 20. Aug. 2003 07:37 <-- editieren / zitieren --> Unities abgeben: Nur für OlliBaer
|
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 20. Aug. 2003 07:40 <-- editieren / zitieren --> Unities abgeben: Nur für OlliBaer
|
harryk Mitglied Projektleiter
Beiträge: 124 Registriert: 19.08.2003
|
erstellt am: 21. Aug. 2003 20:10 <-- editieren / zitieren --> Unities abgeben: Nur für OlliBaer
|
steinemann09 Mitglied Dipl. Ing.
Beiträge: 47 Registriert: 27.08.2008 AutoCAD 2005, AutoCAD 2011
|
erstellt am: 09. Apr. 2009 13:12 <-- editieren / zitieren --> Unities abgeben: Nur für OlliBaer
Hallo Harry, Du hattest vor langer Zeit ein schönes Beispiel über den sendcommand-Befehl. Mir gelingt es zwar einen Parameter an den Lispaufruf zu übergeben, aber auf den Rückgabewert der Lispfunktion kann ich in VBA nicht zugreifen. Hast Du eventuell eine Idee dazu? _____________________________________________________________ Sub test() ThisDrawing.Utility.GetEntity BlockRef, inspkt, "Blockwählen" oi = Attributes(3).ObjectID ' Objekt-Id des 3. Attributwertes hOBJEKTID = oi ThisDrawing.SendCommand "(oi2la " & hOBJEKTID & ")" & vbCr ' an dieser Stelle möchte ich den Rückgabe Wert der ' Lispfunktion weiterrverarbeiten End Sub _______________________________________________________________ Der Lisp-Qellcode
(defun oi2la(hOBJEKTID ) ; Routine zur Ermittlung des Layernamens aus der Objekt-ID (setq DOC(vla-get-activedocument(vlax-get-acad-object))) (setq OBJ2(vla-ObjectIDToObject DOC hOBJEKTID)); hOBJEKTID ist die Objekt-Id des Blockes (setq OBJ3(vlax-vla-object->ename OBJ2)) (setq layer_n (cdr (assoc 8 (entget OBJ3)))) ) ---------------------------------------------- Der Rückgabewert der Lispfunktion ist der Inhalt der Varable layer_n. Ein Tipp wäre sehr hilfreich für mich. Gruß Volker
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 09. Apr. 2009 15:25 <-- editieren / zitieren -->
Hi Volker, über SendCommand bekommst Du keine Rückgabewerte. Du kannst aber in Deinem Lisp den Rückgabewert in einer der USER-Setvariablen speichern und auf diese Variable dann von VBA aus zugreifen. - alfred - ------------------ www.hollaus.at |