Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Einfügepunkt(Koordinate) eines Blockes

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Einfügepunkt(Koordinate) eines Blockes (2114 mal gelesen)
mundal
Mitglied
Techniker


Sehen Sie sich das Profil von mundal an!   Senden Sie eine Private Message an mundal  Schreiben Sie einen Gästebucheintrag für mundal

Beiträge: 320
Registriert: 14.02.2005

erstellt am: 23. Jul. 2007 09:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von tunnelbauer an!   Senden Sie eine Private Message an tunnelbauer  Schreiben Sie einen Gästebucheintrag für tunnelbauer

Beiträge: 7085
Registriert: 13.01.2004

ich hab eh keine Probleme damit...

erstellt am: 23. Jul. 2007 09:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für mundal 10 Unities + Antwort hilfreich

Zu 1.)

Code:

(setq Punkt (cdr (assoc 10 (entget (car (entsel))))))

Zu 2.)

Was heisst ASCII-Zeichen? ABC? Oder doch 123?

------------------
Grüsse

Thomas

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

mundal
Mitglied
Techniker


Sehen Sie sich das Profil von mundal an!   Senden Sie eine Private Message an mundal  Schreiben Sie einen Gästebucheintrag für mundal

Beiträge: 320
Registriert: 14.02.2005

erstellt am: 23. Jul. 2007 10:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi ,
danke für die schnelle Antwort.
Ich bekomme die AsciiZeichen die einen Punkt beschreiben so her:

100,200

Gruss
Peter

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

mundal
Mitglied
Techniker


Sehen Sie sich das Profil von mundal an!   Senden Sie eine Private Message an mundal  Schreiben Sie einen Gästebucheintrag für mundal

Beiträge: 320
Registriert: 14.02.2005

erstellt am: 23. Jul. 2007 10:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von tunnelbauer an!   Senden Sie eine Private Message an tunnelbauer  Schreiben Sie einen Gästebucheintrag für tunnelbauer

Beiträge: 7085
Registriert: 13.01.2004

ich hab eh keine Probleme damit...

erstellt am: 23. Jul. 2007 10:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für mundal 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von mundal an!   Senden Sie eine Private Message an mundal  Schreiben Sie einen Gästebucheintrag für mundal

Beiträge: 320
Registriert: 14.02.2005

erstellt am: 23. Jul. 2007 10:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von joern bosse an!   Senden Sie eine Private Message an joern bosse  Schreiben Sie einen Gästebucheintrag für joern bosse

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 23. Jul. 2007 12:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für mundal 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von mundal an!   Senden Sie eine Private Message an mundal  Schreiben Sie einen Gästebucheintrag für mundal

Beiträge: 320
Registriert: 14.02.2005

erstellt am: 23. Jul. 2007 13:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von joern bosse an!   Senden Sie eine Private Message an joern bosse  Schreiben Sie einen Gästebucheintrag für joern bosse

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 23. Jul. 2007 13:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für mundal 10 Unities + Antwort hilfreich

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.


Sehen Sie sich das Profil von Geos an!   Senden Sie eine Private Message an Geos  Schreiben Sie einen Gästebucheintrag für Geos

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für mundal 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von mundal an!   Senden Sie eine Private Message an mundal  Schreiben Sie einen Gästebucheintrag für mundal

Beiträge: 320
Registriert: 14.02.2005

erstellt am: 23. Jul. 2007 15:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Super,
es hatte so geklappt wie ich es wollte.
Herlichen Dank Björn 


Gruss
Peter

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

mundal
Mitglied
Techniker


Sehen Sie sich das Profil von mundal an!   Senden Sie eine Private Message an mundal  Schreiben Sie einen Gästebucheintrag für mundal

Beiträge: 320
Registriert: 14.02.2005

erstellt am: 08. Sep. 2011 10:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 08. Sep. 2011 11:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für mundal 10 Unities + Antwort hilfreich

Du willst ja den Einfügepunkt der Blockreferenz haben .. und da kann es ja mehrere eines Blockes geben .. also auch mehrere Einfügepunkte ...
(setq PUNKTLISTE nil)
(setq BLOCKNAME "TEST")
(if(setq AWS(ssget "_x" '(list '(0 . "INSERT")(cons 2 BLOCKNAME)(cons 410 (getvar "CTAB")))))
  (progn
    (setq INDEX -1)
    (repeat(sslength AWS)
      (setq Punktliste (cons (cdr(assoc 10 (entget(ssname AWS(setq INDEX(1+ INDEX)))))) PUNKTLISTE)
    )
  )
)

und wenn du sicher bist, das blloß 1 Insert existiert und du den Punkt haben willst noch
(setq PUNKT(car PUNKTLISTE))


P.S. alles ungetestet hier reingekloppt .. also auf Klammern usw. noch mal gucken


------------------
  - 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

mundal
Mitglied
Techniker


Sehen Sie sich das Profil von mundal an!   Senden Sie eine Private Message an mundal  Schreiben Sie einen Gästebucheintrag für mundal

Beiträge: 320
Registriert: 14.02.2005

erstellt am: 08. Sep. 2011 15:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke es hat geklappt - lasse.
Ich musste lediglich eine Klammer versetzen und ein Listenzeichen entfernen.

Gruß
Peter

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz