Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Polylinie versetzen und enden schließen

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
Autor Thema:   Polylinie versetzen und enden schließen (1781 mal gelesen)
tklingler
Mitglied
Metallbautechniker


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

Beiträge: 24
Registriert: 07.06.2008

erstellt am: 27. Okt. 2008 10: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

Hallo, mit folgenden Script versetze ich ene Polylinie und runde diese ab.

Wie kann ich di noch offenen ende schließen ?

;Erstelle eine Blech mittels versetzten
; blech1
(defun zpolyo (p) ; Polylinie ohne schließen
  (setq dp p) ; dp = Liste der Punkte
  (setq dl (length p)) ; dl = Anzahl der Punkte
  (command "plinie")
  (repeat dl ; Schleife = Anzahl Punkte
    (command (car dp)) ; erster Punkt aus Liste
    (setq dp (cdr dp)) ; löschen erster Punkt aus Liste
  )
  (command "") ; Abbruch Plinie
) ;end zpolyo
(defun grad (w) ; Winkel-Umrechnung
  (* pi (/ w 180.0)) ; in Bogenmaß
) ;end grad
(defun C:Blech ()
  (princ
    "\nBlech als Schnitt zeichnen \n"
  )
  (princ "\n")
  (setq ECHOLD (getvar "CMDECHO"))
  (setq LAYOLD (getvar "CLAYER"))
;(setq PICKOLD (getvar "PICKBOX" ))
  (command "ZURÜCK" "B")
  (setq V:AUSW_1 (ssadd))
  (setq V:AUSW_2 (ssadd))
  (layset "M5S_Blech")
  (layset "M5S_Blech")
  (setvar "CMDECHO" 0)
;(setvar "pickbox" 0 )
  (setvar "plinegen" 0)
  (command "LAYER" "SET" "M5S_Blech" "")
  (princ)
  (setq rund 1)
  (setvar "cmdecho" 0)
  (setvar "blipmode" 0)
  (setq pl nil)
  (princ)
  (setq von (getpoint "\n von Punkt: ")) ; erster Punkt
  (setq p von)
  (setq bis von)
  (setq start 1)
  (setq pl (cons von pl))
  (while (setq p (getpoint "\nnach Punkt: " bis))
    (setq pl (cons p pl)) ; Erstellung Liste der Punkte
    (setq we (angle bis p)) ; End-Winkel
    (if (= start 1)
      (setq wa we)
    ) ; Anfangs-Winkel
    (if (= start 1)
      (setq start 0)
    )
    (setq bis p) ; bis = letzter Punkt
  ) ;end while
  (setq wa1 (+ wa (grad 90))) ; Anfangswinkel + 90 grad
  (setq we1 (+ we (grad 90))) ; Endwinkel + 90 grad
  (zpolyo pl)
  (setq V:AUSW_1 (ssadd (entlast) V:AUSW_1))
  (setq dicke (getreal "\n Blech-Dicke in mm: "))
; Blech-Dicke
  (if (= rund 1)
    (progn
      (command "abrunden" "R" (* dicke 1.5)); Abrunden
      (command "abrunden" "P" V:AUSW_1) ; Abrunden Ursprungslinie
      (princ)
    ) ;end progn       
  ) ;end if
(setq pda (polar von wa1 dicke)) ;Punkt: Dicke am Anfang

(command "versetz" dicke V:AUSW_1 pda ""); Versetzten der Ursprungslinen um die Dicke

  (setq rund 0)
  (setvar "CMDECHO" ECHOLD)
  (setvar "CLAYER" LAYOLD)

  (command "ZURÜCK" "E")
  (princ)
) ;END OF FILE

------------------
Technik & Design

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: 893
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

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

Was auch immer Du da machst...
Strukturierung und Co.

auf die schnelle

(defun zpolyo (p) ; Polylinie ohne schließen
  (setq dp p) ; dp = Liste der Punkte
  (setq dl (length p)) ; dl = Anzahl der Punkte
  (command "plinie")
  (repeat dl ; Schleife = Anzahl Punkte
    (command (car dp)) ; erster Punkt aus Liste
    (setq dp (cdr dp)) ; löschen erster Punkt aus Liste
  )
  (command "schließen" "") ; Abbruch Plinie <-----------------------
) ;end zpolyo

oder in der Liste die du übergibst (pl)
prüfen ob erstes und lestztes Element gleich sind...
mfg heiko

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

CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1917
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 28. Okt. 2008 09: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 tklingler 10 Unities + Antwort hilfreich

