| |
| 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: Hilfe beim Rauschschreiben !!! (798 mal gelesen)
|
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 30. Jul. 2008 16:18 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, hätte mal eine Frage ich weiß, ich weiß das, dass eine Anfänger frage ist. Und zwar arbeite ich an einem Lisp Programm was mit bestimmte Informationen in eine Textdatei speichert. Jetzt bin ich aber Anfänger und kenn gerade mal die Grundlagen des Lisp- Programmierens. So, ich kann z.b mit den Entities überhaupt nicht anfangen. Weiß nur das ich mit dem befehl ssget einen Auswahlsatz bilden kann. Jetzt muss ich aber einige Informationen aus dem Auswahlsatz in variablen kriegen weil ich mit den Rechnen muss. Ich bräuchte die Koordinaten der einzelnen punkte. Z.B Linien Pk1 = 0.0 Pk2 = 0.05 Z.B Polyline Pk1 = 0.0 Pk2 = 0.05 Pk3 = 0.1 .. (Die PKs sollen variablen sein) Könnte mir jemand dabei helfen oder mir eine Seite nennen wo ich das nach lesen kann will mich ja auch ein bisschen weiterbilden ^^. Hab nämlich nicht auf der seite gefunden wusste nicht was ich eingeben soll. Danke im voraus. Mit freundlichen Grüßen Fire Phoenix
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 30. Jul. 2008 16:28 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
Hi, immer wieder Mapcar's Seiten... Da kannst Du mit anfangen. Ansonsten gibt es das ganze ja jetzt auch als Buch. Und nun kurz zu Deinen Fragen: 1. Ein Auswahlsatz ist eine Gruppe von Elementen. 2. mit der Funktion SSNAME bekommst Du den Namen eines Elements des AWS. 3. mit der Funktion ENTGET bekommst Du alle Eigenschaften des Elements. 4. Mit ASSOC filterst Du entsprechende Eigenschaften aus. 5. Press F1 to continue Grüsse, Henning ------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 30. Jul. 2008 16:28 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
mach einfach mal (setq A(entget(Car(Entsel)))) und wähl eine Linie an, dann wirst du sehen , das Anfang und enpunkt in den GC 10 und 11 gespeichert sind. mit (cdr(assoc 10 A)) kannst du somit den Linienanfangspunkt ermitteln und mit (cdr(assoc 11 A)) den Linienendpunkt bei LW-Polylinien das gleiche, hier sind die Koordinaten in den GC 10 gespeichert, da hilft dann
(vl-remove-if 'null (mapcar'(lambda(X)(if(=(car X)10)(cdr X))) (Entget(Car(Entsel "\nPL wählen:" ))))) ------------------ - 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 |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 30. Jul. 2008 16:40 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
Hallo Phoenix, was immer wieder empfehlenswert ist: [URL=http://www.autolisp-tutorial.mapcar.net/][/URL] - schau dir den Befehl "entget" an - suche nach "Gruppencodes" und lies das - verwende "assoc" und "cdr" Das mal als schnelle Tips, ich mach nämlich jetzt Feierabend bevor noch jemand kommt und will was. Morgen gehts weiter. Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 31. Jul. 2008 14:32 <-- editieren / zitieren --> Unities abgeben:
Danke euch allen. Der tip von CADmium geht gut zumindesetes das mit den linien. Das mit der polyline hab ich noch nicht probiert. So jetzt komm ich zu nächsten problem die variablen sollen in der textdatei in einer reiche angezeigt werden. name 1 1 7 (pk1=Linie) (pk2=Linie) die ersten 4 zeilen sind auch variablen. kann mir einer helfen und mir sagen wie ich eine varaible in eine zeile in einer textdatei speichern kann ? Oder sagen wo ich das nach lesen kann. Die seite die ihr mir genannt hab, find ich nicht so gut. Gibt es vielleicht noch anderen deutschsprachige Autolisp seiten? Danke schon mal. mfg Firephoenix 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: 31. Jul. 2008 15:02 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
... das ist doch die Seite ... im Kochbuch hast du das ganze überarbeitet als Buch ... lade dir über "Button-Icon" oben links die zip-Datei von mapcare herunter... dort sind die Seiten/Themen mit eindeutigeren Schlagwörtern bezeichnet... google mal AutoLisp-Handbuch oder AutoCAD 2000 Visual Lisp Tutorial oder AlispRef oder The Visual LISP Developers Bible ist zwar meistens englich aber doch alles anschaulich erklärt mfg heiko Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 01. Aug. 2008 09:51 <-- editieren / zitieren --> Unities abgeben:
Hi, Leute schlag mich bitte nicht wenn ich noch was frage ^^. sorry das ich euch noch mal stören muss. Hab den ratschlag befolgt und hab mir das handbuch besorgt. Weiß jetzt auch wie ich eine variable in meine datei kriege. Mit dem Befehl write-line. Hab aber wieder ein problem. Undzwar muss ich für jede varable eine befehl machen. Die texte in der textdatei ordnet er mir dan untereinander. Beispiel: 1 3 4 Ich brauch die aner so. 1 3 4 Ich weiß das ich mit dem befehl write-char einen zeilenunbruch erzeugen kann. Kann ich aber euch eine leerzeichen damit erzeugen?? Danke Leute ohne euch wer ich so weit gekommen. Hofffe ich komm noch weiter^^ mfg FirePhoeniX Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 01. Aug. 2008 09:57 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
nimm strcat um einen String zusammenzupappen : (write-line(strcat "1" " " "2" " " "3")) ------------------ - 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 |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 01. Aug. 2008 11:08 <-- editieren / zitieren --> Unities abgeben:
Danke für die Antwort CADmium. Super idee aber hab wieder ein problem^^. So, wollte meine variablen in eine spring zusammen fassen. Hab aber ein Problem. Eine der variablen ist eine Kordinate. Ich weiß zwar wie ich eine ganzzal in einen spring undwandeln kann. Aber nicht wie ich das mit einer kordinate mache, Am besten wer wenn ich den x,y,z wert auch ich eine eingene variable speicher kann. Das, dass geh das weiß ich es gibt glaube einen befehr der mir die ersten 5-6 zahlen in eine variable abspeicher. Hab aber vergessen wie der heißt und weiß auch nicht ob das bei kordinaten hilft. Ich weiß das ich ein anfänger bin !!!!!!! Und das ich euch mit diesen sachen nerve ich komme aber nicht weiter ^^ Als seit gnädich und helft eine armen anfänger ^^ mfg FirephoeniX
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 01. Aug. 2008 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
(setq K '(12 43 64)) (strcat (rtos(car K)2 2)" "(rtos(cadr K)2 2)" "(rtos(caddr K)2 2)) oder wenns reicht (vl-princ-to-string K) (apply 'strcat (mapcar '(lambda(X)(strcat " "(vl-princ-to-string X)))K)) gefällt mir auch , besonders bei längeren Listen ------------------ - 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 |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 01. Aug. 2008 12:37 <-- editieren / zitieren --> Unities abgeben:
|
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 01. Aug. 2008 12:39 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
|
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 01. Aug. 2008 14:53 <-- editieren / zitieren --> Unities abgeben:
Hi ich bins noch mal^^ Ich glaube ich ernte schon die erste buh rufe. Undzwar hab ich wieder ein Problem. Das mit den linien hab ich entlich geschafft. Jetzt komm schon das nächte problem. Die polylines sind dran. Hab den code von CADmium genommen. Und es funktiort super. (vl-remove-if 'null (mapcar'(lambda(X) (if(=(car X)10)(cdr X))) (Entget(Car(Entsel "\nPL wählen:" ))))) Das problem an dem Code ist das er mir die kordinaten in ein einer Variable speichert. Ich breuchte aber für jeden Punkt eine. Hab mir dann überlegt. Ob das mit dem anden Code geht. (setq A(entget(Car(Entsel)))) (cdr(assoc 10 A)) Er speichert mir zwar was aber ich weiß nicht was das ist keine Kordinate der mir in die Variable speichet. Das passiert aber nur bei Polyline bei den linien geht es super. Vielleicht helft ihr mir doch noch mal^^. mfg FirePhoeniX
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 01. Aug. 2008 15:05 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
...indem Du die Liste in einer While-Schleife abarbeitest: Code:
(while (setq a (car punktliste)) (progn (setq punktliste (cdr punktliste)) ;jetzt steht in a die "Koordinate", und Du kannst wie vor verfahren ;CODE ) )
Grüsse, Henning ------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 01. Aug. 2008 15:23 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
Hallo FiRePhoeniX, Zitat: Das problem an dem Code ist das er mir die kordinaten in ein einer Variable speichert. Ich breuchte aber für jeden Punkt eine.
Warum brauchst du für jede Koordinate eine Variable ? Du weist doch bei einer Polylinie vorher gar nicht wieviele Stützpunkte die hat. Gewöhn dich bei LISP lieber an die Verarbeitung in Listen und an die Befehle "mapcar" und "foreach" sonst erzeugst du ein Programm zur Verwaltung von Variablen und nicht das was du eigentlich vorhast. Das nur als gut gemeinter Tip. Iich hab nämlich auch mal so angefangen wie du und bin heute noch ab und zu dabei alte Programme aus genau diesem Grund neu zu schreiben, weil ich die selbst nicht mehr verstehe. Zitat: [Er speichert mir zwar was aber ich weiß nicht was das ist keine Kordinate der mir in die Variable speichet. Das passiert aber nur bei Polyline bei den linien geht es super.
Was kommt denn da raus wenns keine Koordinate ist ? Gib mal Bescheid. Gruß Andreas
[Diese Nachricht wurde von Andreas Kraus am 01. Aug. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 01. Aug. 2008 15:30 <-- editieren / zitieren --> Unities abgeben:
|
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 01. Aug. 2008 16:00 <-- editieren / zitieren --> Unities abgeben:
Danke Andreas Kraus du hast recht. So zu deiner ersten frage zu komme ich brauch die Kordinaten deswegen. Weil die in eine anderes Program eingelesen werden. Das problem daran ist das die Tabelle eine komische formatierung hat. Name objekt Punkt typ Kordiinaten Und zwischen diesen Spalten muss ein Tabolato sprung sein sonnst erkennt es das objekt nicht. Mit einer Linie geht das gut aber wie mach ich das mit Polylines?? Denn jeder punkt muss unter einander stehen. Name objekt Punkt typ Kordiinaten Test 2 1 1 0.00 0.00 Test 2 2 1 0.10 0.10 ... Hab mir schon was dabei gedacht. Jetzt fragst du dich bestimmt warum ich das mache!!!! Es handelt sich um symbol dateien. Die auch sowelchen Tabellen aufgebau sind. Wenn ich das alles mit dem Program machen musste würde ein Symbol 30 min in anspruch nehmen. Deswegen versuche ich ein Lisp Program zu schreiben womit das besser geht. Vielleicht klappt es auch. Hoff ich!!! Deine zweite frage war bezüglich des Codes wo diese Komische Kordinate rauskommt. Hab mich ein bisschen schlecht ausgedrückt. Es kommt zwar eine Kordinate raus, aber keine die der Polyline gehört. Hoffe ich konnte dir damit ein paar fragen beantworten ^^ mfg FirePhoeniX Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 04. Aug. 2008 15:26 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
Aha, verstanden. probier mal folgendes Programm. Ich hoffe du kommst mit "mapcar" und "vl-remove-if-not" klar. An der Stelle wo "(entget (car (entsel)))" steht kannst du auch direkt die Elementdaten der Polylinie einsetzen. Un da wo "(strcat "Test" "\t" (rtos (nth 1 p)) "\t" (rtos (nth 1 p)))" steht wird die Zeichenkette zusammengebaut. Wenn du fragen hast, frag. Gruß Andreas (defun c:xxx () (setq datei (open (getfiled "Liste speichern" (getvar "dwgprefix") "txt" 3) "w")) (foreach zeile (mapcar '(lambda (p) (strcat "Test" "\t" (rtos (nth 1 p)) "\t" (rtos (nth 1 p)))) (vl-remove-if-not '(lambda (data) (= 10 (car data))) (entget (car (entsel)))) ) (write-line zeile datei) ) (close datei) (princ) )
[Diese Nachricht wurde von Andreas Kraus am 04. Aug. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 05. Aug. 2008 10:45 <-- editieren / zitieren --> Unities abgeben:
Danke Andreas Kraus, bist der besste. Man bist du Gut . Wollte mich bedanken der Code funktioniert super. Weiß zwar nicht bei allen stellen was du da machst aber bin ja noch beim lernen. Mein code sieht so ungefähr 10 mal so lang aus^^. Dir ist aber ein kleiner fehler pasiert^^. undzwar bei: (mapcar '(lambda (p) (strcat "Test" "\t" (rtos (nth 1 p)) "\t" (rtos (nth 1 p)))) bei (nth 1 p )))) muss ne 2 hin sonst bekomme ich zwei mal den X wert.^^ Wollte an dieser stelle aber noch was fragen wenn das schon so gut und schnell mit einem kleine code geht. Gibt es eine möglich keit die anzal der punkte um an zu erhöhen. Test 1 0.00 0.00 test 2 0.00 0.01 test 3 0.00 0.02 ... Als zählen meine ich und dann in der Liste anzuzeigen??? Ich würde das mit einer schleife machen. Da ich aber deine code nicht verstehe weiß ich nicht wo ich die anbringen soll^^ Und vielleicht geht das ja einfacher. Danke ist dann erlich erlich die letzet fragen mfg Firephoenix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 05. Aug. 2008 11:30 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
Jetzt lob mich mal nicht zuviel, ich heb ja noch ab kurze Codeerklärung: Ich hole mir die Liste der Elementdaten eines angeklickten Objekts. Da ist aber noch keine Prüfung dabei ob das eine Polylinie ist (entget (car (entsel))) Die Liste speichere ich NICHT in einer Variablen, sondern verarbeite sie gleich weiter. Ich brauch ja nur die Stützpunkte, also alles was den Gruppencode 10 hat. vl-remove-if-not kann bestimmte Elemente aus einer Liste entfernen, man braucht nur zu sagen welche. Also entferne ich "alle Elemente die nicht mit 10 anfangen" (= 10 (car data)). Da es eine solche Funktion zum Filtern in Lisp nicht gibt mach ich mir halt eine, also : (lambda (data) (= 10 (car data))) und übergebe diese Funktion an vl-remove-if-not ohne sie zu evaluieren, deshalb muß da ein ' davor. (vl-remove-if-not '(lambda (data) (= 10 (car data))) (entget (car (entsel)))) Die Liste die da rauskommt enthält jetzt nur noch die Gruppen 10, also die Stützpunkte. Die Liste speichere ich wieder NICHT in einer Variablen, sondern verarbeite sie wieder gleich weiter. mapcar ist eine Funktion die mit jedem Element einer Liste (oder sogar mehrerer Listen) etwas macht. Was da gemacht werden soll wird, wie bei vl-remove-if-not als Funktion übergeben. Also bauen wir uns wieder mit lambda eine Funktion weil es das was wir brauchen in Lisp so nicht fertig gibt. (lambda (p) (setq n (1+ n)) (strcat "Test" "\t" (itoa n) "\t" (rtos (nth 1 p)) "\t" (rtos (nth 2 p)))) Da kommt wieder eine Liste raus die jetzt die fertigen Zeichenketten enthält. Du hast es dir sicher schon gedacht: Die Liste speichere ich wieder NICHT in einer Variablen, sondern verarbeite sie wieder gleich weiter. Zum Schluß verwende ich foreach um die einzelnen Listeneinträge in eine Datei zu schreiben. Ich hoffe du kommst jetzt besser damit klar, schließlich sollst du ja wissen was du da machst. Ach ja, das Ganze mit Zähler. Bitte sehr: (defun c:xxx () (setq datei (open (getfiled "Liste speichern" (getvar "dwgprefix") "txt" 3) "w")) (setq n 0) (foreach zeile (mapcar '(lambda (p) (setq n (1+ n)) (strcat "Test" "\t" (itoa n) "\t" (rtos (nth 1 p)) "\t" (rtos (nth 2 p)))) (vl-remove-if-not '(lambda (data) (= 10 (car data))) (entget (car (entsel)))) ) (write-line zeile datei) ) (close datei) (princ) ) Und hoffentlich ist das nicht deine letzte Frage. Schließlich hat ja jeder mal angefangen und ich weis noch was ich für Schwierigkeiten hatte. Als frag wenn du was wissen willst denn irgendwann fängst du dann an Fragen zu beantworten und genau so funktioniert doch dieses Forum - oder ? Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 05. Aug. 2008 12:08 <-- editieren / zitieren --> Unities abgeben:
Ich danke dir noch mal. Super so gut würde ich auch gerne sein aber das krieg ich mit eurer hilfe schon hin^^ Du hast vollkommen recht dafür ist ein forum da, dass mal fragen äußert. Und das mach ich noch mal Wollte fragen wie ich die kordinate dur den nullpunkte abziehen kann. Will ja nicht ein 100m großes symbol haben brauch ja eine basis punkt. Habs so probiert: (rtos (mapcar '- (nth 1 p) nullpk)) Klappt aber nicht, zeigt mir den Fehler: Fehlerhafter Argumenttyp: listp 2.73218 an. Ich hoffe ich bin auf den richtigen weg. Kann nur nicht den Pfad finden^^. Die anderen fragen ist nur inderesse halber. Geht der gleiche befehl auch mit linien?? Hab eine elen langen code nur für linien. So ein kurzer code wer cooler. Hier mein anfänger code: ((= OB0TYP "l") (setq OB0(entget(Car(Entsel "\nObjekt 0 wählen: ")))) (setq OB0Lpk1 (cdr(assoc 10 OB0))) (setq OB0Lpk2 (cdr(assoc 11 OB0))) (setq OB0Lrpk1 (mapcar '- OB0Lpk1 mittpo)) (setq OB0Lrpk2 (mapcar '- OB0Lpk2 mittpo)) (setq OB0Kopk1.1 (rtos(car OB0Lrpk1)2 2)) (setq OB0Kopk1.2 (rtos(cadr OB0Lrpk1)2 2)) (setq OB0Kopk2.1 (rtos(car OB0Lrpk2)2 2)) (setq OB0Kopk2.2 (rtos(cadr OB0Lrpk2)2 2)) (write-line (strcat name " " OB0Z " 1 1 " OB0Kopk1.1 " " OB0Kopk1.2) textdatei) (write-line (strcat name " " OB0Z " 2 1 " OB0Kopk2.1 " " OB0Kopk2.2) textdatei) ) danke noch mal Andreas Kraus. Den code den ich für die polylines gemacht habe willst du garnicht sehen^^. mfg Firephoenix
[Diese Nachricht wurde von FiRePhoeniX am 05. Aug. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 05. Aug. 2008 13:53 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
Also... mapcar arbeitet mit Listen ! Wenn du von einer Koordinate etwas abziehen willst, dann ist das ja eine Liste mit zwei oder drei Werten (je nach dem ob der Z-Wert mit in der Liste ist oder nicht). Also mußt du auch eine Liste abziehen die genauso lang ist Beispiel: wenn in der Variablen p die Liste (8.5 16.0 9.0) gespeichert ist und du machst das: (setq p (mapcar '- p '(5.0 5.0 5.0))) sieht der Inhalt von p dann so aus: (3.5 11.0 4.0) Wenn du aus dieser Liste eine Zeichenkette machen willst, gibt es verschiedene Überlegungen: (mapcar 'rtos p) ergibt ("3.5" "11" "4") Das ist immer noch eine Liste, allerdings sind da jetzt Zeichenketten drinn. (apply 'strcat (mapcar 'rtos p)) ergibt "3.5114" Das ist jetzt zwar eine Zeichenkette aus den Einzelwerten der Koordinate , aber irgendwie ist das Schrott. Du hattest als Trennzeichen einen Tabstop, also bauen wir da auch Tabstops ein. Nur wo ? z.B. da (mapcar '(lambda (a) (strcat "\t" (rtos a))) p) und dann zusammenbauen: (apply 'strcat (mapcar '(lambda (a) (strcat "\t" (rtos a))) p)) Wenn du den Tabstop am Anfang nicht brauchtst: (apply 'strcat (mapcar '(lambda (a) (strcat "\t" (rtos a))) p)) So, und dann noch für Linien:
(defun c:xxx () (setq datei (open (getfiled "Liste speichern" (getvar "dwgprefix") "txt" 3) "w")) (setq n 0) (foreach zeile (mapcar '(lambda (p) (setq n (1+ n)) (strcat "Test" "\t" (itoa n) "\t" (rtos (nth 1 p)) "\t" (rtos (nth 2 p))) ) (vl-remove-if-not '(lambda (data) (or (= 10 (car data)) (= 11 (car data)))) (entget (car (entsel)))) ) (write-line zeile datei) ) (close datei) (princ) ) Gruß Andreas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 06. Aug. 2008 10:09 <-- editieren / zitieren --> Unities abgeben:
Moin Forum, ich wollte mich eigentlich nur bedanken. Ich habe es geschafft das Program es lebt. Nein, nein geht es LÄUFT !!!! Zwar steht es noch auf wackliegen Beinen. Weil es jeden fehler mit abbruch dankt. Aber was solls wenn ich zeit hab schreibe ich es mal um, aber nicht jetzt hab die Nase voll fürs erste. Das Thema kan geschlossen werden. mfg FirePhoenix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |