| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: pannen mit Variablen (1950 mal gelesen)
|
joeycool Mitglied Ingenieur TGA
Beiträge: 1455 Registriert: 01.06.2004 MEP/ACAD 2008,..., 2013, 2014, 2015, 2016 und 2017 REVIT MEP 2017 WIN7 64 bit i7 3,4 GHZ, SSD Platte, 16 GB Ram NVDIA Quadro K 2200
|
erstellt am: 20. Jun. 2012 09:09 <-- editieren / zitieren --> Unities abgeben:
Moin zusammen, mit diesem script (oder Klöppelmakro): -pan 0,0 @10000<0 bekomme ich ein pannen (verschieben) der Zeichnung nach links um 10.000 Einheiten hin. Was muss ich tun, um die 10.000 durch einen Zeichnungsspezifischen Wert zu ersetzen, der in der Benutzerdefinierten Variablen "versatz" verwaltet wird. Ersetzen von 10.000 durch "versatz" (auch mit runden/Eckigen Klammern) brachte keinen Erfolg. Danke im Voraus Joeycool Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1144 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 20. Jun. 2012 09:31 <-- editieren / zitieren --> Unities abgeben: Nur für joeycool
Hallo joeycool, unter der Annahme das der Wert in "versatz" als Zeichenkette abgelegt ist, probier mal folgendes Code:
(command "_pan" "0,0" (strcat "@" versatz "<0"))
Wenn "versatz" als Zahl gespeichert ist muss oben statt versatz (rtos versatz) rein. HTH Gruß Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joeycool Mitglied Ingenieur TGA
Beiträge: 1455 Registriert: 01.06.2004 MEP/ACAD 2008,..., 2013, 2014, 2015, 2016 und 2017 REVIT MEP 2017 WIN7 64 bit i7 3,4 GHZ, SSD Platte, 16 GB Ram NVDIA Quadro K 2200
|
erstellt am: 20. Jun. 2012 10:44 <-- editieren / zitieren --> Unities abgeben:
Hi Spider, Danke erstmal. versatz ist als Zahl gespeichert (vermute ich jedenfalls mal, wenn ich einfach eine Zahl eingebe....) Funktioniert aber noch nicht, der Wert wird anscheinend nicht als numerischer wert erkannt... Befehl: (command "-pan" "0,0" (strcat "@" (rtos versatz) "<0")) -pan Basispunkt oder Verschiebung angeben: 0,0 Zweiten Punkt angeben: ; Fehler: Fehlerhafter Argumenttyp: numberp: nil Habe es zur Sicherheit auch noch mal als Text durchlaufen lassen, hat ihm auch nicht gefallen Was mache ich da falsch?? Joeycool Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1144 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 20. Jun. 2012 10:56 <-- editieren / zitieren --> Unities abgeben: Nur für joeycool
|
joeycool Mitglied Ingenieur TGA
Beiträge: 1455 Registriert: 01.06.2004 MEP/ACAD 2008,..., 2013, 2014, 2015, 2016 und 2017 REVIT MEP 2017 WIN7 64 bit i7 3,4 GHZ, SSD Platte, 16 GB Ram NVDIA Quadro K 2200
|
erstellt am: 20. Jun. 2012 10:59 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 20. Jun. 2012 11:05 <-- editieren / zitieren --> Unities abgeben: Nur für joeycool
|
joeycool Mitglied Ingenieur TGA
Beiträge: 1455 Registriert: 01.06.2004 MEP/ACAD 2008,..., 2013, 2014, 2015, 2016 und 2017 REVIT MEP 2017 WIN7 64 bit i7 3,4 GHZ, SSD Platte, 16 GB Ram NVDIA Quadro K 2200
|
erstellt am: 20. Jun. 2012 11:09 <-- editieren / zitieren --> Unities abgeben:
Hmh,, hatte ich mir auch gedacht, aber wo ist sie gespeichert? In Textfeldern kann ich sie auslesen, also müsste sie doch auch irgendwie auswertbar sein, oder denke ich da zu simpel? Joeycool
[Diese Nachricht wurde von joeycool am 20. Jun. 2012 editiert.] [Diese Nachricht wurde von joeycool am 20. Jun. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1144 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 20. Jun. 2012 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für joeycool
Zitat: Original erstellt von joeycool:
Wie Du an die Sachen ran kommst weiß ich auch nicht. Aber da kommt vielleicht ja noch ein Tipp von anderer Seite. Meine Zeile funktioniert, wenn Du vorher noch ein z. B. (setq versatz "10000") ausführst. Gruß Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 20. Jun. 2012 11:15 <-- editieren / zitieren --> Unities abgeben: Nur für joeycool
Durch meinen EDIT etwas durcheinandergekommen, daher noch mal kurz für die Mitleser: Ich Schrieb zunächst das der Wert eindeutig als String vorliegt und kein Rtos nötig wäre, dies hätte man ja aber selbst schnell testen können. Nun zeigte sich aber das es keine Variable "Versatz" gibt die abgerufen werden kann. Ich gehe davon aus das es irgendwo in der Registry steht oder evtl. eine Umgebungsvariable(getenv) ist. ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joeycool Mitglied Ingenieur TGA
Beiträge: 1455 Registriert: 01.06.2004 MEP/ACAD 2008,..., 2013, 2014, 2015, 2016 und 2017 REVIT MEP 2017 WIN7 64 bit i7 3,4 GHZ, SSD Platte, 16 GB Ram NVDIA Quadro K 2200
|
erstellt am: 20. Jun. 2012 11:18 <-- editieren / zitieren --> Unities abgeben:
Na hier kann ich sie sehen. Jetzt muss nur noch ein Magier kommen, der mir sagt, wie ich daran komme... @spider: Vorher die Variable eingeben, würde den Charme des Werkzeugs in meinem Fall ausser Kraft setzen....
Joeycool
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joeycool Mitglied Ingenieur TGA
Beiträge: 1455 Registriert: 01.06.2004 MEP/ACAD 2008,..., 2013, 2014, 2015, 2016 und 2017 REVIT MEP 2017 WIN7 64 bit i7 3,4 GHZ, SSD Platte, 16 GB Ram NVDIA Quadro K 2200
|
erstellt am: 20. Jun. 2012 11:33 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 20. Jun. 2012 11:42 <-- editieren / zitieren --> Unities abgeben: Nur für joeycool
Ok, Dateieigenschaften werden natprlich in der Datei gespeichert - leider kommst du mit Boardmitteln nur per Schriftfeld(_field) an die Sache ran. Programmierung geht natürlich immer, ist aber kein 2Zeiler. Suche in CAD.de nach "CustomDP" bringt einen zu Dictionarys und wie man diese setzt sowie ausliest. ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joeycool Mitglied Ingenieur TGA
Beiträge: 1455 Registriert: 01.06.2004 MEP/ACAD 2008,..., 2013, 2014, 2015, 2016 und 2017 REVIT MEP 2017 WIN7 64 bit i7 3,4 GHZ, SSD Platte, 16 GB Ram NVDIA Quadro K 2200
|
erstellt am: 20. Jun. 2012 12:06 <-- editieren / zitieren --> Unities abgeben:
Au weiah,, VBA bzw. Lisp Bröckel und das mir was ich aus anderen tips und den Suchtreffern weiß, ist, das der Anfang ungefähr so aussehen müsste: ^C^C(vl-load-com)(vlax-invoke-method(vla-get-summaryInfo(vla-get-activeDocument(vlax-get-acad-object))) und dann sowas wie "getCustomInfo" "versatz") ...... das Ergebnis muss ich dann wahrscheinlich in eine lisp-lesbare Variable reinschreiben und dann meinen Code dranhängen.... Jetzt fehlt noch ein wenig Hilfe um das in eine lauffähige Form zu bringen.... Joeycool Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3336 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 20. Jun. 2012 13:10 <-- editieren / zitieren --> Unities abgeben: Nur für joeycool
Hi, ganz rudimentär und dreckig für ein Buttonmakro:
Code: (vl-load-com)(progn(vla-GetCustomByKey(vla-get-SummaryInfo(vla-get-ActiveDocument(vlax-get-acad-object))) "versatz" 'str)(command "_-pan" "0,0" (strcat "@" str "<0")))
Ordentlicher mit einer flexibleren Funktion, die du mitlädtst:
Code: (defun CustInfo (strKey / str) (vl-load-com) (vlax-invoke-method (vlax-get-property (vlax-get-property (vlax-get-acad-object) 'ActiveDocument ) 'SummaryInfo ) 'GetCustomByKey strKey 'str ) str )
...und dann im Buttonmakro so verwenden kannst:
Code: (command "_-pan" "0,0" (strcat "@" (CustInfo "versatz") "<0"))
Beiden Varianten fehlt allerdings die Fehlerbehandlung. Gruß CADchup
------------------ CADmaro.de [Diese Nachricht wurde von CADchup am 20. Jun. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joeycool Mitglied Ingenieur TGA
Beiträge: 1455 Registriert: 01.06.2004 MEP/ACAD 2008,..., 2013, 2014, 2015, 2016 und 2017 REVIT MEP 2017 WIN7 64 bit i7 3,4 GHZ, SSD Platte, 16 GB Ram NVDIA Quadro K 2200
|
erstellt am: 20. Jun. 2012 13:35 <-- editieren / zitieren --> Unities abgeben:
Hallo Cadchup rudimentär und dreckig würde mir völlig reichen, (Fehlerbehandlung nicht notwendig) aber: Befehl: (progn(vlax-invoke(vla-get-SummaryInfo(vla-get-ActiveDocument(vlax-get-acad-obje ct)))'GetCustomByKey "versatz" 'str)(command "_-pan" "0,0" (strcat "@" str "<0"))) _-pan Basispunkt oder Verschiebung angeben: 0,0 Zweiten Punkt angeben: ; Fehler: Fehlerhafter Argumenttyp: stringp nil auch das findet die Variable nicht Ordentlicher habe ich natürlich auch probiert, da habe ich den mitzuladenden Codeschnipsel als Lisp abgespeichert und geladen, kommt aber sofort wieder die Meldung der nicht gefundenen Variable. Befehl: _appload test.lsp erfolgreich geladen. Befehl: _-pan Basispunkt oder Verschiebung angeben: 0,0 Zweiten Punkt angeben: ; Fehler: Fehlerhafter Argumenttyp: stringp nil Oder habe ich das falsch verstanden, wie ich diese flexiblere Funktion mitladen soll? Joeycool Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3336 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 20. Jun. 2012 13:59 <-- editieren / zitieren --> Unities abgeben: Nur für joeycool
|
joeycool Mitglied Ingenieur TGA
Beiträge: 1455 Registriert: 01.06.2004 MEP/ACAD 2008,..., 2013, 2014, 2015, 2016 und 2017 REVIT MEP 2017 WIN7 64 bit i7 3,4 GHZ, SSD Platte, 16 GB Ram NVDIA Quadro K 2200
|
erstellt am: 20. Jun. 2012 14:13 <-- editieren / zitieren --> Unities abgeben:
|
joeycool Mitglied Ingenieur TGA
Beiträge: 1455 Registriert: 01.06.2004 MEP/ACAD 2008,..., 2013, 2014, 2015, 2016 und 2017 REVIT MEP 2017 WIN7 64 bit i7 3,4 GHZ, SSD Platte, 16 GB Ram NVDIA Quadro K 2200
|
erstellt am: 25. Jun. 2012 13:11 <-- editieren / zitieren --> Unities abgeben:
Hallo, habe die freien Tage noch etwas zum Grüblen benutzt, und habe jetzt mit diesen Hilfestellungen hier mal wieder Einiges mehr verstanden, hoffe ich jedenfalls. Also: normale Variablen (die man mit "setq" definieren kann) lassen sich mit command Befehlen ansprechen, werden aber in der Zeichnung nicht gespeichert (wo eigentlich dann?). "Meine" Variablen, also die benutzerspezifischen, werden in der Zeichnung gespeichert, sind über "dwgeigen" hübsch editierbar, aber nicht so leicht verfügbar. Nicht logisch, aber so isses wohl. Und dank Cadchups rudimentären Schnipsel (also dem ersten Teil bis ...'str) ) wird jetzt aus der benutzerspezifischen Variable "versatz" die "normale" Variable "str", die jetzt in Befehlen ansprechbar ist. Ich habe jetzt Cadchups Schnipsel in meine acaddoc.lsp reingepackt, und jetzt habe ich in jeder Zeichnung die "str" mit dem jeweiligen Wert der benutzerspezifische Variable "versatz" zur Verfügung (diese muss natürlich bereits vorhanden sein). War aber trotzdem (für mich) ein harter Weg hierhin, trotzdem nochmal tausend Dank und ne schöne Woche. Joeycool Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1144 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 25. Jun. 2012 14:52 <-- editieren / zitieren --> Unities abgeben: Nur für joeycool
Hallo joeycool, Zitat: Original erstellt von joeycool:
normale Variablen (die man mit "setq" definieren kann) lassen sich mit command Befehlen ansprechen, werden aber in der Zeichnung nicht gespeichert (wo eigentlich dann?)
Fast richtig. Variablen die Du in Lisp-Zeilen (oder Programmen) mit (setq ...) belegts, sind (nach dem ersten belegen) in der Zeichnung vorhanden und verfügbar. Und zwar nur in der jeweiligen Zeichnung und nur bis zum schließen. NEU und ÖFFNEN setzt sozusagen alles wieder zurück. Den Inhalt diese Variablen, wenn vorhanden, kannst Du Dir mit !variablenname in der Befehlszeile ausgeben lassen. ABER: Variablen die Du in Lisp Programmen als lokale Variablen deklarierst (s. Funktion (defun name ( / var1 var2 ...) ...), die sind nur "sichtbar" und vorhanden solange diese Funktion läuft. Du siehst, es geht auch noch "verzwickter". Und Deine benutzerspezifischen Eigensachaften sind halt "was ganz anderes". Gruß Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|