| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | Jetzt verfügbar: NVIDIA RTX PRO 6000 Blackwell Server Edition, eine Pressemitteilung
|
Autor
|
Thema: Inselflächen und Richtundbestimung von Polylinien (1603 mal gelesen)
|
steinemann09 Mitglied Dipl. Ing.

 Beiträge: 47 Registriert: 27.08.2008 AutoCAD 2005, AutoCAD 2009, Windows XP
|
erstellt am: 19. Sep. 2008 11:43 <-- editieren / zitieren --> Unities abgeben:         
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
 
 Beiträge: 107 Registriert: 11.03.2003
|
erstellt am: 19. Sep. 2008 17:23 <-- editieren / zitieren --> Unities abgeben:          Nur für steinemann09
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 |

| Anzeige: | Infos zum Werbeplatz >> | GeoTools CAD APP für Tiefbau, Facility Management, GIS, Vermessung und Kartografie GeoTools is a geo-data application that is useful to view, create, modify, analyze and report on CAD data that is geographic in nature. Useful for GIS data creation, surveying, mapping, facilities management, infrastructure, landscape development, city planning or similar, workflows.
|
|
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
  
 Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 22. Sep. 2008 12:32 <-- editieren / zitieren --> Unities abgeben:          Nur für steinemann09
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 >>)
 |