du kannst doch die Polylinie dem Befehl _pedit übergeben und da die Option Schließen wählen
Schon bisde fertig.

------------------
Gruß
         CADwiesel
Besucht uns im CHAT

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

tklingler
Mitglied
Metallbautechniker


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

Beiträge: 24
Registriert: 07.06.2008

erstellt am: 16. Dez. 2008 12: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

Hallo, das funtz nicht.
Ich erkläre glaube ich was da passieren soll.

1. Zeichen einer Polylinie
2. Versetzen der Linine um en Bestimmtes maß
3. Schließen der Endpunkte

Bis zum versetzen klappt das alles schon wunderbar. Nur das Schließen gelingt mir nicht.

Die obigen Vorschläge gegen nicht, da die Polyline vor dem versetzen geschlossen würde was zu einenm nicht gewünschten ergenis führen würde.

------------------
Technik & Design

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: 1020
Registriert: 27.11.2003

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

erstellt am: 16. Dez. 2008 13:37    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 tklingler 10 Unities + Antwort hilfreich

Hallo tklingler,

bau mal nach dem Versetzen der Polylinie folgendes ein:

Code:
(command "_pedit" (entlast) "_close" "")

Gruß
Thomas

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

andi2050
Mitglied



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

Beiträge: 107
Registriert: 11.03.2003

erstellt am: 16. Dez. 2008 23: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 tklingler 10 Unities + Antwort hilfreich

Hi tklingler

Wenn ich Dich richtig verstanden habe, dann willst Du die gezeichnete Pline mit der Offsetpline verbinden, so daß eine geschlossene Pline entsteht.

Das läßt sich ganz gut mit einem PEDIT-Trick verwirklichen.
- Bei der Anwahl der zu editierenden Pline die Option "mehrere Objekte" wählen, dann beide Plines anwählen.
- Verbinden
- Verbindungstyp
- Hinzufügen
- den Verbindungsfuzzy >= Plineabstand angeben

-> fäddich
(Stand AC2002 - kann sein daß die Parameter bei aktuellen ACAD Versionen etwas anders lauten - ich glaub da war mal was....)

Ich konnte mich nicht zurückhalten und hab den Code etwas gepimpt...  


Code:

(defun c:blech (/ pt spt plineobj1 plineobj2)
  (setq *blech:Dicke* (getreal>0 "Blech-Dicke in mm: " *blech:Dicke*)
        spt          (getpoint "\nVon Punkt: ")
        pt            spt
  )
  ;; Radius setzen
  (setvar "FILLETRAD" (* 1.5 *blech:Dicke*))
  ;; Punkte abfragen und Pline zeichnen
  (while (and pt (setq pt (getpoint pt "\nnach Punkt: ")))
    ;; Wenn Pline vorhanden...
    (if plineobj1
      ;; -> dann Vertex hinzufügen + Offset
      (progn (vla-addvertex plineobj1
                            (1+ (vlax-curve-getendparam plineobj1))
                            (vlax*point->variant (2dpoint pt))
            )
            ;; verrrundn
            (command "_FILLET" "_P" (vlax-vla-object->ename plineobj1))
            ;; erst alten Offset löschen
            (if plineobj2
              (vla-delete plineobj2)
            )
            ;; dann neuen Offset erstellen
            (setq plineobj2
                    (car
                      (vlax-safearray->list
                        (variant-value (vla-offset plineobj1 (- *blech:Dicke*)))
                      )
                    )
            )
      )
      ;; -> sonst neue Pline erstellen + Offset
      (setq plineobj1 (vla-addlightweightpolyline
                        (vla-get-modelspace
                          (vla-get-activedocument (vlax-get-acad-object))
                        )
                        (vlax*pointlist2d->variant
                          (list (2dpoint spt) (2dpoint pt))
                        )
                      )
            plineobj2 (car (vlax-safearray->list
                            (variant-value (vla-offset plineobj1 (- *blech:Dicke*)))
                          )
                      )
      )
    )
  )
  ;; and Funktion bricht Evaluierung ab, wenn ein Argument nil (if nicht erforderlich !)
  (and plineobj1
      plineobj2
      ;; schließen mit Pedit (beide Plines mit großem Fuzzyabstand verbinden)
      (command "_PEDIT"
                "_M" ; mehrere Objekte
                (vlax-vla-object->ename plineobj1)
                (vlax-vla-object->ename plineobj2)
                "" ; Ende Objektwahl
                "_J" ; Verbinden
                "_J" ; Verbindungstyp
                "_A" ; Hinzufügen
                (1+ *blech:Dicke*) ; Fuzzy (+1 zur Sicherheit)
                "_X" ; Exit
      )
  )
  (princ)
)
;;;--------------------------------
;;; GETREAL>0 - getreal ohne Null/negativ
;;; Anfragetext,Vorgabe (Zahl)
;;;--------------------------------
(defun getreal>0 (anfrage vorgabe)
  (initget (+ 2 4))
  (cond ((getreal (strcat "\n"
                          anfrage
                          " <"
                          (if (numberp vorgabe)
                            (rtos vorgabe 2 (getvar "LUPREC"))
                            ""
                          )
                          ">: "
                  )
        )
        )
        (t (float vorgabe))
  )
)
;;;---------------------------------
;;; Wandelt 2D-Punktliste in Variant um
;;;---------------------------------
(defun vlax*pointlist2d->variant (ptlist / arrayspace sarray)
  (setq arrayspace (vlax-make-safearray vlax-vbdouble
                                        (cons 0 (- (* 2 (length ptlist)) 1))
                  )
  )
  (setq sarray (vlax-safearray-fill arrayspace (apply 'append ptlist)))
  (vlax-make-variant sarray)
)
;;;---------------------------------
;;; Wandelt Punkt in Variant um
;;;---------------------------------
(defun vlax*point->variant (pt / arrayspace sarray)
  (setq
    arrayspace (vlax-make-safearray vlax-vbdouble (cons 0 (- (length pt) 1)))
  )
  (setq sarray (vlax-safearray-fill arrayspace pt))
  (vlax-make-variant sarray)
)
;;;---------------------------------
;;; Punkt in 2D-Punkt wandeln
;;;---------------------------------
(defun 2dpoint (point) (list (car point) (cadr point)))

[Diese Nachricht wurde von andi2050 am 16. Dez. 2008 editiert.]

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

tklingler
Mitglied
Metallbautechniker


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

Beiträge: 24
Registriert: 07.06.2008

erstellt am: 17. Dez. 2008 12: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

Es ist toll wenn du dich nicht zurückhalten kannst. Es funzt super. Wenn du mal ins Allgaü kommst dann kannst du dir bei mir eine Flasche Sekt abhohlen wenn du möchtest

------------------
Technik & Design

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

Romuald Ferreux
Mitglied


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

Beiträge: 2
Registriert: 25.03.2020

erstellt am: 25. Mrz. 2020 07: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 tklingler 10 Unities + Antwort hilfreich

Guten Morgen zusammen  ,

Diese Tool ist Absolute Geil und für mich nötig ich benutze die Lisp alle Tage.

Ich habe diese Lisp Angepasst um mein Struktur und möchte Gern noch ein Punkt noch Lösen.

Gib es Möglichkeiten zu die Offset Einrichtung auf Bildschirm Definieren ?

Code:
(variant-value (vla-offset plineobj1 (- *blech:Dicke*)))


Vielen Danke für ihre Hilfe

Mfg

Romu


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

Hämmy
Mitglied
Technischer Zeichner


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

Beiträge: 14
Registriert: 01.04.2020

Windows 10 Professional 64-Bit
Intel Core i7-3770
3,40GHz
32,0 GB RAM
Grafikkarte Radeon RX 470

erstellt am: 25. Mai. 2020 09: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 tklingler 10 Unities + Antwort hilfreich

die Frage finde ich gut, würde mich auch interessieren 

Was für mich noch Interessant wäre, kann man das Blech dann gleich auf einen bestimmten Layer setzen, und es mit einer bestimmten Schraffur und Schraffur-Abstand-Maßstab füllen?

Das würde mir einiges an Zeit sparen, da ich meine Bleche immer mit ANSI31 in Winkel 0 und Maßstab 15 fülle

Gruß Hämmy

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

Romuald Ferreux
Mitglied


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

Beiträge: 2
Registriert: 25.03.2020

erstellt am: 25. Mai. 2020 10:05    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 tklingler 10 Unities + Antwort hilfreich

Hallo,

Layer und Schraffur ersetzen hab gelöst durch Kondition materialen etw..

Es fehlt nür die möglichkeiten dass die benuzter auf welche Seite offset fest machen.

Wenn jemand kann mir auf diese Punkt Lösung hat....

Dann kann ich diese lisp verteilen  

Vielen Dank

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)2020 CAD.de | Impressum | Datenschutz