| |
| 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 mit LISP und Wert 1 (1754 mal gelesen)
|
xem Mitglied Zeichner
Beiträge: 854 Registriert: 07.08.2008 Software: AutoCAD 2022 - 64bit Windows 10 Pro - 64bit PDFCreator 1.0.2 - 32bit Ghostscript 9.0 - 64bit PDF-XChange Viewer - 64bit GIMP 2.6.8 - 64bit MS Office 2013 - 32bit Opera 12 - 32bit MacroX - 32bit 7-zip - 64bit ----------------------- Hardware: Intel i5 680 3,6GHz @ 4GHz 8GB RAM 1333MHz nVidia GTX 460 1024MB Intel SSD 2.5 80GB X25-M Samsung SyncMaster 245B+ Iiyama ProLite E1900s Logitech mx518 Logitech G11 Roccat Sense Glacier Blue
|
erstellt am: 14. Jan. 2009 10:15 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe hier ein sehr schönes Lisp, was auch ganz gut funzt. (defun c:bel (/ corner1 corner2 columns rows roomwidth roomheight colspacing rowspacing) (setq corner1 (getpoint "erste Ecke angeben: ") corner2 (getpoint "zweite Ecke angeben: ") columns (getint "Anzahl wagerecht: ") rows (getint "Anzahl senkrecht: ") roomwidth (abs (- (car corner1) (car corner2))) roomheight (abs (- (cadr corner1) (cadr corner2))) colspacing (/ roomwidth columns) rowspacing (/ roomheight rows) lowerleft (list (min (car corner1) (car corner2)) (min (cadr corner1) (cadr corner2)) ); end list ); end setq (command "_insert" "E-Beleuchtung" (list(+ (car lowerleft) (/ colspacing 2.0))(+ (cadr lowerleft) (/ rowspacing 2.0))0)"" "" "") (command "_array" "l" "" "R" rows columns rowspacing colspacing) ) Das dumme ist nur das bei der Eingabe von: rows (getint "Anzahl senkrecht: ") eine 1 eingeben wird das Lisp nicht mehr funzt. Es müßte eine zweite Variable eingefügt werden z.B. rows2. Dieser wird dann zum berechen des Absandes benutzt in der Zeile: rowspacing (/ roomheight rows2) Leider bekomme ich es aber nicht hin zu sagen das die neue Varable rows2 = rows sein soll aber mindestens eine größe von 2. Des weiteren wird bei der Eingabe von 1 der Zeilen oder Spaltenabstand nicht mehr abgefragt. Hat einer noch eine Idee wie man das lösen kann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 Sie nannten ihn google.
|
erstellt am: 14. Jan. 2009 10:20 <-- editieren / zitieren --> Unities abgeben: Nur für xem
Du weist aber schon wie der Befehl ansich funktioniert und was die "1" bewirkt? Die "1" besagt nämlich, dass es keine Reihen oder Spalten gibt, sondern alles in dieser einen Reihe/Spalte stattfndet. Und wie willst du den Abstand zwischen 1 (einem) Objekt ermitteln? Da gibt es keinen... Wenn du das Ereignis (=1) abfangen willst müsstest du mit "(cond" arbeiten... ------------------ Grüsse Thomas Korrekturen zum Kochbuch AutoLISP Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xem Mitglied Zeichner
Beiträge: 854 Registriert: 07.08.2008 Software: AutoCAD 2022 - 64bit Windows 10 Pro - 64bit PDFCreator 1.0.2 - 32bit Ghostscript 9.0 - 64bit PDF-XChange Viewer - 64bit GIMP 2.6.8 - 64bit MS Office 2013 - 32bit Opera 12 - 32bit MacroX - 32bit 7-zip - 64bit ----------------------- Hardware: Intel i5 680 3,6GHz @ 4GHz 8GB RAM 1333MHz nVidia GTX 460 1024MB Intel SSD 2.5 80GB X25-M Samsung SyncMaster 245B+ Iiyama ProLite E1900s Logitech mx518 Logitech G11 Roccat Sense Glacier Blue
|
erstellt am: 14. Jan. 2009 10:36 <-- editieren / zitieren --> Unities abgeben:
Habe gerade gesehen das die Abstände richtig berechnet werden. Das mit der Variablen rows2 ist also quatsch. Bleibt das Problem mit der 1 Zitat: Original erstellt von tunnelbauer:
Wenn du das Ereignis (=1) abfangen willst müsstest du mit "(cond" arbeiten...
Danke tunnelbauer - aber wie soll es denn aussehen mit "(cond" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1146 Registriert: 20.12.2002 Autocad 2020/64B Win10 WORKSTATION Intel(R) CPU E5-1620 3.60GHz 16,0GB Ram 64 Bit-Betriebssystem HP Designjet T7200 Grafik NVIDIA Quadro P4000 ZWCAD2019
|
erstellt am: 14. Jan. 2009 10:44 <-- editieren / zitieren --> Unities abgeben: Nur für xem
Hallo XEM Hier habe ich was. (defun c:raum (/ Blockn corner1 corner2 columns rows roomwidth roomheight colspacing rowspacing) (setq Blockn (getstring "Blockname? ")) (setq corner1 (getpoint "erste Ecke im Raum: ") corner2 (getpoint "gegenüber liegende Ecke: ") columns (getint "Anzahl X Richtung: ") rows (getint "Anzahl Y Richtung: ") roomwidth (abs (- (car corner1) (car corner2))) roomheight (abs (- (cadr corner1) (cadr corner2))) colspacing (/ roomwidth columns) rowspacing (/ roomheight rows) lowerleft (list (min (car corner1) (car corner2)) (min (cadr corner1) (cadr corner2)) ); end list ) (setq punktx (+(car lowerleft) (/ colspacing 2.0))) (setq pukty (+(car lowerleft) (/ rowspacing 2.0))) (command "_insert" Blockn (list(+ (car lowerleft) (/ colspacing 2.0))(+ (cadr lowerleft) (/ rowspacing 2.0))0) "" "" "") (if (= rows 1) (command "_array" "l" "" "R" rows columns colspacing) (command "_array" "l" "" "R" rows columns rowspacing colspacing) ) ) ------------------ Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 Sie nannten ihn google.
|
erstellt am: 14. Jan. 2009 10:50 <-- editieren / zitieren --> Unities abgeben: Nur für xem
|
xem Mitglied Zeichner
Beiträge: 854 Registriert: 07.08.2008 Software: AutoCAD 2022 - 64bit Windows 10 Pro - 64bit PDFCreator 1.0.2 - 32bit Ghostscript 9.0 - 64bit PDF-XChange Viewer - 64bit GIMP 2.6.8 - 64bit MS Office 2013 - 32bit Opera 12 - 32bit MacroX - 32bit 7-zip - 64bit ----------------------- Hardware: Intel i5 680 3,6GHz @ 4GHz 8GB RAM 1333MHz nVidia GTX 460 1024MB Intel SSD 2.5 80GB X25-M Samsung SyncMaster 245B+ Iiyama ProLite E1900s Logitech mx518 Logitech G11 Roccat Sense Glacier Blue
|
erstellt am: 14. Jan. 2009 10:54 <-- editieren / zitieren --> Unities abgeben:
|
xem Mitglied Zeichner
Beiträge: 854 Registriert: 07.08.2008 Software: AutoCAD 2022 - 64bit Windows 10 Pro - 64bit PDFCreator 1.0.2 - 32bit Ghostscript 9.0 - 64bit PDF-XChange Viewer - 64bit GIMP 2.6.8 - 64bit MS Office 2013 - 32bit Opera 12 - 32bit MacroX - 32bit 7-zip - 64bit ----------------------- Hardware: Intel i5 680 3,6GHz @ 4GHz 8GB RAM 1333MHz nVidia GTX 460 1024MB Intel SSD 2.5 80GB X25-M Samsung SyncMaster 245B+ Iiyama ProLite E1900s Logitech mx518 Logitech G11 Roccat Sense Glacier Blue
|
erstellt am: 14. Jan. 2009 11:34 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von tunnelbauer: @Dober:Das ist die Hälte der Miete; Was ist jetzt nämlich bei [i]columns = 1? [/i]
So langsam komme ich hinter das Geheimnis des LISP so funzt es in beide Richtungen: (defun c:bel (/ Blockn corner1 corner2 columns rows roomwidth roomheight colspacing rowspacing) (setq corner1 (getpoint "erste Ecke im Raum: ") corner2 (getpoint "gegenüber liegende Ecke: ") columns (getint "Anzahl X Richtung: ") rows (getint "Anzahl Y Richtung: ") roomwidth (abs (- (car corner1) (car corner2))) roomheight (abs (- (cadr corner1) (cadr corner2))) colspacing (/ roomwidth columns) rowspacing (/ roomheight rows) lowerleft (list (min (car corner1) (car corner2)) (min (cadr corner1) (cadr corner2)) ); end list ) (setq punktx (+(car lowerleft) (/ colspacing 2.0))) (setq punkty (+(car lowerleft) (/ rowspacing 2.0))) (command "_insert" "E-Beleuchtung" (list(+ (car lowerleft) (/ colspacing 2.0))(+ (cadr lowerleft) (/ rowspacing 2.0))0) "" "" "")
(if (= columns 1) (command "_array" "l" "" "R" rows columns rowspacing) (if (= rows 1) (command "_array" "l" "" "R" rows columns colspacing) (command "_array" "l" "" "R" rows columns rowspacing colspacing) ) ) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 14. Jan. 2009 11:54 <-- editieren / zitieren --> Unities abgeben: Nur für xem
ach nö, Zitat: Original erstellt von xem:
Danke tunnelbauer - aber wie soll es denn aussehen mit "(cond"
vlide F1 Reiter Inhalt AutoLISP Reference AutoLISP Functions C Functions Cond ... so. mfg heiko Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xem Mitglied Zeichner
Beiträge: 854 Registriert: 07.08.2008 Software: AutoCAD 2022 - 64bit Windows 10 Pro - 64bit PDFCreator 1.0.2 - 32bit Ghostscript 9.0 - 64bit PDF-XChange Viewer - 64bit GIMP 2.6.8 - 64bit MS Office 2013 - 32bit Opera 12 - 32bit MacroX - 32bit 7-zip - 64bit ----------------------- Hardware: Intel i5 680 3,6GHz @ 4GHz 8GB RAM 1333MHz nVidia GTX 460 1024MB Intel SSD 2.5 80GB X25-M Samsung SyncMaster 245B+ Iiyama ProLite E1900s Logitech mx518 Logitech G11 Roccat Sense Glacier Blue
|
erstellt am: 14. Jan. 2009 12:00 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Dorfy: ach nö, vlide F1 Reiter Inhalt AutoLISP Reference AutoLISP Functions C Functions Cond ... so. mfg heiko
Ich weiß - kann den Teil der Hilfe aber nicht öffnen. Internet Explorer-Skriptfehler blablabla JA/Nein und das wars. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 Sie nannten ihn google.
|
erstellt am: 14. Jan. 2009 12:09 <-- editieren / zitieren --> Unities abgeben: Nur für xem
|
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 14. Jan. 2009 12:19 <-- editieren / zitieren --> Unities abgeben: Nur für xem
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 14. Jan. 2009 12:27 <-- editieren / zitieren --> Unities abgeben: Nur für xem
Warum sichert ihr eure Progs eigentlich nicht minimal gegen abkacken wegen fehlerhafter Usereingaben ab ? z.B. so : (ungetestet nur in den Editor geschrieben..)
(defun c:bel (/ corner1 corner2 columns rows roomwidth roomheight colspacing rowspacing) (if(and(or(setq corner1 (getpoint "\nErste Ecke angeben: ")) (prompt "\nUngültiger 1. Punkt") ) (or(setq corner2 (getpoint "\nZweite Ecke angeben: ")) (prompt "\nUngültiger 2. Punkt") ) (or(and(setq columns (getint "\nAnzahl wagerecht: ")) (> columns 0) ;--> kann man auch initget für nutzen ) (prompt "\nUngültiger Anzahl waagerecht") ) (or(and(setq rows (getint "\nAnzahl senkrecht: ")) (> rows 0) ) (prompt "\nUngültiger Anzahl senkrecht") ) (setq roomwidth (abs (- (car corner1) (car corner2)))) (setq roomheight (abs (- (cadr corner1) (cadr corner2)))) (setq colspacing (/ roomwidth columns)) (setq rowspacing (/ roomheight rows)) (setq lowerleft (list (min (car corner1) (car corner2)) (min (cadr corner1) (cadr corner2)) ) ) (or(tblobjname "BLOCK" "E-Beleuchtung") (prompt "\nBLOCK : \"E-Beleuchtung\" nicht gefunden!!") ) ) (progn (command "_insert" "E-Beleuchtung" (list(+ (car lowerleft) (/ colspacing 2.0))(+ (cadr lowerleft) (/ rowspacing 2.0))0)"" "" "") (cond ((= columns 1) (command "_array" "l" "" "R" rows columns rowspacing) ) ((= rows 1) (command "_array" "l" "" "R" rows columns colspacing) ) ((and(> rows 1)(> columns 1)) (command "_array" "l" "" "R" rows columns rowspacing colspacing) ) ) ) ) ) ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Attilio Mitglied Technischer Zeichner
Beiträge: 150 Registriert: 18.02.2003 ACAD2012 MEP, ACAD2015 MEP Revit 2015 Windows 7, 64 bit
|
erstellt am: 15. Jan. 2009 16:31 <-- editieren / zitieren --> Unities abgeben: Nur für xem
Geiles Programm, funktioniert ! Ist es möglich, da noch irgendwo ne Abfrage einzubauen welcher Block eingefügt werden soll ? Jetzt wird ja immer der "E-Beleuchtung" gesetzt, cool wäre aber wenn ich auf ein Symbol klicken kann, welches dann vom Programm genommen wird. Ich kann auch ohne diese Funktion leben, aber wär halt schöner :-) Gruss Attilio Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 15. Jan. 2009 16:39 <-- editieren / zitieren --> Unities abgeben: Nur für xem
hi, siehe weiter ober bei Dober Heinz... diese Zeile musst du geschickt in CADmium sein Zeilen einbauen... (setq Blockn... ... (command "_insert" Blockn ... versuch es mal ist garnet so schwer... mfg heiko [Diese Nachricht wurde von Dorfy am 15. Jan. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 15. Jan. 2009 17:09 <-- editieren / zitieren --> Unities abgeben: Nur für xem
auf die schnelle so... (defun c:bel (/ blockn corner1 corner2 columns rows roomwidth roomheight colspacing rowspacing ) (if (and (or (tblobjname "BLOCK" (setq blockn (getstring "\nBlockname eingeben?: ")) ) (prompt (strcat "\nBLOCK : " blockn " nicht gefunden!!")) ) (or (setq corner1 (getpoint "\nErste Ecke angeben: ")) (prompt "\nUngültiger 1. Punkt") ) (or (setq corner2 (getpoint "\nZweite Ecke angeben: ")) (prompt "\nUngültiger 2. Punkt") ) (or (and (setq columns (getint "\nAnzahl wagerecht: ")) (> columns 0) ;--> kann man auch initget für nutzen ) (prompt "\nUngültiger Anzahl waagerecht") ) (or (and (setq rows (getint "\nAnzahl senkrecht: ")) (> rows 0) ) (prompt "\nUngültiger Anzahl senkrecht") ) (setq roomwidth (abs (- (car corner1) (car corner2)))) (setq roomheight (abs (- (cadr corner1) (cadr corner2)))) (setq colspacing (/ roomwidth columns)) (setq rowspacing (/ roomheight rows)) (setq lowerleft (list (min (car corner1) (car corner2)) (min (cadr corner1) (cadr corner2)) ) ) ) (progn (command "_insert" blockn (list (+ (car lowerleft) (/ colspacing 2.0)) (+ (cadr lowerleft) (/ rowspacing 2.0)) 0 ) "" "" "" ) (cond ((= columns 1) (command "_array" "l" "" "R" rows columns rowspacing) ) ((= rows 1) (command "_array" "l" "" "R" rows columns colspacing) ) ((and (> rows 1) (> columns 1)) (command "_array" "l" "" "R" rows columns rowspacing colspacing ) ) ) ) ) (princ) ) mfg heiko Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |