| |
| 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: Einfügepunkt(Koordinate) eines Blockes (2235 mal gelesen)
|
mundal Mitglied Techniker
Beiträge: 320 Registriert: 14.02.2005
|
erstellt am: 23. Jul. 2007 09:41 <-- editieren / zitieren --> Unities abgeben:
Hallo CAD.DE, ich habe 2 sehr simple Fragen: 1.) Kennt jemand eine LISP-Routine die mir den Einfügepunkt eines Blockes in eine Variable schreibt. 2.) Wie werden Ascii-Zeichen in eine Koordinate umgewandelt. Gruss und Danke
Peter 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 ich hab eh keine Probleme damit...
|
erstellt am: 23. Jul. 2007 09:52 <-- editieren / zitieren --> Unities abgeben: Nur für mundal
|
mundal Mitglied Techniker
Beiträge: 320 Registriert: 14.02.2005
|
erstellt am: 23. Jul. 2007 10:00 <-- editieren / zitieren --> Unities abgeben:
|
mundal Mitglied Techniker
Beiträge: 320 Registriert: 14.02.2005
|
erstellt am: 23. Jul. 2007 10:03 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas, ich schon wieder, mein Block heisst "Blechuebersicht". Wie sieht dann die Programmzeile komplett aus. Sorry, aber ich bin kein grosser LISPler - muss nur eine Kleinigkeit in ein Miniprogramm einfügen. Danke für deine Hilfe Peter 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 ich hab eh keine Probleme damit...
|
erstellt am: 23. Jul. 2007 10:12 <-- editieren / zitieren --> Unities abgeben: Nur für mundal
Ja schön für - ihc bin aber auch kein großer Lispler... und Hellseher auch nicht: Aus diesem Grunde erkläre mal was du meinst mit: Zitat:
...mein Block heisst "Blechuebersicht". Wie sieht dann die Programmzeile komplett aus....
und erkläre auch was du mit: Zitat:
Ich bekomme die AsciiZeichen die einen Punkt beschreiben so her:100,200
Wo bekommst du die so her? Vom Milchhof? Beim Fleischer? ------------------ Grüsse Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mundal Mitglied Techniker
Beiträge: 320 Registriert: 14.02.2005
|
erstellt am: 23. Jul. 2007 10:29 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas, weder vom Fleischer noch vom Milchhof. zu Prob2: die Koordinate wird aus einer Datei gelesen und ist dann als String im LISP vorhanden. Blödsinnigerweise nannte ich das vorhin ASCII-Zeichen. Diesen String möchte ich nun weiterbearbeiten und benötige den Wert des Strings als Punktepaar, sprich Koordinate. Hoffentlich habe ich mich nun verständlicher ausgedrückt. zu Prob1: Ich hätte gerne die komplette Programmzeile für das Auslesen des Einfügepunktes eines Blockes (der den Namen "xyz" hat) wissen. Gruss Peter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 23. Jul. 2007 12:43 <-- editieren / zitieren --> Unities abgeben: Nur für mundal
Hallo Peter, zu Prob 2: versuche mal folgende Funktion einzubinden: Code:
(defun JBf_string_trenzeichen->list (str str_trenn / list_str) (setq str (vl-string-left-trim str_trenn str) str (vl-string-right-trim str_trenn str)) (if (vl-string-search str_trenn str) (progn (while (vl-string-search str_trenn str) (setq list_str (cons (substr str 1 (vl-string-search str_trenn str))list_str) str (vl-string-left-trim str_trenn(substr str(+(vl-string-search str_trenn str)(+ (strlen str_trenn)1)))))) (if (/= str "") (setq list_str (cons str list_str)))) (setq list_str (cons str list_str))) (reverse list_str)
Wenn Du den Koordinatenstring "100,200" z.B. in der Variablen KOORD gespeichert hast, dann rufst Du die Funktion folgendermaßen auf: (JBf_string_trenzeichen->list KOORD ",") Als Rückgabe solltest Du dann (100 200) zu Prob 1: vielleicht solltest Du noch mal erklären, wie Du an die Blöcke herankommst. Wählst Du diese über SSGET aus?? Dann gehe ich davon aus, das Du n Blöcke mit dem Namen "xyz" hast und das Du eine Koordinatenliste zurückerhalten möchtest. vielleicht so:
Code:
(defun koord ( / aws koord_liste n) (princ "\nBitte Blöcke \"xyz\" auswählen:") (if (setq aws(ssget (list (cons 0 "INSERT")(cons 2 "xyz")))) (progn (setq n 0) (repeat (sslength aws) (setq koord_liste (cons (cdr(assoc 10 (entget (ssname aws n))))koord_liste) n (+ n 1)))) (alert "keine Blöcke ausgewählt.")) koord_liste)
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mundal Mitglied Techniker
Beiträge: 320 Registriert: 14.02.2005
|
erstellt am: 23. Jul. 2007 13:22 <-- editieren / zitieren --> Unities abgeben:
Hi Jörn, die Aktion "Block-Einfügepunkt ermitteln" ist Teil eines grossen Lisp-Programmes. Innerhalb dieses Programmes soll die Position eines bereits eingefügten Blockes mit dem (fixen) Namen "xyz" ermittelt werden. Dabei möchte ich den Block "xyz" nicht per Cursor wählen, sondern das Programm soll selbständig dieses Objekt wählen und die Position (Koordinaten) des Blockes "xyz" ermitteln und in eine Programmvariable schreiben. Ich habe jetzt sehr ausführlich geschrieben. Vielleicht kommt es dann so verständlicher rüber. Danke für Deine (Eure) Mühen
Peter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 23. Jul. 2007 13:50 <-- editieren / zitieren --> Unities abgeben: Nur für mundal
Hallo Peter, na wenn es nur einen Block gibt, dann müßte folgendendes funktionieren: Code:
(if (and (setq aws(ssget "_X"(list (cons 0 "INSERT")(cons 2 "xyz")))) (=(sslength aws)1)) (setq koord (cdr(assoc 10 (entget (ssname aws 0))))) (alert "kein Block \"xyz\" vorhanden oder mehr als nur einer!") )
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 23. Jul. 2007 14:55 <-- editieren / zitieren --> Unities abgeben: Nur für mundal
Zitat: ...Dabei möchte ich den Block "xyz" nicht per Cursor wählen...
Grundsätzlich ist zu unterscheiden, ob Du jetzt tatsächlich einen Block (= Blockdefinition) meinst - nur einmal vorhanden - oder Blockreferenzen (Typ "INSERT"). Die sind mit dem Cursor wählbar, allerdings kann es davon mehrere gleichnamige geben. drum die Einschränkung von Jörn Zitat: ...wenn es nur einen Block gibt, dann müßte folgendendes funktionieren:...
------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mundal Mitglied Techniker
Beiträge: 320 Registriert: 14.02.2005
|
erstellt am: 23. Jul. 2007 15:20 <-- editieren / zitieren --> Unities abgeben:
|
mundal Mitglied Techniker
Beiträge: 320 Registriert: 14.02.2005
|
erstellt am: 08. Sep. 2011 10:48 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ich möchte nochmals auf dieses Thema aus 200x zurück ommen. Wie kann ich der Programmzeile: (setq Punkt (cdr (assoc 10 (entget (car (entsel)))))) einen fixen Blocknamen zuweisen. Gruß Peter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 08. Sep. 2011 11:00 <-- editieren / zitieren --> Unities abgeben: Nur für mundal
|
mundal Mitglied Techniker
Beiträge: 320 Registriert: 14.02.2005
|
erstellt am: 08. Sep. 2011 15:08 <-- editieren / zitieren --> Unities abgeben:
|