Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Polylinien Segmente

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 Segmente (2668 mal gelesen)
cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 13. Dez. 2011 14: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

Ich versuche gerade einen Code zu entschlüsseln, der mir die Winkel der Segmente einer Polylinie ausgibt.

Code:

(setq curve (car (entsel)))
  (setq idx 0)
  (repeat (fix (1- (vlax-curve-getendparam curve)))
    (setq ang (angle '(0 0) (vlax-curve-getFirstDeriv curve idx))) ; (+ idx 0.005)
    (print "Angle of segment #")
    (princ idx)
    (princ " is ")
    (princ ang)
    (princ " radians.")
    (setq idx (1+ idx))
  )
  (princ)

Beziehen sich die Winkel auf den Punkt 0,0? Weil ich nach der Formel 180/pi*rad-wert auf einen anderen Winkel in Grad komme

Bsp. 0.6417 rad = 36.7667 grad

------------------
Gruss Dirk

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: 13. Dez. 2011 14: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 Nur für cadplayer 10 Unities + Antwort hilfreich

Der Code gibt ja kein DezimalGrad aus, also ist klar das der Dezimalgrad-Wert anders ist  

F1 => angtos

(angtos ang 0 2)


<Formatierung geändert>
------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

[Diese Nachricht wurde von cadffm am 13. Dez. 2011 editiert.]

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: 13. Dez. 2011 14:27    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 cadplayer 10 Unities + Antwort hilfreich


Tangetial.jpg

 
ich hatte mal ein Tool, das eine PL auf tangentiale Übergänge überprüft und den eingeschlossenen Winkel zwischen den einzelnen Segmenten ausgibt.

Ansonsten...
vlax-curve-getFirstDeriv  liefert die 1.Ableitung der Curve im Punkt ... das ist der Anstieg( im xy-System gegenüber der X-Achse)

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

Theodor Schoenwald
Ehrenmitglied



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

Beiträge: 1672
Registriert: 16.04.2002

erstellt am: 13. Dez. 2011 20:28    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 cadplayer 10 Unities + Antwort hilfreich

Hallo Thomas,

hast oder findest Du das Tool noch, es würde mich interessieren.

Gruß
Theodor

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: 14. Dez. 2011 14:42    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 cadplayer 10 Unities + Antwort hilfreich

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 16. Dez. 2011 11:58    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


symb.jpg

 
Handelt sich nicht ums Thema - was bedeutet denn, wenn der Cursor mit dem Symbol erscheint...
Man muss dann die Zeichnung erst zwischenspreichern, dann verschwindet es wieder.
Wenn man dann wieder zwischen Zeichnung und vlide-Editor hin und her wechselt kommt das Symbol wieder.

Gibt es eine Erklärung dafür

------------------
Gruss Dirk

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: 16. Dez. 2011 17: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 Nur für cadplayer 10 Unities + Antwort hilfreich

Hallo,
das geschieht meistens dann wenn irgend etwas in abfrage steht oder ich meine auch als warte Zeichen wenn etwas noch bearbeitet wird, z.B. gebe in Editor mal (getpoint) ein und führe es aus. Der Editor wird dann automatisch in den ACAD Arbeitsbereich wechseln um da auf deine Eingabe zu warten. Wechsel nun ohne eine Eingabe zu machen mit Hilfe der Task-leiste wider in den Editor dann wirst du sehen das der Cursor im Editor dieses Symbol aufweist. Abbrechen kannst du es dann nur wenn du in ACAD eine Eingabe machst oder ESC drückst.
Daher denke ich das irgendetwas in irgendwelchen Codezeilen hängt.

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

Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. 

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 20. Dez. 2011 12: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

Gibt es eine Funktion, die mir entlang einer Polylinie die Entfernung zwischen einem gewählten Punkt und dem Polylinienanfang ausgibt ?

------------------
Gruss Dirk

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 20. Dez. 2011 12: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 Nur für cadplayer 10 Unities + Antwort hilfreich

man kann sich recht schnell was bauen

vlax-curve-... sollte dich zur Lösung führen...

vlax-curve-GetDistAtPoint
vlax-curve-getClosestPointTo
vlax-curve-getStartParam
vlax-curve-getEndParam
vlax-curve-getDistAtParam

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."

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: 20. Dez. 2011 12: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 Nur für cadplayer 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadplayer:
Gibt es eine Funktion, die mir entlang einer Polylinie die Entfernung zwischen einem gewählten Punkt und dem Polylinienanfang ausgibt ?



http://www.d-tools.eu/Asptest/Tools.aspx  Tool 71  ??

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 20. Dez. 2011 13:56    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

(setq ent (car (entsel))
      obj (vlax-ename->vla-object ent)
      stpt (vlax-curve-getStartPoint obj)
      ept (vlax-curve-getendPoint obj)
      plpt (vlax-curve-getClosestPointTo obj (getpoint "\nSelect point on line\n"))
      dist (vlax-curve-getDistAtParam obj xxx)
      )
(princ dist)

Ich weiss eben nicht weiter, ist mein Gedankengang bis hierher richtig?

------------------
Gruss Dirk

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: 20. Dez. 2011 14:09    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 cadplayer 10 Unities + Antwort hilfreich

(setq ent (car (entsel))
      obj (vlax-ename->vla-object ent)
      stpt (vlax-curve-getStartPoint obj)
      ept (vlax-curve-getendPoint obj)
      plpt (vlax-curve-getClosestPointTo obj (getpoint "\nSelect point on line\n"))
      param (vlax-curve-getParamatPoint obj plpt)
      dist (vlax-curve-getDistAtParam obj param)
)

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 20. Dez. 2011 14:10    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 cadplayer 10 Unities + Antwort hilfreich

naja fast
versuch mal

Code:
(vlax-curve-getDistAtPoint (vlax-ename->vla-object (car (entsel))) (getpoint))

(ungetestet)

so nun will ich aber Abstand von Punkt auf Objekt bis Punkt auf Objekt sehen 

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 20. Dez. 2011 14:46    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

mmmh nur knapp verfehlt - Danke zum x-wiederholtem Mal.

------------------
Gruss Dirk

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: 20. Dez. 2011 17: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 Nur für cadplayer 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Dorfy:

so nun will ich aber Abstand von Punkt auf Objekt bis Punkt auf Objekt sehen  


>>Klick<<

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 21. Dez. 2011 10:25    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

Sorry hab´s erst jetzt als Aufforderung verstanden

Sicher kann man hier noch einiges kürzen

Code:

(defun PolylinePickpoint ()
  (setq obj (vlax-ename->vla-object (car (entsel))))
  (setq plpt1 (getpoint "\nPick point on line! "))
  (setq dis (vlax-curve-getDistAtPoint obj plpt1))
  )
 
(defun PolylineDistance ()
  (setq obj (vlax-ename->vla-object (car (entsel))))
  (setq plpt1 (getpoint "\nPick point 1 on line! "))
  (setq plpt2 (getpoint "\nPick point 2 on line! "))
  (setq a1 (vlax-curve-getDistAtPoint obj plpt1))
  (setq a2 (vlax-curve-getDistAtPoint obj plpt2))
  (setq dis (- a2 a1))
  )
(defun c m () ; measure polyline
  (initget "plp pld")
  (setq aw (getkword "\nDistance from 0 [plp] or Distance from 2 points on line [pld] ? "))
  (cond
    ((= aw "plp")
    (PolylinePickpoint)
    (command "_.text" "s" "txt" plpt1 1 ""  (rtos dis 2 2))
    )
    ((= aw "pld")
    (PolylineDistance)
    (command "_.text" "s" "txt" plpt1 1 ""  (rtos dis 2 2))
    )
    )
  )
(princ)
 

------------------
Gruss Dirk

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: 21. Dez. 2011 11:36    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 cadplayer 10 Unities + Antwort hilfreich

Hallo
Ich würde noch ein osmode von z.B. 2650 einbauen damit man auch die linie trifft, ich weis nur nicht ob das für dich relevant ist.

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

Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. 

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 21. Dez. 2011 14: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 cadplayer 10 Unities + Antwort hilfreich

nur mal ein paar Anregungen bzw Gedanken von mir beim Überfliegen der Zeilen

Code:
(defun PolylinePickpoint () ;variablen rücksetzen
  (setq obj (vlax-ename->vla-object (car (entsel))));prüfen der Bedingungen (and...
  (setq plpt1 (getpoint "\nPick point on line! "))
  (setq dis (vlax-curve-getDistAtPoint obj plpt1))
  );ggf Fehlermeldung (or(and... (princ Fehler blabla
 
(defun PolylineDistance ();variablen rücksetzen
  (setq obj (vlax-ename->vla-object (car (entsel))));prüfen der Bedingungen (and...
  (setq plpt1 (getpoint "\nPick point 1 on line! "))
  (setq plpt2 (getpoint "\nPick point 2 on line! "))
  (setq a1 (vlax-curve-getDistAtPoint obj plpt1))
  (setq a2 (vlax-curve-getDistAtPoint obj plpt2))
  ;ggf Fehlermeldung (or(and... (princ Fehler blabla
  (setq dis (- a2 a1));kann negativ werden max-min betrachten
  )
(defun c:Dim () ;variablen rücksetzen
  (initget "plp pld")
  (setq aw (getkword "\nDistance from 0 [plp] or Distance from 2 points on line [pld] ? "));aw festen wert mitgeben bei Abbruch durch RM
  (cond
    ;; ((or(not aw)...
    ((= aw "plp")
    (PolylinePickpoint);sub's abfangen bietet sich an
    (command "_.text" "s" "txt" plpt1 1 ""  (rtos dis 2 2));txt vorhanden?
    );besser entmake oder vla-add...
    ((= aw "pld")
    (PolylineDistance)
    (command "_.text" "s" "txt" plpt1 1 ""  (rtos dis 2 2))
    )
    )
  )
(princ) ;in die Function?!

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 29. Dez. 2011 14:25    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:
(defun *error* (errmsg)
;;;  (if (or (/= (cdr (assoc 0 (cdr (entget ent)))) "LWPOLYLINE")
;;;   (/= ent)
;;;   )
    (princ "\nNo polyline select\n")
    (princ errmsg)
    (princ)
;;;    )
  )

(defun PolylinePickpoint ()
  (while
    (not (setq ent (car (entsel))))
    *error*)
  (progn
    (repeat (setq i (length (entget ent)))
      (while
(not
  (setq dis (vlax-curve-getDistAtPoint ent
      (setq plpt1 (getpoint "\nPick point on line! ")))))
)
      (entmake
(list
  '(0 . "TEXT")
  (cons 8 (getvar"clayer"))
  (cons 10 plpt1)
          (cons 40 (getvar "textsize"))
          '(50 . 0.0)
          (cons 1 (rtos dis 2 2))
  )
)
      )
    )
  )
 



Zwei Fragen:

In dem code läuft die *error* funktion nicht richtig.
Ich möchte erreichen, dass wenn keine Polylinie oder nichts gewählt wird, die Error-meldung "No polyline select" kommt.
Es habert am Einsatz von Wenn-Oder-Schleifen

Weiter unten ist mir noch aufgefallen, dass die Repeat-schleife nur begrenzt ausgeführt wird. Mein Versuch den Wert in i reinzuschreiben und dann hochzählen lassen mit (setq i (1+ i)) wurde nicht angenommen.

------------------
Gruss Dirk

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. Dez. 2011 15: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 Nur für cadplayer 10 Unities + Antwort hilfreich

Ich versuche mal so wenig wie möglich hin zu schauen und dennoch eine hilfreiche Antwort zu leisten:

Die *error*-Funktion ist dafür da das im *error*-Fall alles in geordneten Bahnen abläuft,
zB. Variablen zurückgesetzt werden etc. und nicht für irgendwelche Alert-Spielereien,
wenn du nur einen Dialog haben möchtest mit Text, dann nehme dafür ALERT (alert "Hallo Welt")

ERROR = ABBRUCH = ENDE (normalerweise)

(while (not(and
            (setq ent (car(entsel "\n(LW)Polylinie auswählen: ")))
            (wcmatch (cdr(assoc 0 (entget ent))) "LWPOLYLINE")
        )  )
    (princ "\nEs wurde keine Polylinie gewählt")
)

Was das Repeat angeht:

1.) dieses "(setq i (1+ i))" hast du nicht im geposteten Code stehen !?
    Sowas macht es dann nun unnötig komplizierter zu helfen im Forum

2.) die Angabe der Schleifenanzahl wird nur einmal gelesen, es würde dir SO eh nichts nutzen
    (progn(setq i 3)(repeat i (setq i 55)(alert (itoa i))))

3.) "(repeat (setq i (length (entget ent)))"
    Keine Ahnung was das soll, aber das kann einfach nicht richtig sein..

Ich würde ja als Tip geben zunächst mal jede Funktion einzeln zu erkunden und
nicht 10 auf einmal - von denen dann nur jede zweite richtig angewendet wird.

Leider kann ich mir anhand von diesen Zeilen noch nicht mal denken was da warum wie oft durchlaufen werden soll.

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 30. Dez. 2011 09:15    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:

(defun PolylinePickpoint ()
  (while (not(and
      (setq ent (car(entsel "\nSelect Polyline: ")))
      (wcmatch (cdr(assoc 0 (entget ent))) "LWPOLYLINE")
      )
    )
    (princ "\nNo Polyline select ")
)
  (setq i 1)
  (progn
    (while
      (repeat i
(while
  (not
    (setq dis (vlax-curve-getDistAtPoint ent
(setq plpt1 (getpoint "\nPick point on line! ")))))
  )
(entmake
  (list
    '(0 . "TEXT")
    (cons 8 (getvar"clayer"))
    (cons 10 plpt1)
            (cons 40 (getvar "textsize"))
            '(50 . 0.0)
            (cons 1 (rtos dis 2 2))
    )
  )
(setq i (1+ i))
)
      )
    )
  )

So sollte es funktionieren - Danke für die Hilfestellung

------------------
Gruss Dirk

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: 30. Dez. 2011 11:40    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 cadplayer 10 Unities + Antwort hilfreich

Ja das funktioniert, hier noch ein paar (unnötige) Zeilen entfernt (blöder Kommentar steht dahinter)

Code:

(defun PolylinePickpoint ( / ent plpt1 dis) ; die 3 Variablen als lokal deklariert
  (while (not(and
                (setq ent (car(entsel "\nSelect Polyline: ")))
                (wcmatch (cdr(assoc 0 (entget ent))) "LWPOLYLINE")
         )   )
         (princ "\nNo Polyline select")
  )

;;;  (setq i 1)     ; setze i=1
;;;  (progn         ; fasse nachfolgend nur eine einzige Sache(repeat) "zusammen"
;;;    (while       ; wiederhole den repeat-part solange wie dort  "(setq i (1+ i))" am Ende steht, also endlos.
;;;      (repeat i  ; Durchlaufe nachfolgendes nur ein einziges Mal

  (while (setq plpt1 (getpoint "\nPick point on line: "))
         (if (setq dis (vlax-curve-getDistAtPoint ent plpt1 ))
              (entmake
                (list '(0 . "TEXT")
;;;                     (cons 8 (getvar"clayer")) ohne Angabe = immer der aktuelle
                        (cons 10 plpt1)
                        (cons 40 (getvar "textsize"))
                        '(50 . 0.0)
                        (cons 1 (rtos dis 2 2))
                )
              )
              (princ"\n< Pickpoint wasn´t on line >")
        )
    )

;;;(setq i (1+ i)) ; erhöhe den nie wieder benötigten Wert von i um 1
;;;)
;;;      )
;;;    )

  (princ)
)


------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

[Diese Nachricht wurde von cadffm am 30. Dez. 2011 editiert.]

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 30. Dez. 2011 12: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

Super - vielen Dank für deine Mühe

(if (setq dis (vlax-curve-getDistAtPoint ent plpt1 )) (entmake... (princ"\n< Pickpoint wasn´t on line >")

Verstehe ich es richtig

Bei der If-schleife wird mit vlax-curve-getDistAtPoint gleich geprüft ob der gew. Punkt auf der Polylinie liegt ansonsten Fehlermeldg princ

------------------
Gruss Dirk

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: 30. Dez. 2011 13: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 cadplayer 10 Unities + Antwort hilfreich

AutoCAD/VLisp-Hilfe zu vlax-curve-getDistAtPoint


vlax-curve-getDistAtPoint erwartet 2 Argumente:
1. curve-obj (The VLA-object to be measured.)
2. point (A 3D point list (in WCS) on curve-obj)

Rückgabe der Funktion:
A real number if successful
otherwise nil.

Also: Wenn die Funktion nil zurückgibt lag der Punkt nicht auf dem angegebenen Objekt,
wenn der Punkt aber auf dem Objekt lag kommt als Rückgabe eine (real)Zahl.

Somit habe ich gesagt:
Wenn      'wahr'(wahr ist alles was nicht nil ist) dann 'Textobjekt', wenn nicht: Textausgabe
(if (setq dis (vlax-curve-getDistAtPoint ent plpt1 )) (entmake...                      (princ"\n< Pickpoint wasn´t on line >")


Und wünsche noch einen angenehmen Rutsch ins neue Jahr und verabscheu mich 

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 30. Dez. 2011 15: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

Ich sollte doch mal mehr die F1-hilfe checken... guter Vorsatz fürs kommende Jahr.
Danke und wünsche auch ein gutes Neues.

------------------
Gruss Dirk

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