Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Basispunkt Schraffur

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:  Basispunkt Schraffur (2522 mal gelesen)
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: 19. Feb. 2009 11: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

hallo,
gibt es eine einfache Art, den Basispunkt einer Schraffur zu ermitteln (wird bei Auswahl als blauer Griff dargestellt)

Ich habe es mit (trans '(0.0 0.0) ename-Schraffur 0) probiert, aber irgendwie fuzt das alles nicht.

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

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

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: 19. Feb. 2009 11: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 joern bosse 10 Unities + Antwort hilfreich

IMHO ist es die (vla-) CENTROID-Eigenschaft der aus der Umgrenzung erzeugten Region ..


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

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: 19. Feb. 2009 12: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

Hallo CADmium,
genau das war's, danke!!!
(vlax-safearray->list(vlax-variant-value(vla-get-Centroid(vlax-ename->vla-object (entlast)))))

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

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

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

autocart
Mitglied
Technischer Redakteur


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

Beiträge: 695
Registriert: 08.09.2003

erstellt am: 20. Feb. 2009 08:52    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 joern bosse 10 Unities + Antwort hilfreich

Hallo Jörn und Thomas!

Das stimmt anscheinend für schöne rechteckige Schraffuren/Regionen.
Ich habe aber mal eine total ausgefranste unsymmetrische Schraffur gezeichnet und -> da liegen der Basispunkt der Schraffur und das Centroid der Region deutlich voneinander entfernt.

------------------
Gruß, Stephan
www.stbartl.at

[Diese Nachricht wurde von autocart am 20. Feb. 2009 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: 20. Feb. 2009 09:12    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 Stephan,
das habe ich dann auch festgestellt, aber aus Zeitmangel weitere Experimente eingestellt.
Jetzt wo Du es ansprichst, vielleicht gibt es eine einfache Möglichkeit einen Punkt zu ermitteln, der in jedem Fall innerhalb der schraffierten Fläche liegt (könnte man sicherlich über eine mühselige Auswertung der Umringsdaten schaffen, das ist mir aber zu aufwendig)

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

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

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. Feb. 2009 09:19    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 joern bosse 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von joern bosse:
vielleicht gibt es eine einfache Möglichkeit einen Punkt zu ermitteln, der in jedem Fall innerhalb der schraffierten Fläche liegt (könnte man sicherlich über eine mühselige Auswertung der Umringsdaten schaffen, das ist mir aber zu aufwendig)


innerhalb der schraffierten Fläche liegt der (markierte) Basispunkt aber auch nicht zwangsläufig, fenausowenig wie Centroid ... da kannst du bloß die Umgrenzungsdaten nehmen! Was ist eigentlich Zweck derÜbung?

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

autocart
Mitglied
Technischer Redakteur


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

Beiträge: 695
Registriert: 08.09.2003

erstellt am: 20. Feb. 2009 09: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 Nur für joern bosse 10 Unities + Antwort hilfreich

Wenn es dir "nur" um einen innerhalb liegenden Punkt geht, dann könntest du einen Seed-Point nehmen. Voraussetzung ist halt, dass es sich sich um Schraffuren handelt, die mit Seed-Points erzeugt wurden. Aber das müsste sich ja theoretisch leicht abfragen lassen: Wenn es einen oder mehrer Seed-Points gibt, dann sollte es passen. Wenn es keine Seed-Points gibt, dann wurde die Schraffur anders erzeugt.

[EDIT]: Muß mich leider korrigieren!!
Wenn der User die Schraffur auch mit Seed-Points erstellte, aber während des Erstellens Teile der Umgrenzung entfernt hat, können Seed-Points auch außerhalb liegen. Tut mir leid, zu schnell geschossen.

------------------
Gruß, Stephan
www.stbartl.at

[Diese Nachricht wurde von autocart am 20. Feb. 2009 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: 20. Feb. 2009 09: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

@CADmium
Zitat:
Was ist eigentlich Zweck derÜbung?

Der Sinn ist es, pro Schraffurfläche einen Block mit der Flächengröße zu setzen. Diese Inhalte der Flächenblöcke werden später in Excel ausgewertet, d.h., wenn mal ein Block nicht in der Fläche ist es nicht so schön, aber kein Weltuntergang.

@Stephan
Seed-Point
da muss ich entweder ein bißchen im Netz suchen, oder Du postest mal ein Beispiel. Seed-Point höre ich zum ersten mal, aber man lernt ja nie aus

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

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

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

autocart
Mitglied
Technischer Redakteur


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

Beiträge: 695
Registriert: 08.09.2003

erstellt am: 20. Feb. 2009 10: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 Nur für joern bosse 10 Unities + Antwort hilfreich

Wie im Edit beschrieben, ist das leider hinfällig.

Aber grundsätzlich: Seed-Points sind die Punkte, die der User beim Erstellen einer Schraffur angibt, wenn er sie mit automatischer Flächenerkennung erstellt. In der entget-Liste des Hatch sind das DIE (10 ...)er-GCs die AUF einen (98 . Zahl)-GC FOLGEN. Sie stehen normalerweise ziemlich am Ende der Liste. Der 98er-GC gibt die Anzahl der Seed-Points an.

Aber nochmals zu deinem Problem: Genügt es da nicht eventuell, wenn du den Block genau AUF einen Eckpunkt der Umgrenzung legst. Diese müssten ja theoretisch leicht zu eruieren sein. (Hoffentlich hab ich da nicht wieder zu schnell geschossen - Hatches sind ja komplizierter als einem lieb ist.)

------------------
Gruß, Stephan
www.stbartl.at

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

Fiedelzastrow
Mitglied
Architekt / Bauzeichner


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

Beiträge: 993
Registriert: 05.07.2007

Win XP
AutoCAD 2006
AutoCAD 2009
AutoCAD 2013 LT

erstellt am: 20. Feb. 2009 10: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 joern bosse 10 Unities + Antwort hilfreich

Hallo Jörn,
meinst Du sowas wie "Hatchfl" auf der www.cadwiesel.de  Seite?

Gruß
Robert

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: 20. Feb. 2009 10:26    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 Stephan,
Zitat:

Aber nochmals zu deinem Problem: Genügt es da nicht eventuell, wenn du den Block genau AUF einen Eckpunkt der Umgrenzung legst. Diese müssten ja theoretisch leicht zu eruieren sein. (Hoffentlich hab ich da nicht wieder zu schnell geschossen - Hatches sind ja komplizierter als einem lieb ist.)

Habe ich auch gedacht, aber wenn ich davon ausgehe, das 95 % der Flächen eine "schöne" Geometrie haben, z.B. ein Rechteck, dann sind es nur noch 5 % der Flächen, wo der Block außerhalb eingefügt wird.

Wenn ich aber auf den Rand einfüge, dann sieht das bei 100 % der Flächen ziemlich bescheiden aus, und dann kommt noch hinzu, das die optische Identifizierung schwerfällt, wenn verschiedenen Flächen direkt aneinander liegen.

Danke für die Erklärungen zu den Seed-Points.

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

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

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: 20. Feb. 2009 10:30    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

@Robert,
ja, so in etwas, allerdings werden die Flächensummen pro Layer nicht in einer Legende dargestellt, sondern in Excel ausgewertet. (=> Flächenblöcke => ATTEXT => Excel)

Ich würde sagen, meine Fragen zu dem Thema sind beantwortet.

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

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

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: 22. Feb. 2009 08:54    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 joern bosse 10 Unities + Antwort hilfreich

Der Griffpunkt einer Schraffur liegt glaube ich genau auf dem Mittelpunkt der BoundingBox dieser Scharffur.

Grüße
Andi

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 22. Feb. 2009 13: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 Nur für joern bosse 10 Unities + Antwort hilfreich


SchraffureinfuegepunktgleichBoundingsboxzentrum.jpg

 
Zitat:
Original erstellt von andi2050:
Der Griffpunkt einer Schraffur liegt glaube ich genau auf dem Mittelpunkt der BoundingBox dieser Scharffur.

Grüße
Andi


Ja tatsächlich, erste Tests bestätigen das - wie einfach.
Allerdings unbrauchbar um einen Punkt zu erhalten, der innerhalb der Schraffur liegt.

------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

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

Andreas Kraus
Mitglied
Elektrotechniker


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

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 24. Feb. 2009 09:02    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 joern bosse 10 Unities + Antwort hilfreich

Hallo Jörn,
ich hab da mal was zusammengebaut aus einer anderen Sache in der es um Polylinien geht, aber die Stützpunkte kannst du ja auch aus der Schraffur ermitteln.
Ich hab da Punkte innerhalb der Polylinie gebraucht und ich denke das lässt sich mit geringem Umbau verwenden.

(defun c _in_pline ()
  (defun intersect (ent1 ent2 extend / ar)

    (defun gather (ls len / tmp rl i)
      (setq i 0)
      (foreach item ls
(setq tmp (append tmp (list item)))
(setq i (1+ i))
(if (zerop (rem i len))
  (setq rl  (cons tmp rl)
tmp nil
  )
)
      )
      (reverse rl)
    )
    (cond
      ((= extend 0)
      (setq ar
      (vlax-invoke-method
(vlax-ename->vla-object ent1)
'IntersectWith
(vlax-ename->vla-object ent2)
acextendnone
      )
      )
      )
      ((= extend 1)
      (setq ar
      (vlax-invoke-method
(vlax-ename->vla-object ent1)
'IntersectWith
(vlax-ename->vla-object ent2)
acextendthisentity
      )
      )
      )
      ((= extend 2)
      (setq ar
      (vlax-invoke-method
(vlax-ename->vla-object ent1)
'IntersectWith
(vlax-ename->vla-object ent2)
acextendotherentity
      )
      )
      )
      ((= extend 3)
      (setq ar
      (vlax-invoke-method
(vlax-ename->vla-object ent1)
'IntersectWith
(vlax-ename->vla-object ent2)
acextendboth
      )
      )
      )
    )
    (if
      (/= -1
  (vlax-safearray-get-u-bound
    (vlax-variant-value ar)
    1
  )
      )
      (gather
(vlax-safearray->list
  (vlax-variant-value ar)
)
3
      )
    )
  )

  (setq ent_data (entget (setq ent_name (car (entsel)))))
;;; Stützpunkte in Liste
  (setq p_list1 (mapcar 'cdr
(vl-remove-if-not
  '(lambda (data) (= 10 (car data)))
  ent_data
)
)
  )
;;; Liste mit jeweils übernächstem Stützpunkt
  (setq p_list2 (append (cddr p_list1)
(list (nth 0 p_list1) (nth 1 p_list1))
)
  )
;;; Mitte zwischen Stützpunkt und übernächstem Stützpunkt
  (setq p_list (mapcar '(lambda (p1 p2)
  (mapcar
    '(lambda (x1 x2) (/ (+ x1 x2) 2))
    p1
    p2
  )
)
      p_list1
      p_list2
      )
  )
;;; Mitte von Bounding Box
  (vla-getboundingbox
    (vlax-ename->vla-object ent_name)
    'minp
    'maxp
  )
  (setq minp (vlax-safearray->list minp))
  (setq maxp (vlax-safearray->list maxp))
  (setq pz (mapcar
    '(lambda (x1 x2) (/ (+ x1 x2) 2))
    minp
    maxp
  )
  )
;;; von jedem ermitteltem Punkt einen Strahl zur Mitte Bounding Box erzeugen und Anzahl der Schnittpunkte mit Polylinie ermitteln
;;; Strahl wieder löschen
;;; wenn Anzahl ungerade, dann ist der Punkt innerhalb (wenn gerade dann außerhalb)
;;; mit diesem Ergebniss Punktliste erzeugen
;;; die Punkte in dieser Liste liegen innerhalb der Polylinie
  (setq
    p_list (vl-remove 'nil
      (mapcar
'(lambda (p)
  (setq p (mapcar '* '(1.0 1.0 0.0) p))
  (setq
    ray
      (entmakex
(list '(0 . "RAY")
      '(100 . "AcDbEntity")
      '(67 . 0)
      '(410 . "Model")
      (assoc 8 ent_data)
      '(100 . "AcDbRay")
      (cons 10 p)
      (cons 11
    (mapcar '- (polar p (angle p pz) 1.0) p)
      )
)
      )
  )
  (setq int_list (intersect ent_name ray 0))
  (entdel ray)
  (if (= (rem (length int_list) 2) 1)
    p
    nil
  )
)
p_list
      )
  )
  )
)

Gruß
Andreas

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. Feb. 2009 09: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


in_pline.dwg.txt

 
Hallo Andreas,
danke erstmal, aber für mich ist das Problem bereits abgeschlossen, weil der Kunde mit der (nicht so schönen Lösung) leben kann.

Aber interessant allemal, ich habe mal ein paar Testläufe gemacht (siehe dwg-Datei). Den Code habe ich dazu aufgrund eines akuten Zeitmangels noch nicht seziert, vielleicht kannst Du aber noch einmal in ein paar kleinen Sätzen beschreiben, nach welchen Kriterien wo und wieviel Punkte erzeugt werden.

Bei der Umsetzung des Codes zur Nutzung in Schraffurflächen sehe ich die ersten Probleme bei Inseln. Schade, hier gibt es keinen Smilie für Schwarzmaler

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

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

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


Ex-Mitglied

erstellt am: 24. Feb. 2009 09:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat


StrahlenMethode_AcadProb_AN01.jpg

 
Hi Andreas,

ich mische mich nicht gern bei Lisp ein, möchte aber nur eine Erfahrung mit AutoCAD zu folgendem abgeben:

Zitat:
;;; von jedem ermitteltem Punkt einen Strahl zur Mitte Bounding Box erzeugen und Anzahl der Schnittpunkte mit Polylinie ermitteln
;;; Strahl wieder löschen
;;; wenn Anzahl ungerade, dann ist der Punkt innerhalb (wenn gerade dann außerhalb)
;;; mit diesem Ergebniss Punktliste erzeugen
;;; die Punkte in dieser Liste liegen innerhalb der Polylinie

Mit der Strahlenmethode hast Du (mit AutoCAD) zwei Probleme:

a) läuft der Strahl (UND JETZT KOMMTS) in der Nähe eines Stützpunkts vorbei (den Begriff 'Nähe' kann ich leider nicht mathematisch definieren), dann bekommst Du nicht einen, sondern zwei Schnittpunkte!!

b) (eher seltener Fall, kommt aber vor) wenn eine Polylinie so gezeichnet wird, dass Segmente der Polylinie überlagernd gezeichnet werden (siehe Beispiel mit Screenshot), dann liefert AutoCAD nicht die Schnittpunkte beider Segemente, sondern nur einen Schnittpunkt (im Beispiel schneidet der grüne Strahl die Kontour eigentlich 3 mal, von AutoCAD retourniert nur 2 Schnittpunkte, da die Liste der Schnittpunkte von AutoCAD 'schönheitshalber' bereinigt wird und doppelte rausfliegen).

