Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Inselflächen und Richtundbestimung von Polylinien

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:  Inselflächen und Richtundbestimung von Polylinien (1553 mal gelesen)
steinemann09
Mitglied
Dipl. Ing.


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

Beiträge: 47
Registriert: 27.08.2008

AutoCAD 2005, AutoCAD 2009, Windows XP

erstellt am: 19. Sep. 2008 11: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


Polylinien.pdf


Polylinien.zip

 
Hallo miteinander,

noch eine Ergänzung zum oben genannten Thema. Inselflächen werden in Abhaängigkeit von der Richtung zum Hauptpolygon zur Polygonfläche adiert oder subtrahiert. Im Anhang (PDF oder DWG)
ist die Problematik in einer Übersicht detailliert dargelegt. Wenn über den Umgrenzungsbefehl von ACAD diese Arte von Polygonen generiert werden, beachtet ACAD automatisch den korrekten Richtungsverlauf. Wenn aber aufgrund des mangelhaften Umgrenzungsbefehls (Stützpunkte werden übersprungen etc.) mit pedit Polygone mit Inselflächenerzeugt werden, kann bei falchen Richtingssinn die Inselfläche nicht als Abzugs- sondern als Zuzugsfläche erkannt werden.

Ich suche nach einer Möglichkeit Inselflächen herauszufiltern und den Richtungssinn der Hauptpolygone und der Inselpolygonabschnittes mir anzeigem zu lassen (Entscheidungskrierium Gegen - oder Uhrzeigersinn des Polygons bzw. des Inselpolygonabschnittes).

Da auf den Inselpolygonabschnitte zusätzlich  deckungsgleiche Polygone exestieren, kann man die Fehlflächen nicht mit dem Schraffurbefehl ermitteln.
Vielleicht hat von Euch jemand einen Ansatz,

Gruß Volker

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: 19. Sep. 2008 17:23    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 steinemann09 10 Unities + Antwort hilfreich

Vielleicht hilft Dir der folgende Code weiter ?
Aus einem Auswahlsatz werden die Polylinien nach Laufrichtung CW gefiltert und dann 'gehighlightet'.
Mit 'REGEN' wid das Highlight wieder aufgehoben.

Grüße

Andi

Code:

(defun c:test (/ ss-original ss-gefiltert)
  (setq ss-original  (ssget '((0 . "LWPOLYLINE")))
        ss-gefiltert (dir-filter ss-original "CW")
  )
  (ss-foreach ss-gefiltert '(lambda (ename) (redraw ename 3)))
)
;;;---------------------------------------------
;; Filtert Auswahlsatz mit Plines nach Laufrichtung
;;; Argumente: ss - Auswahlsatz (nur Polylinien dürfen enthalten sein)
;;; dir - "CW" oder "CCW"
;;; Rückgabe: gefilterter Auswahlsatz
;;;---------------------------------------------
(defun dir-filter (ss dir / ssneu)
  (setq ssneu (ssadd))
  (ss-foreach ss
              '(lambda (ename /)
                (if (= dir (getdir-pline ename))
                  (ssadd ename ssneu)
                )
              )
  )
  ;; Rückgabe
  ssneu
)
;;; ---------------------------------------
;;; ermittelt Laufrichtung von Pline
;;; Argumente: ename - ename von Pline
;;; Rückgabe: "CW" oder "CCW"
;;; ---------------------------------------
(defun getdir-pline (ename /)
  (if (minusp
        (seglist-area (obj2seglist (vlax-ename->vla-object ename)))
      )
    "CW"
    "CCW"
  )
)
;;; ---------------------------------------
;;; ermittelt Fläche von Segmentliste nach Gauss... Algorithmus
;;; Argumente: seglist - Segmentliste
;;; Rückgabe: Flächeninhalt: negativ bei Laufrichtung CW
;;;     positiv bei Laufrichtung CCW
;;; ACHTUNG: ggf. Fehlerhaft bei offenen Konturen
;;; ---------------------------------------
(defun seglist-area (seglist /)
  (* 0.5
    (apply '+
            (mapcar '(lambda (seg)
                      (+ (if (zerop (caddr seg))
                            0.0
                            (* 2 (seg-area seg))
                          )
                          (* (- (caar seg) (caadr seg)) (+ (cadar seg) (cadadr seg)))
                      )
                    )
                    seglist
            )
    )
  )
)
;;; Hilfsfunktionen
(defun ss-foreach (ss expr / i)
  (if ss
    (repeat (setq i (sslength ss)) ((eval expr) (ssname ss (setq i (1- i)))))
  )
)
(defun seg2rad (seg /)
  (/ (* 0.5 (distance (car seg) (cadr seg)))
    (sin (* 0.5 (* 4 (atan (caddr seg)))))
  )
)
(defun seg-area (seg / alfa r)
  (setq alfa (* 4 (atan (caddr seg)))
        r    (seg2rad seg)
  )
  (* (* 0.5 (* r r)) (- alfa (sin alfa)))
)
(defun obj2seglist (obj / endpara para seglist)
  (setq endpara (vlax-curve-getendparam obj)
        para    (vlax-curve-getstartparam obj)
  )
  (while (< para endpara)
    (setq seglist (cons (list (vlax-curve-getpointatparam obj para)
                              (vlax-curve-getpointatparam obj (1+ para))
                              (vla-getbulge obj para)
                        )
                        seglist
                  )
          para    (1+ para)
    )
  )
  (reverse seglist)
)

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



Projektingenieur (w/m/d) Versorgungstechnik (HLSK)
Als führendes europäisches Beratungs-, Planungs- und Projektmanagementunternehmen bietet Drees & Sommer Lösungen für erfolgreiche Gebäude, renditestarke Portfolios, leistungsfähige Infrastruktur und lebenswerte Städte. In interdisziplinären Teams unterstützen unsere über 5.100 Mitarbeiterinnen und Mitarbeiter an 59 internationalen Standorten Auftraggeber unterschiedlichster Branchen. Bei uns gestalten Sie Ihren individuellen Karriereweg aktiv mit....
Anzeige ansehenGebäude-, Versorgungs-, Sicherheitstechnik
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: 22. Sep. 2008 12:32    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 steinemann09 10 Unities + Antwort hilfreich

Hallo,
nur mal so ...
wenn Du Deine Polylinien (Dein Anhang oben) sprengst und die Teilstücke dem Befehl Region übergibst, erhälst Du erstmal die "richtige" Anzahl Regionen (solange die Pl nicht zu sehr verschachtelt ist oder sich selbst kreuzt),
Diese Regionen kannst Du nun auswerten nach Flächen und "Eckpunkten"/Stützpunkten. (größte Fläche sollte dann die Hauptfläche sein)
Über die Eckpunkt sollte es nun möglich sein die Laufrichtung zu bestimmen.
Wenn Polygonabschnitte sich überschneiden, sollte dies beim Abgleich mit der Liste der Stützpunkte der Ursprungsline eingehen...
Naja...
Mfg Heiko

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