Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Polylinien abhängig vom Startpunkt versetzen

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:  Polylinien abhängig vom Startpunkt versetzen (3036 mal gelesen)
m.hacker
Mitglied


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

Beiträge: 8
Registriert: 26.08.2015

erstellt am: 28. Aug. 2015 12:21    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 im Forum leider nichts gefunden.
Ein Paar Beiträge klangen ähnlich, haben aber leider nicht zum Ziel geführt.

Mein Problem ist Folgendes.

Ich habe mehrere Polylinien.
Ich wähle alle Polylinien aus die ich versetzten möchte.
Dann sollen diese abhängig vom Startpunkt versetzt werden.

vereinfachtes Beispiel:
Wenn die Polylinie von Nord nach Süd gezeichnet ist -> Versatz erfolgt nach Westen.
Ist die Polylinie von Süd nach Nord gezeichnet -> Versatz erfolgt nach Osten.
Also eigentlich immer rechts von der Polylinie.

Bei geschlossenen Polygonen. Startpunkt und Endpunkt ist identisch. Das Polygon wird im Uhrzeigersinn gezeichnet versatz nach innen. Gegen den Uhrzeiger versatz nach außen.

Ich weis nicht wie ich es angehen soll, oder ob es überhaupt möglich ist so etwas umzusetzen.

Ich hoffe Ihr könnt mir weiterhelfen.

[Diese Nachricht wurde von m.hacker am 31. Aug. 2015 editiert.]

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 28. Aug. 2015 12:33    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 m.hacker 10 Unities + Antwort hilfreich

Auf das Versetzen gehe ich mal nicht ein, ich denke du nutzt dafür sowieso den AutoCAD -Befehl?

Ohne eine Ahnung zu haben "wo du stehst" ist es schwierig dich abzuholen?
Ist dir bekannt das es verschiedene "Polylinien" Objekte gibt,
das Polylinien auch die Eigeschaft"geschlossen" haben(in dem Fall hätte deine Polylinie einen unnötigen letzten Scheitelpunkt).

Zu der Berechnung von Links/Rechts usw. suche nach Seiten im www zur Berechnung "Punkt in Polylinie" / Point inside polyline.
Darüber kommst du zu allen Informationen, bedenke dabei das es weniger um die Programmiersprache, als um Mathe geht.
Also offene und geschlossene PL usw. ist egal, wenn man mit dem Suchbegriff startet kommt man ohnehin zu allmöglichen Artikeln.

Das Thema ist von Null an gestartet erst mal recht komplex und da ich gerade mit dem Handy unterwegs bin suche/poste ich jetzt keine Links, das macht mit dem Tickerding nicht so viel Spaß 

Nehme dir EINE der Aufgaben vor, lese dich ein und versuche es in Lisp umzusetzen, wenn es nicht weiter geht kannst du hier die konkrete Aufgabe und  Lösungsansatz Posten, es hilft sicher wer weiter.

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

m.hacker
Mitglied


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

Beiträge: 8
Registriert: 26.08.2015

erstellt am: 28. Aug. 2015 13: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

Hallo,
wo ich stehe?
Natürlich ganz am Anfang!
Polylinien sind nicht immer geschlossen, kann aber vorkommen.
Die Linien müssen immer 1.00m versetzt werden

Mir schwebt folgende Lösung vor.

Alle Polylinien wählen die versetzt werden sollen.
  Dann müsste für jede Polyline dieser Ablauf passieren.
    1. Startkoordinaten (A) der Polylinie auslesen
    2. Erste Segmentkoordinate(E) der Polyline auslesen
    3.Linie zeichnen auf neuem Layer "temp" von A zu E mit einer Länge 1/2 AE
    4.Linie drehen mit Basis A und Winkel 1 Grad
    5.Endpunkt der gedrehten Linie auslesen.
        Da die Linie gedreht wurde, sollte sich dieser Endpunkt immer Rechts von der Polylinie befinden??
    6.Ausgangspolygon versetzen mit Abstand 1.00m und bei Seite wählen sollte dann der Endpunkt der gedrehten Linie gesetzt werden.
    7.Linie auf Layer temp löschen


Ist einer von den Schritten in AutoCAD nicht möglich?
Und da ich nicht besoders gut bin in LISP, bin ich für jede Hilfe dankbar.

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 28. Aug. 2015 14:59    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 m.hacker 10 Unities + Antwort hilfreich

Ui,
dann lassen wir mal Koordinatensysteme weg und gehen auf deine Vorstellung ein:

