| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Sendcommand Ausgabe Textfenster unterdrücken (3874 mal gelesen)
|
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 26. Dez. 2005 19:26 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, ich habe nun mein im Beitrage hier angesprochenes Vorhaben realisiert. Hätte aber bitte noch eine Frage an euch: Ist es möglich bei Befehlen welche ich mittels SendCommand absetze die Ausgabe im AutoCad Textfenster zu unterdrücken? mfg Didi PS: ich hoffe ihr hattet ein schönes Weihnachtsfest, und wünsch euch schon mal einen Guten Rutsch!!!!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 26. Dez. 2005 20:20 <-- editieren / zitieren --> Unities abgeben: Nur für Goofy007
|
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 27. Dez. 2005 10:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas, Danke für die Antwort. Nomutt und cmdecho bringen leider nix. Ich hab allerdings jetzt noch ein neues Problem. Nach Ausführung des Makros, kann ich es nicht mit der Befehlswiederholung (Leertaste) nochmal aufrufen, weil ich da immer den von Sendcommand aufgerufenen Befehl bekomme. Ich versteh leider nur wenig von Lisp, aber ich überleg schon ob das nicht besser im Lisp geschrieben werden sollte. Ich stell mal den Code hier rein, vielleicht bekomm ich ja noch ein paar gute Tipps. Code: Sub Attribut_Verschieben_NoGUI() Dim Object As Object 'Attribut Dim ParentObject As AcadBlockReference 'zugehöriger Block Dim FarbeObjAtt(0 To 50) As Integer 'Farben für max 50 Attribute Dim FarbeParentObject As Integer 'Farbe zugehöriger Block Dim PickedPoint As Variant, TransMatrix As Variant, ContextData As Variant Dim Rechts As String, Hoch As String Dim Befehl As String Dim ObjAtt As Variant Dim I As Integer Dim Markierfarbe As Integer Markierfarbe = 2 'Markierfarbe = Gelb On Error GoTo Ende ThisDrawing.Utility.Prompt vbCrLf & "Attribut Verschieben: - Programm gestartet" & vbCrLf Do 'Wiederhole solange Attribut gewählt wurde 'Get information about selected object ThisDrawing.Utility.GetSubEntity Object, PickedPoint, TransMatrix, ContextData, "Attribut Verschieben: - Attribut auswählen ..." If Object.ObjectName = "AcDbAttribute" Then Set ParentObject = ThisDrawing.ObjectIdToObject(Object.OwnerID) ObjAtt = ParentObject.GetAttributes For I = 0 To UBound(ObjAtt) FarbeObjAtt(I) = ObjAtt(I).color 'Attributfarbe merken ObjAtt(I).color = Markierfarbe 'Farbe der Attribute auf Markierfarbe setzen Next I FarbeParentObject = ParentObject.color 'Blockfarbe merken ParentObject.color = Markierfarbe 'Blockfarbe auf Markierfarbe setzen ParentObject.Highlight True 'Koordinaten des Pickpoints an Variablen übergeben Rechts = ThisDrawing.Utility.RealToString(PickedPoint(0), acDecimal, 6) Hoch = ThisDrawing.Utility.RealToString(PickedPoint(1), acDecimal, 6) 'AutocadBefehl als String definieren Befehl = "_-attedit" & vbCr & "J" & vbCr & vbCr & vbCr & vbCr & Rechts & "," & Hoch & vbCr & vbCr & "P" & vbCr ThisDrawing.SendCommand Befehl 'AutocadBefehel mit "Enter" beenden Befehl = vbCr ThisDrawing.SendCommand Befehl 'Farbe von Block und Attributen wiederherstellen ParentObject.color = FarbeParentObject ParentObject.Highlight False For I = 0 To UBound(ObjAtt) ObjAtt(I).color = FarbeObjAtt(I) Next I End If Loop While Object.ObjectName = "AcDbAttribute" 'Wiederhole solange Attribut gewählt wurde Ende: Set ParentObject = Nothing ThisDrawing.Utility.Prompt "Attribut Verschieben: - Programm beendet" & vbCrLf End Sub
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: 27. Dez. 2005 11:26 <-- editieren / zitieren --> Unities abgeben: Nur für Goofy007
Hallo, du kannst den Makroaufrauf als AutoCAD Befhl definieren, dann gehts auch mit der Befehlswiederholung.
Code:
(defun c:AVNG (/) (vla-runmacro(vlax-get-acad-object) "Attribut_Verschieben_NoGUI"))
So würde dein Befehl mit AVNG aufgrufen.Stelli ------------------ Warum lisp'eln wenn's auch anders geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 27. Dez. 2005 12:01 <-- editieren / zitieren --> Unities abgeben:
Hallo Stelli, danke für deinen Tipp. Bei mir klappt das leider nicht. Ich kann zwar den Befehl definieren, und auch aufrufen, aber nach der Auswahl eines Attributes wird mein Makro sofort beendet. Folgender Text steht dann im Textfenster: Befehl: avng Attribut Verschieben: - Programm gestartet Attribut Verschieben: - Attribut auswählen ... Befehl: Attribut Verschieben: - Attribut auswählen ..._-attedit *Ungültige Auswahl* Erwartet ein einzelnes Objekt. Attribut Verschieben: - Attribut auswählen ...J
*Ungültige Auswahl* Erwartet ein einzelnes Objekt. Attribut Verschieben: - Attribut auswählen ...
Befehl: Attribut Verschieben: - Programm beendet nil Befehl: Befehl: AVNG Attribut Verschieben: - Programm gestartet Attribut Verschieben: - Attribut auswählen ... Befehl: Attribut Verschieben: - Programm beendet nil Befehl: Befehl: 13484.88996,380880.696858 Unbekannter Befehl "13484.88996,380880.696858". Drücken Sie F1-Taste für Hilfe. Befehl: AVNG Attribut Verschieben: - Programm gestartet Attribut Verschieben: - Attribut auswählen ...P *Ungültige Auswahl* Erwartet ein einzelnes Objekt. Attribut Verschieben: - Attribut auswählen ...
Befehl: Attribut Verschieben: - Programm beendet nil Befehl Ich hatte vorher schon mal folgenden Befehl getestet:
Code: (defun c:test (/) (command "-vbarun" "attribut_verschieben_nogui"))
da verhält sich der command test ebenso wie der direkte Aufruf mittels -vbarun. (Keine Befehlswiederholung möglich) Dein Vorschlag gefällt mir besser, weil die Befehlswiederholung möglich ist, und die Ausgaben im Textfenster meinen Wünschen entsprechen. Ich muss mir mal "vla-runmacro" anschauen, das kannte ich bisher noch nicht. Und dann muss ich rausfinden warum in der "vla-runmacro"-Version des Commands die Parameterübergabe nicht funktioniert. Denn daran liegt es wohl. Falls mir da noch einer einen Schubbs in die richtige Richtung geben kann ... DANKE mfg didi 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: 27. Dez. 2005 12:55 <-- editieren / zitieren --> Unities abgeben: Nur für Goofy007
|
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 27. Dez. 2005 13:17 <-- editieren / zitieren --> Unities abgeben:
Hallo Stelli, die Befehle: Zitat: (defun c:AVNG (/) (vl-vbarun "attribut_verschieben_nogui"))
und Zitat: (defun c:avng (/) (command "-vbarun" "attribut_verschieben_nogui"))
führen zum gleichen Ergebnis. Beide male wird das Makro korrekt ausgeführt, aber die Befehlswiederholung gibt nicht AVNG sondern -ettedit wieder. Der Befehl Zitat: (defun c:AVNG (/) (vla-runmacro(vlax-get-acad-object) "Attribut_Verschieben_NoGUI"))
scheint der richtige Weg zu sein, aber leider versteh ich den (noch) nicht. Hast du meinen Code getestet? Gehts bei dir? mfg didi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 27. Dez. 2005 14:14 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmals, Also für mich sieht das so aus, als ob der mittels Zitat: (defun c:AVNG (/) (vla-runmacro(vlax-get-acad-object) "Attribut_Verschieben_NoGUI"))
erzeugte Command die mittels sendcommand übermittelten Befehle erst ausführt nachdem er den gesamten Macrocode abgearbeitet hat. Um richtig zu funktionieren muss aber das Makro die Kontrolle zwischenduch mal an Autocad abgeben (eben zur Aufsührung des von Sendcommand übermittelten Befehl). Was muss ich ändern damit das funktioniert ? mfg didi
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: 28. Dez. 2005 11:17 <-- editieren / zitieren --> Unities abgeben: Nur für Goofy007
Hallo Didi, hab jetzt erst gesehen das du noch ein Problem hast. Ich glaube das es mit der Befehlswiederholung nicht auf normalen Wege geht. Wenn mit Sendcommand ein Befehl an AutoCAD geschickt wird, ist dieser immer der letzte für die Befehlswiederholung. Ich würde den Befehl (avng) am Ende deines Makros einfach nochmal aufrufen und vorher ein Flag setzen das er nicht nochmal durchläuft. Dann steht dein Befehl wieder am Ende der Befehlsfolge. Bau dir doch eine Abfrage rein
Code:
Option Explicit Public Flag As BooleanSub Attribut_Verschieben_NoGUI() ...... Markierfarbe = 2 'Markierfarbe = Gelb If Flag = True Then Flag = False Exit Sub End If On Error GoTo Ende ThisDrawing.Utility.Prompt vbCrLf & "Attribu...... .... Ende: Set ParentObject = Nothing ThisDrawing.Utility.Prompt "Attribut Verschieben: - Programm beendet" & vbCrLf Flag = True ThisDrawing.SendCommand "avng " End Sub
Stelli ------------------ Warum lisp'eln wenn's auch anders geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 28. Dez. 2005 13:13 <-- editieren / zitieren --> Unities abgeben:
Hallo Stelli, klingt interessant! Werd ich gleich mal versuchen. Damit es sauber funktioniert werd ich eine zusätzliche Sub bauen, in welcher ich den defun befehle ausführe, und anschließend den command aufrufe. Damit möchte ich sicherstellen, dass der aufgerufen Command auch wirklich so definiert wurde. mfg Didi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 28. Dez. 2005 14:22 <-- editieren / zitieren --> Unities abgeben:
Hallo Stelli, ... habs jetzt realisiert. War sogar etwas einfacher als vermutet. Ich hab den defun-Befehl in die Sub reingeschrieben. Eine zweite Sub war nicht nötig. Danke für die Hilfe, Units sind unterweges ... mfg Didi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nirwarna Mitglied Vermessungsingenieur
Beiträge: 28 Registriert: 21.12.2006
|
erstellt am: 21. Dez. 2006 17:23 <-- editieren / zitieren --> Unities abgeben: Nur für Goofy007
Hi, ich möchte mir auch was in VB6.0 programmieren, womit ich meine Koordinaten in AutoCAD2000 bekomme. Ich stelle mir das so vor, das ich eine DXF-AutoCAD-Vorlage benutze, in welcher meine Symbole für die unterschiedlichen Punkte vorhanden sind. In diese DXF-Datei schreibe ich dann meine Punkte hinein und füge noch Attribute mit X, Y, Z und weitere Infos hinzu. Dann habe ich ein fertiges DXF mit allen Punkten an der Stelle, den Attributswerten sowie dem richtigen Symbol. LAyer und Farbe möchte ich natürlich auch noch. Kann mir dazu jmd gute Vorschläge geben (oder ist der Weg einfacher zu gestalten). Im Moment bin ich nämlich am Anfang und weiss noch nicht so recht, wie ich am besten Punkte mit Attributen ins AutoCAD bringe. daher wollte ich das DXF benutzen. Aber DXFs sind ja auch sehr groß. Bin für Beispiele pder VB Fragmente sehr dankbar. Evtl. wäre auch ein Kursuslink nicht schlecht. Mfg Werner Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 21. Dez. 2006 18:11 <-- editieren / zitieren --> Unities abgeben: Nur für Goofy007
Hallo & willkommen Werner, irgendwie ist dein Beitrag hier an etwas unglücklicher Stelle;-) Starte am besten nochmal einen eigenen Thread, wo du dann gleich mit beschreibst WOHER die Koordinaten kommen, die nach Acad sollen. Ohne groß nachzudenken, wäre es z.B. machbar, du hast einen Block, der aus einem Punkt und 3 Attributen(xyz) besteht und du hast die Koordinaten in irgendeiner Form (txt, xls, array etc pp) Dann brauchst Du eigentlich nur den Block auf die Reise schicken, Attribute und Insertionpoint aus der KoordinatenListe mitgeben. Erstmal bis hierhin, bei dem dxf-Zauber weiss ich momentan nicht, wo's hingehen soll;-) Also - kleine bitte, neuer Thread - neues Glück, und nochmal etwas genauer bzw. klarer beschreiben;-) [edit: achja vergessen, schreib bitte deine Programmversion/en mit rein[/edit] Gruss, Nancy
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Praktikum Maschinenbau - Produktentwicklung Neuheiten (WiSe 24/25) | Jedes Werkzeug kann immer nur so gut sein wie der Mensch, der dahintersteckt. Deshalb suchen wir bei der Festool Group Mitarbeitende, die gemeinsam mit ihren 3.000 Kolleginnen und Kollegen weltweit etwas bewegen wollen. Tauche ein in unsere Welt ? und erlebe, wie stolz es macht, in einem Familienunternehmen die besten Elektrowerkzeuge der Welt zu bauen.
Du unterstützt unsere Ingenieur:innen ... | Anzeige ansehen | Maschinenbau |
|
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 22. Dez. 2006 02:18 <-- editieren / zitieren --> Unities abgeben: Nur für Goofy007
Was die Programmversionen angeht ... okay da hab ich gepennt, fast alles klar - Entschuldigung. Will an dieser Stelle nur nochmal drauf hinweisen (aus eigener denkwürdiger Erfahrung): die Angabe Acad2000 ist in meinen Augen Käse;-) Acad2000 == VB5 Acad2000i == VB6 Der Unterschied ist acadmässig klein, aber vb-mäsig kann es einen in den Wahnsinn treiben. lg Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |