Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Blöcke an Linienenden platzieren und an Linie ausrichten

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:  Blöcke an Linienenden platzieren und an Linie ausrichten (1967 mal gelesen)
furter
Mitglied



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

Beiträge: 483
Registriert: 01.03.2004

Windows 7
Autodesk MAP 3D 2017 SP2
Autodesk Civil 2016

erstellt am: 24. Nov. 2016 07: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

Guten Tag

Gibt es eine Möglichkeit, an mehreren Linienenden automatisch Blöcke zu platzieren und diese auf die jeweilige Linie auszurichten?

Danke  im Voraus für Eure Antworten.
Gruss furter

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: 24. Nov. 2016 07:16    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 furter 10 Unities + Antwort hilfreich

Hallo Furter,
ja, das geht.

Im folgenden nur der Ansatz, wie man beispielhaft Punkt A und B aus einer Linie bekommt, daraus läßt sich der Winkel dann berechnen.

Dann kann z.B. mit einem Command-Befehl "_.INSERT" der Block auf Punkt A eingefügt werden, beim Einfügen würde ich die Drehung bei Null belassen, diese wird im Nachgang angepasst.

Mit der Funktion vla-put-rotation wird der Winkel dann angepasst, wenn Attribute vorhanden sind werden die mitgedreht.

Hinweis bei Attributierten Blöcken: um die Abfrage nach den Attributwerten beim Command-Befehl "_.insert" zu unterdrücken kann vorher die Variable "ATTREQ" auf 0 gesetzt werden.

Im folgenden nur schnell hingetippt (nicht lauffähig)

Code:

(defun c:test ( / )
  (if (and(setq obj (car (entsel "\nLinie auswählen:")))
          (=(cdr(assoc 0 (entget obj)))"LINE"))
    (setq pA (cdr(assoc 10 (entget obj)))
          pE (cdr(assoc 11 (entget obj)))
          w (angle pA pE))
    (command "_.insert" [Blockname] ....)

    (vla-put-rotation
      (vlax-ename->vla-object(entlast))
      w)
    )
  )


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

Jörn
http://www.bosse-engineering.com

Liniensignaturen Youtube

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

furter
Mitglied



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

Beiträge: 483
Registriert: 01.03.2004

Windows 7
Autodesk MAP 3D 2017 SP2
Autodesk Civil 2016

erstellt am: 24. Nov. 2016 17:18    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

Guten Abend Jörn

Danke für Deine Antwort.
Den Ansatz habe ich jetzt und den Rest probiere ich selber.


Gruss furter

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

furter
Mitglied



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

Beiträge: 483
Registriert: 01.03.2004

Windows 7
Autodesk MAP 3D 2017 SP2
Autodesk Civil 2016

erstellt am: 25. Nov. 2016 09: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

Hallo Jörn

So geht es jetzt für mich:

(defun c:test_index ( / )
  (if (setq obj (car (entsel "\nLinie auswählen:")))
          (=(cdr(assoc 0 (entget obj)))"LINE"))
    (setq pA (cdr(assoc 10 (entget obj)))
          pE (cdr(assoc 11 (entget obj)))
          w (angle pA pE))
    (command "_.insert" "Aufn_terr" pE 100 100 0)
  (vla-put-rotation
      (vlax-ename->vla-object(entlast))
      w)
    (command "_.erase" obj " ")
)

Jetzt muss ich noch schauen, wie es ausschaut mit vielen Linien im Stapel.

Danke nochmals für Deine Hilfe.
Gruss furter

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: 25. Nov. 2016 09:45    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 furter 10 Unities + Antwort hilfreich

Schau dir zB folgenden Code an: http://ww3.cad.de/foren/ubb/Forum54/HTML/032618.shtml#000004

ssget erzeugt einen Auswahlsatz
Foreach durchläuft eine Liste

Eine von vielen Möglichkeiten.

Die Lispfunktionen sind gut in der Hilfe dokumentiert und im Netz gibt es Millionen Beispielcodes.

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

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: 25. Nov. 2016 15: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 furter 10 Unities + Antwort hilfreich

Hallo Furter,
mir ist noch ein Fehler in Deinem Code aufgefallen:

(if (setq obj (car (entsel "\nLinie auswählen:")))
          (=(cdr(assoc 0 (entget obj)))"LINE"))

Das würde bedeuten, wenn ein Objekt ausgewählt ist, dann wird einfach nochmal gefragt, ob es eine Linie ist. Danach wird der Code aber ausgeführt, auch wenn es gar keine Linie ist.

dafür kannst Du die Funktion AND verwenden: dann würde die Abfrage lauten, wenn ein Objekt ausgewählt ist und dieses auch noch eine Linie ist, dann führe den Code aus. Wenn mehrere Funktionen ausgeführt werden sollen dann kann man diese mit der Funktion PROGN zusammenfassen.
  (and
      (setq obj (car (entsel "\nLinie auswählen:")))
      (=(cdr(assoc 0 (entget obj)))"LINE"))

Code:

(defun c:test_index ( / OBJ PA PE W)
  (if
  ;;;wenn Objek und Objekt = Linie
  (and
      (setq obj (car (entsel "\nLinie auswählen:")))
      (=(cdr(assoc 0 (entget obj)))"LINE"))
  ;;;dann
  (progn
    (setq pA (cdr(assoc 10 (entget obj)))
          pE (cdr(assoc 11 (entget obj)))
          w (angle pA pE))

    (command "_.insert" "Aufn_terr" pE 100 100 0)
    (vla-put-rotation
    (vlax-ename->vla-object(entlast))
    w)
    (command "_.erase" obj " ")
    );;;end progn
  ;;;sonst
  (alert "Es wurde entweder kein Objekt ausgewählt oder das Objekt war keine Linie.")
  )
)


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

Jörn
http://www.bosse-engineering.com

Liniensignaturen Youtube

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

furter
Mitglied



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

Beiträge: 483
Registriert: 01.03.2004

Windows 7
Autodesk MAP 3D 2017 SP2
Autodesk Civil 2016

erstellt am: 28. Nov. 2016 07: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

Danke Jörn
Du hast's im Griff.

Gruss furter

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

furter
Mitglied



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

Beiträge: 483
Registriert: 01.03.2004

Windows 7
Autodesk MAP 3D 2017 SP2
Autodesk Civil 2016

erstellt am: 29. Nov. 2016 08: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

Guten Tag

Mit einiger Mühe habe ich nun folgendes gebastelt:

(defun c:test_index ( / obj zähler objekt pA pE w)
(setq obj (ssget "X" '((0 . "LINE")))
  zähler 0)
(repeat (sslength obj)
(setq objekt (ssname obj zähler)
pA (cdr(assoc 10 (entget obj)))
pE (cdr(assoc 11 (entget obj)))
w (angle pA pE)
zähler (1+ zähler))
(command "_.insert" "Aufn_terr" pE 100 100 0)
(vla-put-rotation
(vlax-ename->vla-object(entlast))
w)
(command "_.erase" obj " ")
    )
)

Leider läuft das nicht durch.
Fehler: Fehlerhafter Argumenttyp: lentityp <Selection set: 83a>

Habt Ihr mir einen Tipp, wie ich weiterkomme?

Gruss furter

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. Nov. 2016 08:57    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 furter 10 Unities + Antwort hilfreich


Fehler: Fehlerhafter Argumenttyp: Acad bekommt etwas anderes wie erwartet (zB. Zahl(int/real) statt Text(str) )
lentityp Acad erwartet ein Entity
<Selection set: 83a> bekommt aber einen Auswahlsatz

Habt Ihr mir einen Tipp, wie ich weiterkomme?
Suche nach Flüchtigkeits-Schreibfehler.
Vielleicht verwendest du auch einen anderen Variablennamen für den Auswahlsatz, dann kommst du nicht
so leicht durcheinander, vielleicht einfach mal AWS für den AusWahlSatz-Namen einsetzen.

Fehleranalyse:
Lese in der Hilfe mal etwas zu ERRNO nach, zusammen mit dieser Liste sicher ab und an hilfreich: Klick!

Wenn du den Tippfehler korrigiert hast, so lauert der zweite Fehler in deinem (Command ...),
du solltest dir die Befehlsfolge von _erase noch einmal händisch durchgehen, dies stimmt nicht mit deiner Command-Anweisung überein.

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

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

spider_dd
Mitglied



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

Beiträge: 1111
Registriert: 27.11.2003

Win 10Pro
Intel(R) Core(TM) i7-7700
NVIDIA Quadro P1000
ACAD, Civil-3D 2018

erstellt am: 29. Nov. 2016 16: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 furter 10 Unities + Antwort hilfreich

Hallo furter,

hast Du Deinen Fehler schon gefunden?
Wenn nicht, mach mal einen Klammernabgleich. M. E. löschst Du noch innerhalb der (repeat ...) Schleife, also nach dem platzieren der ersten Blockreferenz, Deinen Auswahlsatz obj.
Der kann dann beim zweiten Durchlauf nicht mehr gefunden werden.

HTH
Gruß
Thomas

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

furter
Mitglied



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

Beiträge: 483
Registriert: 01.03.2004

Windows 7
Autodesk MAP 3D 2017 SP2
Autodesk Civil 2016

erstellt am: 29. Nov. 2016 16: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

Danke vielmals für den Tipp. Werde ich anschauen.

Im Moment bin ich hier:
(defun c:test_index ( / obj z AWS pA pE w)
    (setq AWS (ssget "_X" '((0 . "LINE")))
  z 0)
(repeat (sslength AWS)
(setq pA (cdr(assoc 10 (entget (entlast))))
  pE (cdr(assoc 11 (entget (entlast))))
  w (angle pA pE)
      obj (ssname AWS z)
z (1+ z))
(command "_.insert" "Aufn_terr" pE 100 100 0)
(vla-put-rotation
(vlax-ename->vla-object(entlast))
w)
(command "_.erase" obj)
    )
)

Gruss furter

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. Nov. 2016 16: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 furter 10 Unities + Antwort hilfreich

Baue es von Grund auf neu zusammen, Schritt für Schritt, so das du auch verstehst was wann wie macht.

Am Anfang deines Repeat-Laufes gibt es noch kein "obj"

Dafür holst du dir immer wieder Objektdaten "vom letzten Objekt der Datei", das ist auch nicht gewollt,
denn 10 und 11 möchtest eigentlich aus OBJ haben, nicht von "entlast"
[editiert]
------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

jupa
Ehrenmitglied V.I.P. h.c.
Ruheständler


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

Beiträge: 6050
Registriert: 16.09.2004

WINDOWS Vista Ultimate SP2 (64bit), NVIDIA Geforce 9600M GT, AutoCAD 2013.

erstellt am: 29. Nov. 2016 16: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 furter 10 Unities + Antwort hilfreich

Mit einiger Mühe habe ich nun folgendes gebastelt: ...


Und noch ein Tip:

Ein ENTER wird in einem (command ...)-Ausdruck nicht durch einen aus einem Leerzeichen bestehenden String (" "), sondern durch einen Leerstring ("") ausgedrückt.

(Nach 4 kleinen Korrekturen läuft's bei mir prima   )


Jürgen

------------------
Bildung kommt nicht vom Lesen, sondern vom Nachdenken über das Gelesene. (Carl Hilty)

[Diese Nachricht wurde von jupa am 29. Nov. 2016 editiert.]

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: 29. Nov. 2016 16: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 furter 10 Unities + Antwort hilfreich


VLIDE.gif

 
Hallo Further,
ich habe den Code nochmal ein bischen nachgearbeitet, wichtig sind für Dich sicherlich auf die Formatierungen. Durch Einrücken von Zeilen wird der Code viel leichter lesbar.

Den Code mußt Du aber noch testen, ich habe ihn nicht ausprobiert, vielleicht sind Flüchtigkeitsfehler drin.

Folgende Sachen habe ich angepasst:

- ein IF vor die SSGET-Funktion gesetzt, damit keine Aktion erfolgt, wenn keine Linien gefunden worden sind.
- wenn ein Auswahlsatz vorhanden ist, dann werden die nachfolgende Funktionen wieder mit PROGN zusammengefasst.
- Löschen der Linien: diese können abschließend auch als Auswahlsatz "AWS" gelöscht werden.

Vielleicht solltest Du Dich mit dem Visul-Lisp-Editor VLIDE beschäftigen, dort kannst Du ganz einfach formatieren und debuggen, durch einen farbigen Code (siehe angehängtes GIF)wird alles viel einfacher lesbar:
http://www.bosse-engineering.com/JB_Data/Bosse-engineering/090501_VisualLISP-Editor.pdf

Code:

(defun c:test_index ( / obj z AWS pA pE w)
  (if(setq AWS (ssget "_X" '((0 . "LINE"))))
    ;;;wenn Auswahlsatz, dann
    (progn
      (setq z 0)
      (repeat (sslength AWS)
(setq pA (cdr(assoc 10 (entget (ssname aws z))))
      pE (cdr(assoc 11 (entget (ssname aws z))))
      w (angle pA pE)
      z (1+ z))

(command "_.insert" "Aufn_terr" pE 100 100 0)
(vla-put-rotation(vlax-ename->vla-object(entlast)))w)

      ;;;abschließend die Linien im AWS löschen
      (command "_.erase" aws "")
      )
    (alert "Es wurden keine Linien ausgewählt.")
    )
  (princ)
  )


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

Jörn
http://www.bosse-engineering.com

Liniensignaturen Youtube

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

furter
Mitglied



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

Beiträge: 483
Registriert: 01.03.2004

Windows 7
Autodesk MAP 3D 2017 SP2
Autodesk Civil 2016

erstellt am: 29. Nov. 2016 17: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

Hurra, das Skript ist geboren.

Grosser Dank an alle, die mich unterstützt haben.

(defun c:test_index ( / obj z AWS pA pE w)
    (setq AWS (ssget "_X" '((0 . "LINE")))
z 0)
(repeat (sslength AWS)
(setq obj (ssname AWS z)
  pA (cdr(assoc 10 (entget obj)))
  pE (cdr(assoc 11 (entget obj)))
  w (angle pA pE)
  z (1+ z))
(command "_.insert" "Aufn_terr" pE 100 100 0)
(vla-put-rotation
(vlax-ename->vla-object(entlast))
w))
(command "_.erase" AWS "")
)

Gruss furter

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

furter
Mitglied



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

Beiträge: 483
Registriert: 01.03.2004

Windows 7
Autodesk MAP 3D 2017 SP2
Autodesk Civil 2016

erstellt am: 06. Dez. 2016 09: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

Guten Tag

Nach unzähligen Versuchen gelange melde ich mich nochmals.
Das Skript sieht jetzt so aus:

(defun c:Aufn_index (/ c:GNSS obj z AWS pA pE w)
  (setq AWS (ssget "_X" '((0 . "LINE")))
z  0
  )
  (repeat (sslength AWS)
    (setq obj (ssname AWS z)
  pA  (cdr (assoc 10 (entget obj)))
  pE  (cdr (assoc 11 (entget obj)))
  w  (angle pA pE)
  z  (1+ z)
    )
    (if (/= pA pE)
      (command "_.insert" "Aufn_Index_Lisp" pE 1 1 0)
    )
    (vla-put-rotation
      (vlax-ename->vla-object (entlast))
      w
    )
  )
)
(defun c:GNSS (/ obj z AWS pA pE)
  (setq AWS (ssget "_X" '((0 . "LINE")))
z  0
  )
  (repeat (sslength AWS)
    (setq obj (ssname AWS z)
  pA  (cdr (assoc 10 (entget obj)))
  pE  (cdr (assoc 11 (entget obj)))
  z  (1+ z)
    )
    (if (equal pA pE)
      (command "_.insert" "GPS_Aufn_1fach" pE 0.5 0.5 0)
    )
  )
  (command "_.erase" AWS "")
)

Das funktioniert bis auf eine Ausnahme.
Mit dem if im ersten Teil sollen nur die Linien gezeichnet werden, die eine Länge grösser 0, bezw. wo der Startpunkt der Linie dem Endpunkt entspricht. Hier komme ich nicht weiter.
Könnt Ihr mir nochmals einen Tipp geben?
Herzlichen Dank für Eure Bemühungen.

Gruss furter

[Diese Nachricht wurde von furter am 06. Dez. 2016 editiert.]

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: 06. Dez. 2016 09: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 Nur für furter 10 Unities + Antwort hilfreich

Hallo Furter,
anstelle
(/= pA pE)

nimm mal folgende Zeile:
(not(equal (distance pA pE)0.0 0.000001))

Mit der Funktion EQUAL wird geprüft, ob der Abstand zwischen pA und pE 0,0 ist, wobei der letzte Wert die Genauigkeit in die Prüfung einbezieht.

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

Jörn
http://www.bosse-engineering.com

Liniensignaturen Youtube

[Diese Nachricht wurde von joern bosse am 06. Dez. 2016 editiert.]

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

furter
Mitglied



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

Beiträge: 483
Registriert: 01.03.2004

Windows 7
Autodesk MAP 3D 2017 SP2
Autodesk Civil 2016

erstellt am: 06. Dez. 2016 09: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 Jörn

Das geht jetzt. Vielen Dank.

Gruss furter

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

jupa
Ehrenmitglied V.I.P. h.c.
Ruheständler


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

Beiträge: 6050
Registriert: 16.09.2004

WINDOWS Vista Ultimate SP2 (64bit), NVIDIA Geforce 9600M GT, AutoCAD 2013.

erstellt am: 06. Dez. 2016 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 Nur für furter 10 Unities + Antwort hilfreich

Nach flüchtigem drüberlesen denke ich, Du mußt die Aktionen, die bei Erfüllung der If-Bedingung ausgeführt werden sollen in eine (progn ...)-Anweisung einschließen:

(if (/= pA pE)
  (progn
    (command "_.insert" "Aufn_Index_Lisp" pE 1 1 0)
    (vla-put-rotation
      (vlax-ename->vla-object (entlast))
      w
    )
  ) ; end_progn
)  ;end_if


Jürgen

------------------
Bildung kommt nicht vom Lesen, sondern vom Nachdenken über das Gelesene. (Carl Hilty)

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: 06. Dez. 2016 10: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 furter 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von furter:
sollen nur die Linien gezeichnet werden, die eine Länge grösser 0, bezw. wo der Startpunkt der Linie dem Endpunkt entspricht.

Der Fall wird genau NIE eintreten.
Entweder ist die Linie >Null oder der Start- und Endpunkt sind identisch.

Aber wie auch immer:

Du hast zwei Probleme, das eine wurde dir oben bereits näher gebracht IF und PROGN

Code:
    (if (/= pA pE)
        (progn
            ; hier alles hinein, was ausgeführt werden soll wenn die Bedingung erfüllt ist
            (command "_.insert" "Aufn_Index_Lisp" pE 1 1 0)
        );_progn_end
        (princ "\nLustige Textmeldung wenn das nicht der Fall ist, muss aber nicht"
    );_if_ende

Das andere Problem ist der Vergleich der Liste pA und pE, dieser wird oftmals nicht funktionieren
da die Koordinaten sich durch mathematische Ungenauigkeit unterscheiden können.
Hier wäre eine mögliche Lösung:
Länge der Linie abfragen oder berechnen und mit einer zulässigen Ungenauigkeit vergleichen:
(/= 0.0 (distance pA pE))
Um geringste Abweichungen als WAHR zuzulassen, das /= durch ein EQUAL ersetzen, schau dir dazu die Syntax von Equal an; Klick!

Code:

Beispiel:
Befehl: (equal 1 1.00001 0)
nil

Befehl: (equal 1 1.0001 0.00001)
nil

Befehl: (equal 1 1.0001 0.0001)
T


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

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

furter
Mitglied



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

Beiträge: 483
Registriert: 01.03.2004

Windows 7
Autodesk MAP 3D 2017 SP2
Autodesk Civil 2016

erstellt am: 06. Dez. 2016 12:57    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:
die eine Länge grösser 0, bezw. wo der Startpunkt der Linie dem Endpunkt entspricht.

Ja, war nicht richtig geschrieben  -> nicht dem Endpunkt....

Vielen Dank an Jupa und Cadffm.
Eure Tipps versuche ich auch umzusetzen, sobald ich wieder Zeit finde...

Gruss furter

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