Das Linienobjekt wird nicht benötigt, mit der Lispfunktion POLAR kommt man auch zu dem Punkt und erspart sich erstellen und löschen des unnötigen Objektes.

(alerdings wirst du schnell sehen das in Acad die Winkel nicht in Dezimalgrad hinterlegt und verarbeitet werden)

Immer um 1Grad drehen, dann ist es immer LINKS in Polylinienrichtung, aber nicht unbdingt, denn es kommt ja darauf an wo sich die anderen Punkte befinden, dein so ermittelter Punkt kann also je nach Polylinienverlauf mal auf der einen, mal auf der anderen Seite liegen.


Du hast eine feste Vorstellung davon wie deine Polylinien aussehen, programmieren würde man aber so dass möglichst alle Eventualitäten berücksichtigt werden.
Darunter würden dann sogar Bögensegmente fallen, die PLs nunmal haben können.

Ich denke ich erkenne zu viele Fallen, so kann ich dir ohne fertigen Code kaum helfen.

Fange doch ruhig an wie du es dir denkst, beschränke dich dabei zunächst auf LWPolylines, zum testen nimmst du erst einmal eine und list den ersten und zweiten Scheitelpunkt aus.
Dazu findest du auch schon fertigen Code für alle Scheitelpunkte, mit NTH 0 und 1 kommst du dann an die Werte.

Auf gehts..

(auf deine Frage hin: Man kann alles mit Lisp umsetzen)

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 28. Aug. 2015 19:07    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 m.hacker 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von m.hacker:
     3.Linie zeichnen auf neuem Layer "temp" von A zu E mit einer Länge 1/2 AE
     4.Linie drehen mit Basis A und Winkel 1 Grad
     5.Endpunkt der gedrehten Linie auslesen.

Das ist Kinderkram. Wer CAD programmiert, sollte solche Punkte auch errechnen können.

Und damit das besonders einfach ist, hat Autodesk extra Funktionen dafür bereit gestellt. Kennst Du den GeomCal Rechner in AutoCAD? Onlinehilfe nach CAL bzw KAL durchsuchen hilft Dir weiter.

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 28. Aug. 2015 22: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 Nur für m.hacker 10 Unities + Antwort hilfreich