BITTE ==> soll keinesfalls als Kritik oder Besserwisserei verstanden werden, aber vielleicht hilft's mal, wenn solche Dinge auftreten.

- alfred -

------------------
www.hollaus.at

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. Feb. 2009 09:55    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 Alfred,
na mir hat es auf jeden Fall geholfen, dadurch das Du die Vorgehensweise von Adreas's Code als Zitat hervorgehoben hast (habe ich vorher gar nicht so recht gesehen weil ich nur flüchtig drüber gelesen habe) hat sich meine Frage an Adreas erledigt.

und zu a)
vielleicht liege ich falsch, aber dann könnte man noch den Abstand der ermittelten Schnittpunkte berücksichtigen, wenn dieser kleiner als eine gesetzte Grenze ist, dann ist es quasi ein Punkt.

und zu b)
wenn man die Polylinie temporär in den Ursprung zerlegt, dann müßte wieder die korrekte Anzahl von Schnittpunkte rauskommen.

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

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

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


Ex-Mitglied

erstellt am: 24. Feb. 2009 10:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Jörn,
Zitat:
wenn dieser kleiner als eine gesetzte Grenze ist, dann ist es quasi ein Punkt
...ich hab nur diese Toleranz noch nicht herausgefunden, ob's abhängig von Zoomausschnitt ist, ob's abhängig von Koordinatenbereich ist (geodätisch hohe Coords oder nahe 0,0,0). Ich hab mich durch Auftreten von Problemen schon mal von der Strahlenmethode grundsätzlich verabschiedet.
Zitat:
wenn man die Polylinie temporär in den Ursprung zerlegt
...wenn Performance kein Problem ist, kann man das. Wenn es sich dabei aber um 1000'nde Flächen handelt, dann wird's nicht mehr so easy, denn dann muss ich den Strahl mit jedem der resultierenden Linien/Bögen schneiden lassen, kostet Zeit.

