Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Punkte von Linie bzw. Polylinie

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:  Punkte von Linie bzw. Polylinie (1176 mal gelesen)
Stefan Michel
Mitglied



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

Beiträge: 40
Registriert: 01.06.2006

erstellt am: 06. Mrz. 2008 15:06    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,

ich hab da mal eine Frage zu Lisp. Immer wieder passiert es mir beim Programmieren, dass ich vor folgendem Problem stehe. Ich wähle ein Objekt (in diesem Fall eine Linie) mit ENTSEL und dann brächte ich den Start- sowie den Endpunkt. Den ersten Punkt kriege ich ja mit ASSOC 10 raus, aber wie bekomme ich den zweiten. Im gleichen Zug die Frage, wie man das mit einer Polyline macht welche ja theoretisch undendlich viele Daten mit dem Gruppencode 10 haben könnte.

In meinem Fall möchte ich über den Start- und den Endpunkt den Mittelpunkt der Linie berechnen. Würdet Ihr den Mittelpunkt auch berechnen oder würdet Ihr irgendwas mit den Objektfängen programmieren? Ich bin eigentlich etwas gegen die Objektfänge weil ich öfter das Gefühl habe, dass die teilweise nicht ganz so sauber greifen.

DANKE vorab

Gruß

Stefan

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: 06. Mrz. 2008 15:17    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 Stefan Michel 10 Unities + Antwort hilfreich

1. (cdr(assoc 11 (entget LINEOBJ)))
2.(mapcar 'cdr (vl-remove-if-not '(lambda(X)(=(car X)10)) (entget LWPLOBJ)))

Hinweis: es gibt aber noch 2d-Ps und 3D-Pls, die ihre Stützpunktkoordinaten in Vertexobjekten speichern


Und wozu willst du den Mittelpunkt berechenen? Das war aus deinem Posting nicht ersichtlich..

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

Stefan Michel
Mitglied



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

Beiträge: 40
Registriert: 01.06.2006

erstellt am: 06. Mrz. 2008 15:31    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 CADmium,

na dass ging ja fix.... kurz nachdem ich den Thread aufgemacht habe, habe ich das mit
dem ASSOC 11 auch gesehen, ich dachte bei linien sind die beiden punkte beide als gruppencode
10 gespeichet.
Bei der Lösung für die Polylinien verstehe ich ja nur Bahnhof, ich werds mir aber mal genau anschauen.

Wie schauts aus mit dem Mittelpunkt einer Linie. Die theoretische Berechnung ist mir klar, allerdings
erscheint mir das extrem aufwendig. ich hätte das jetzt mal so gemacht:

(setq kantlinie (entget(car(entsel))))

(setq p1 (cdr (assoc 10 kantlinie)))
(setq p2 (cdr (assoc 11 kantlinie)))

(setq mp (polar P1 (angle p1 p2) (/ (distance p1 p2) 2)))

Was haltet Ihr davon?

DANKE Gruß

Stefan

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: 06. Mrz. 2008 15:39    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 Stefan Michel 10 Unities + Antwort hilfreich

(setq mp (mapcar '*(mapcar '+ P1 P2)'(0.5 0.5 0.5)))

find ich besser

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

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

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: 06. Mrz. 2008 15: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 Nur für Stefan Michel 10 Unities + Antwort hilfreich

Hi Stefan,
ich würd's so machen:
(mapcar '/ (mapcar '+ p1 p2) '(2 2 2))
aber Deine Lösung geht auch.

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



BTV / Projektingenieur Automotive Powertrain - Motor, Getriebe, Triebstrang, Batterie (m/w/d)
MITTELSTÄNDISCH ? PRAGMATISCH ? LEIDENSCHAFTLICH

ACONEXT ist Kompetenz in Technologieberatung, IT und Engineering. Gemeinsam arbeiten wir an den technischen Innovationen von morgen. Mit Leidenschaft für Technik und Technologie entwickeln wir mit unseren über 600 Mitarbeiterinnen & Mitarbeitern neue Produktgenerationen für die Automobil- und Luftfahrtindustrie. Wir sind am Markt etabliert, langfristige Projekte und Geschäftsbeziehungen zeichnen uns aus....
Anzeige ansehenProjektmanagement
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: 06. Mrz. 2008 15:47    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 Stefan Michel 10 Unities + Antwort hilfreich

Hallo Stefan,
ich kann mich CADmium und Henning nur anschließen, allerdings würde ich eine extra Funktion für diese Aufgabe schreiben:
Code:

(defun mittelpunkt ( / obj)
(if(and(setq obj(car(entsel)))
      (=(cdr(assoc 0 (entget obj)))"LINE"))
  (mapcar '(lambda(A)(/ A 2.0)
            (mapcar '+ (cdr(assoc 10 obj)(cdr(assoc 11 obj))))))))

diese Funktion kannst Du dann immer aufrufen, wenn Du einen Mittelpunkt einer Linie brauchst. Wenn keine Linie gewählt wird, wird nil zurückgegeben.
z.B.
(if (setq mp(mittelpunkt))
  (machwas_mit_dem Mittelpunkt)
  (alert "Es wurde keine Linie ausgewählt."))

------------------
viele Grüße

Jörn

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