Am Anfang stand bei jedem ein ^C^C_.-PURGE;_all;*;_n;_.ZOOM;_e;_.QSAVE oder (sssetfirst nil (ssget '((0 . "INSERT")))) sofern man vom CAD zum programmieren kam.

Und da auch der Geometrie-Rechner kein "Links von Polylinie" kennt, heißt es erst mal pauken, lesen, lernen. Dank des Internets heute zum Glück viel einfacher wie früher, alle anderen Hilfen wie Menschen und Fachliteratur steht einem ja nach wie vor zusätzlich zur Verfügung.

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 28. Aug. 2015 22:59    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 m.hacker 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadffm:
Und da auch der Geometrie-Rechner kein "Links von Polylinie" kennt,

Oh doch, das kennt der GeomCal. Und heißt dort wie in der Mathematik auch "Normalvektor".

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 29. Aug. 2015 00: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 Nur für m.hacker 10 Unities + Antwort hilfreich

Oh nein, aus gleichem Grund den du angeführt hast, es heißt anders.
Aber jetzt hast einen Begriff genannt mit dem der TE, zusammen mit zuvor genannten KAL, weiterkommen kann - meiner Meinung nach.
Vielleicht schätze ich den TE an dieser Stelle auch falsch und du besser ein, da bin ich raus.

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 29. Aug. 2015 08: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 m.hacker 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadffm:
Oh nein, aus gleichem Grund den du angeführt hast, es heißt anders

Nein, ein Normalvektor heißt auch bei GeomCal Normalvektor. Es wäre je merkwürdig, wenn das anders wäre. In der Online-Hilfe zu CAL heißt das Thema folgerichtig auch "Calculate a Normal Vector".

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

Meldin
Mitglied



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 29. Aug. 2015 09: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 Nur für m.hacker 10 Unities + Antwort hilfreich

Also ihr streitet euch hier über Sachen ohne zu wissen wo der TE steht. Und bei der Fragestellung des TE gehe ich ganz stark davon aus das Ihm eure Begriffe erstmals nicht weiterhelfen und würde in diesem Stadium der vorliegenden Infos hier erstmals von "polar" sprechen denn für so etwas gibt es den Befehl.

@m.hacker also nach deinen Beschreibungen solltest du wohl so in der Art gestartet sein
(setq AuswahlSS (ssget '((0 . "LWPOLYLINE"))))
und wie sieht es dann bei dir weiter aus? Damit wir sehen wo es klemmt. 

------------------
Gruß Wolfgang

Alias: Rabbit007 und Wolli1

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 29. Aug. 2015 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 Nur für m.hacker 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Meldin:
Also ihr streitet euch hier über Sachen ohne zu wissen wo der TE steht. Und bei der Fragestellung des TE gehe ich ganz stark davon aus das Ihm eure Begriffe erstmals nicht weiterhelfen und würde in diesem Stadium der vorliegenden Infos hier erstmals von "polar" sprechen denn für so etwas gibt es den Befehl.

@m.hacker also nach deinen Beschreibungen solltest du wohl so in der Art gestartet sein
(setq AuswahlSS (ssget '((0 . "LWPOLYLINE"))))
und wie sieht es dann bei dir weiter aus? Damit wir sehen wo es klemmt. 


Hier lesen und diskutieren ja auch andere Leute miteinander als nur der Threadersteller. Wenn aus dem Forum allerdings eine Expertenfragerunde werden soll, an die sich jeder wenden kann, dann wäre das was anderes. Ich wäre dann raus, weil ich solche Dienste nur gegen Lohn anbiete.

Ich vermute sehr stark, dass jeder mit mindestens Realschulabschluss schon mal was von Normalvektoren gehört hat. Ich gehe deshalb davon aus, dass es sehr viel mehr Leute gibt, die mittels herkömmlicher Mathematik das Problem lösen können, als es Menschen gibt, die CAD-Systeme bedienen können.

Wo der Thread-Ersteller persönlich steht und über welche Kenntnisse er verfügt, kann nur er selbst uns sagen. Dazu ist ja dieses Forum da, dass er dann nochmals rückfragen kann, wenn er mit einer Antwort nichts anzufangen weiß. Ich selbst neige dazu, Fragestellern keine direkt funktionierende Lösung mitzuteilen, sondern will des Lerneffekts wegen die Leute selbst auf den richtigen Pfad führen. Dazu gebe ich dann die nötigen Stichpunkte, über die ein Fragesteller dann nachdenken muss. Wenn er nicht weiter kommt, kann er ja nochmals nachfragen. Nur so werden aus Fragestellern zukünftige Ratgeber.


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

m.hacker
Mitglied


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

Beiträge: 8
Registriert: 26.08.2015

erstellt am: 29. Aug. 2015 09: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

Zitat:
Immer um 1Grad drehen, dann ist es immer LINKS in Polylinienrichtung, aber nicht unbdingt, denn es kommt ja darauf an wo sich die anderen Punkte befinden, dein so ermittelter Punkt kann also je nach Polylinienverlauf mal auf der einen, mal auf der anderen Seite liegen.

Verstehe ich nicht. Mir ist egal wo sich der rest von der Polylinie befindet.
Start und erstes Segment somit ist die Richtung vorgegeben.
Bei einer Drehung, mit immer dem selben Winkel, habe ich den neuen Punkt immer abhängig vom Verlauf der ersten beiden Segmente der Polylinie auf der selben Seite.
Da kann das Polygon sonst wie aussehen, ne Schnecke sein oder Bögen haben. Solange ich nur das erste Segment betrachte. Versetzt wird dann das ganze Polygon.

Aber das drehen jetzt mal weglassen.
Wenn das so wie archtools beschreibt, mit Vektoren geht, dann habe ich ja einen Richtungsvektor. (Startsegment und erstes Segment)
Davon den Normalvektor berechnen.
Somit hab ich meine Seite auf die versetzt werden soll.

Zitat:
Das ist Kinderkram. Wer CAD programmiert, sollte solche Punkte auch errechnen können

Das war eine sehr netter Anfang. Und nein das mache ich normalerweise nicht. Trotzdem kann ich solche Punkte mit Mathe berechnen. Ich wusste als "doofer Anwender" nicht, das AutoCAD das kann. Alle Foren der Welt habe ich noch nicht durch.
Nicht vom Namen täuschen lassen der ist echt. Trotzdem Danke für die Hinweise.

Natürlich werde ich Programmieren, wenn ich sehe das es auch einen Sinn hat und ich das Problem lösen kann.

Bis jetzt habe ich eine Liste von Polygonen.
Das ist noch nicht sehr spannend.
Weil ich erst nach einem Lösungsansatz gesucht habe.
Sobald ich "etwas" vorweisen kann kommt das hier rein.

[Diese Nachricht wurde von m.hacker am 29. Aug. 2015 editiert.]

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

Meldin
Mitglied



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 29. Aug. 2015 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 Nur für m.hacker 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von m.hacker:

Natürlich werde ich Programmieren, wenn ich sehe das es auch einen Sinn hat und ich das Problem lösen kann.


Dein Problem wirst du mit einer Programmierung bestimmt lösen können also kannst du getrost damit Anfangen.

------------------
Gruß Wolfgang

Alias: Rabbit007 und Wolli1

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 29. Aug. 2015 10:04    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 m.hacker 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von m.hacker:
[i]
Bis jetzt habe ich eine Liste von Polygonen.
Das ist noch nicht sehr spannend.
Weil ich erst nach einem Lösungsansatz gesucht habe.
Sobald ich "etwas" vorweisen kann kommt das hier rein.
i]

Noch ein Hinweis: der Normalvektor alleine reicht nicht aus, weil die Polylinie ja im nächsten Segment wieder zurück springen kann. Dann ist es fraglich, ob der mittels Normalvektor links oder rechts neben dem ersten Segment stehende Konstruktionspunkt innerhalb oder außerhalb der PLinie steht. Du musst da also noch prüfen, ob die Linie vom Anfangspunkt der Plinie zum Konstruktionspunkt die Plinie schneidet. Dieses Problem musst Du bei der konstruktiven Lösung´, bei der Du eine Hilfslinie erzeugst, ja auch klären.

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 29. Aug. 2015 12: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 Nur für m.hacker 10 Unities + Antwort hilfreich

Hallo m.hacker,
viellecht reicht ja auch schon die vorgefertigte Offset Methode (ActiveX) für deine Zwecke.
ich hab das mal in eine einfache Lisp Routine (ohne Error Handling) gepackt zum Test.


Code:
(vl-load-com)
(defun C:UHPLOFFSET ( / dist cnt obj sset)
  (Prompt "Gleichzeitiges Versetzen nach rechts von mehreren Polylinien - Udo Hübner 8/2015")
  (initget 6) ; Abfrage Versatzabstand > 0
  (if (setq dist (getdist (strcat "\nVersatzabstand eingeben: <" (rtos (getvar "OFFSETDIST")) ">")))
    (setvar "OFFSETDIST" dist)
  )
  (Prompt "\nPolylinien wählen:")
  (setq sset (ssget (list (cons 0 "LWPOLYLINE"))))
  (if (> (setq cnt (sslength sset)) 0) ; wenn mehr als 0 Polylinien gewählt wurden
    (progn
      (while (>= (setq cnt (1- cnt)) 0)
(setq obj (vlax-ename->vla-object (ssname sset cnt)))
(vla-offset obj (getvar "OFFSETDIST")) ; versetzen
      )
    )
  )
)

------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

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

m.hacker
Mitglied


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

Beiträge: 8
Registriert: 26.08.2015

erstellt am: 31. Aug. 2015 08:59    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-Huebner,
das LISP macht genau das, was ich mir vorgestellt habe.
Ich muss es jetzt noch genauer testen, aber erste versuche waren erfolgreich.
Ich bin echt begeistert. DANKE!

Ich würde es jetzt nur noch gerne verstehen.

Die Linien werden in sset als "main entities only" gespeichert
Beispiel <Selection set: 924> oder <Selection set: 8ab>

Versetzt wird ja "obj" und mit (setq obj (vlax-ename->vla-object (ssname sset cnt))) wird pro Linie ein vla object erzeugt das versetzt werden kann?

Die Abarbeitung der Schleife ist mir noch nicht ganz klar.
Genauer wie die einzelen Elemente erkannt und abgearbeitet werden.
Den "cnt" Counter verstehe ich. sslength sset gibt die Anzahl der Elemente wieder.

[Diese Nachricht wurde von m.hacker am 31. Aug. 2015 editiert.]

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

m.hacker
Mitglied


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

Beiträge: 8
Registriert: 26.08.2015

erstellt am: 31. Aug. 2015 17: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

Code:

  (command "_-layer" "_make" "LINIE1_BGL" "_color" "T" "255,0,0" "" "L" "CONTINUOUS" "" "")
  (setvar "OFFSETDIST" 1)
  (setq sset (ssget "_X" (list (cons 0 "LWPOLYLINE")(cons 62 1)))) ;(cons 62 1) filtert zusätzlich nach Farbe rot
  (if (> (setq cnt (sslength sset)) 0) ; wenn mehr als 0 Polylinien gewählt wurden
    (progn
      (while (>= (setq cnt (1- cnt)) 0)
        (setq obj (vlax-ename->vla-object (ssname sset cnt)))
        (vla-offset obj (getvar "OFFSETDIST")) ; versetzen
        (vla-put-layer (vlax-ename->vla-object (entlast)) "LINIE1_BGL") ;legt das neu erzeugte Element auf den oben erstellten Layer
      )
    )
  )

Ich wollte nur sagen das es funktioniert.
(setq obj (vlax-ename->vla-object (ssname sset cnt)))  hab ich jetzt auch verstanden.

Läuft und bis jetzt habe ich keinen Fehler gefunden beim ausführen.
Und das oben ist das umgebaute LISP von CAD-Huebner so wie ich es verwende.

[Diese Nachricht wurde von m.hacker am 31. Aug. 2015 editiert.]

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 31. Aug. 2015 19:13    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 m.hacker 10 Unities + Antwort hilfreich

Hier noch ein paar Hinweise zur Optimierung:
vla-offset gibt ein Array aller erzeugten Versatzkonturen zurück, das ist besser als (entlast). Das können bei bestimmten Formen durchaus keine, aber auch mehrere Polylinien sein. Den Aufruf von LAYER würde ich für neue AutoCAD Funktionen besser mit commadn-s einleiten und die Optionen dann durchgängig mit _ internationalisieren.
Ansonsten kann man einen Layer statt mit commadn-s auch mit  (vla-add layers ... oder  (entmake ... erzeugen.

------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

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

m.hacker
Mitglied


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

Beiträge: 8
Registriert: 26.08.2015

erstellt am: 01. Sep. 2015 10:35    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

Code:

  (entmake
    (list (cons 0 "LAYER")
      (cons 100 "AcDbSymbolTableRecord")
      (cons 100 "AcDbLayerTableRecord")
      (cons 2 "LINIE_BGL") ; Layername
      (cons 70 0) ; 0 / 1 an / aus
      (cons 62 1) ; Farbe
      (cons 6 "CONTINUOUS") ; Linientyp "continuous"
    )
  )

geht natürlich auch ... persönlich finde ich aber command besser.

Code:

(command-s "_.Layer" "_Make" "LINIE_BGL" "_Color" "1" "" "_LType" "Continuous" "" "")


ist das jetzt alles international?

entlast habe ich verwendet weil das laut Autodesk das letzte Objekt in der Zeichnung liefert das nicht gelöscht wurde. Ich dachte das geht so.

Nur die versetzten Elemente auf den neuen Layer zu schieben bekomm ich ohne entlast nicht hin.

Code:

        (vla-put-layer (vla-offset obj (getvar "OFFSETDIST")) "LINIE_BGL")

geht nicht, wär auch zu einfach gewesen :/

und eine kopie von (vla-offset obj) so wie ähnlich wie bei


https://forums.autodesk.com/t5/forums/forumtopicprintpage/board-id/130/message-id/319083/print-single-message/false/page/1

liefert beides ; Fehler: Fehlerhafter Argumenttyp: VLA-OBJECT

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 01. Sep. 2015 20:26    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 m.hacker 10 Unities + Antwort hilfreich


UHMOFFSET.LSP


UH-OFFSETmultiple.jpg

 
Die Rückgasbe kann man so auswerten:
Code:
(foreach offset-Obj (vlax-safearray->list (vlax-variant-value OffsetObjs))
  (vla-put-color offset-Obj acByLayer) ; 'acByLayer =  256 = Farbe auf vonlayer zurücksetzen
  (vla-put-layer offset-Obj "LINIE1_BGL") ;Layer wechseln
)

Ich hab das Ganze mal etwas allgemeingültiger zur freien Verwendung gestaltet:


------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

[Diese Nachricht wurde von CAD-Huebner am 01. Sep. 2015 editiert.]

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

m.hacker
Mitglied


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

Beiträge: 8
Registriert: 26.08.2015

erstellt am: 02. Sep. 2015 15:54    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

Vielen Dank für die großartige Unterstützung!!

Das Forum und die USER sind echt super!
Hat mir sehr weitergeholfen.

Großes Lob

Danke

Gruß

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