- alfred -

------------------
www.hollaus.at

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 24. Feb. 2009 11:39    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 joern bosse 10 Unities + Antwort hilfreich

Hallo,

ich habe mir vor geraumer Zeit mal eine DLL in C# geschrieben, die ermittelt ob ein Punkt innerhalb eines Polygons (ohne Kurvensegmente!!) liegt oder nicht.

Nachfolgend der C# Code davon, den kann man sicher auch nach Lisp umbasteln.

Code:

///isPointInsidePolygon (
///                      X-Koordinaten des Polygons,
///                      Y-Koordinaten des Polygons,
///                      X-Koordinate des Punktes,
///                      Y-Koordinate des Punktes)
public static bool isPointInsidePolygon(double[] x, double[] y,
                                                    double pointX, double pointY)
        {
            bool isInside = false;
            int nPoints = x.Length;

            int j = 0;
            for (int i = 0; i < nPoints; i++)
            {
                j++;
                if (j == nPoints) j = 0;

                if (y[i] < pointY && y[j] >= pointY | | y[j] < pointY && y[i] >= pointY)
                {
                    if (x[i] + (pointY - y[i]) / (y[j] - y[i]) * (x[j] - x[i]) < pointX)
                    {
                        isInside = !isInside;
                    }
                }
            }

            return isInside;
        }


Bei Fragen ...

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.

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

Andreas Kraus
Mitglied
Elektrotechniker


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

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 24. Feb. 2009 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 joern bosse 10 Unities + Antwort hilfreich

@alfred
ist ja auch nur ein Auszug aus einem Programm das eigentlich etwas anderes macht. Ich check da natürlich noch mehr. Soll ja auch nur eine Idee zum probieren sein.

Zu prüfen ist ob ein gefundener Punkt AUF der Polylinie liegt.

Ich hätte da eine Idee zum "Freiraum" checken:
Rechteck erzeugen der den Text gerade so einschließt
Schnittpunkte ermitteln für die einzelnen möglichen Einfügepunkte
Entfernungen von Einfügepunkt zu den Schnittpunkten ermitteln
Der mit den größten Entfernungen hat den meisten Platz
Ideal ist wenn kein Schnittpunkt gefunden wird, dann ist sicher genug Platz.

Da gibts sicher auch wieder was, aber auch das ist ja nur so ne Idee.


Gruß
Andreas

[Diese Nachricht wurde von Andreas Kraus am 25. Feb. 2009 editiert.]

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