Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Punktliste einer Schraffur ermitteln

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:  Punktliste einer Schraffur ermitteln (860 mal gelesen)
MICDEN
Mitglied
dipl.-ing.

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

Beiträge: 3
Registriert: 11.01.2009

erstellt am: 11. Jan. 2009 14:13    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 Forum,

vielleicht kann mir jemand von Euch mit einem Tipp weiterhelfen?
Ich versuche ein LISP-Programmcode, der in den 90er (Autcad'R12) prorammiert wurde 'wiederzubeleben' (für Version 2005/2006).
Das Programm unterteilt eine 2D-Kontur in Segmente deren Anzahl frei wählbar sein soll. Das Unterteilen der Kontur erfolgte durch das Anlegen einer Schraffur, damit durch die Vorgabe des Abstandes die Anzahl der Segmente bestimmt werden kann. Anschließend sollen die Koordinaten aller einzelnen Schraffurlinien (jeweils Start-x, Start-y und End-x, End-y) in eine Punktliste gespeichert werden, damit für jedes Segment die Fläche mittels dieser Koordinaten berechnet werden kann.

Für die Schraffur nehme ich die folgenden Programmzeilen

----------------------------------------------------------------------------------

Code:

;Basispunkt für die Schraffur setzen
  (setvar "snapbase" snapbase)
;Layer und Schraffur erzeugen
  (command "layer" "set" layername "")
  (command "schraff" "b" 0 abstand "n" objektwahl "")

  (segmentkoordinaten) ;aufruf von defun punktliste...



-----------------------------------------------------------------------

Um die 'Schraffurkoordinaten' zu ermitteln lautet der Code (bisher)

Code:

------------------------------------------------------------------------
(defun segmentkoordinaten (/ pliste blockname entity wert eintrag)

; Block einlesen, um an Assotiationsliste zu gelangen
  (setq block (entget(entlast)))
;Schraffurblockname aus Vektorliste
  (setq blockname (cdr (assoc 2 (entget (entlast)))))
 
;Elementname des ersten Schraffurelementes
  (setq entity (cdr (assoc -2 (tblsearch "block" blockname))))

;gesuchten Koordinaten in Liste schreiben
  (while entity
    (setq pliste
  (append
    pliste
    (list
      (list (cadr (assoc 10 (setq eintrag (entget entity))))
    (cadr (setq wert (assoc 11 eintrag)))
    (caddr wert)
      )
    )
  )
    )
    (setq entity (entnext entity))
  ) ;end while
---------------------------------------------------------------------------


Durch die Variabel block kann ich erkennen, dass die Attribute zur Schraffur gehören müssen (z.B. (0."HATCH")
Blockname lautet immer 'user', da ich die Schraffur entsprechend vorgebe.

ABER. Entity ist immer leer (nil). Warum verstehe ich nicht.
Wie komme ich nun an die Werte heran? Wenn ich mir das DXF-Format der Zeichnung ansehe, dann kann ich die Koordinaten erkennen, d.h für mich, dass diese Koordinaten doch irgendwo stehen müssen.

Kann mir jemand sagen, wo der Fehler liegt /liegen könnte?

Gruß
Dennis

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


Ex-Mitglied

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

Hi Dennis,

herzlich willkommen bei CAD-de!

Ohne mit Lisp-Wissen ausgestatten zu sein, ich glaube dass Du mit der Annahme, dass Schraffuren noch Blöcke sind (wie es eben in AutoCAD 12 noch war), den Code nicht zum Laufen bekommen wirst.

Was ist denn das Ziel? Ich kann's mit mit Deiner Beschreibung leider nicht vorstellen (Unterteilen einer Kontur in gleichmässige teile würde ich mit '_measure' oder '_divide' machen, aber nicht mit Schraffur, denn eine Polylinie, die nicht gerade verläuft, erhält so unterschiedliche Segmentabstände).

- alfred -

MICDEN
Mitglied
dipl.-ing.

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

Beiträge: 3
Registriert: 11.01.2009

erstellt am: 11. Jan. 2009 19:17    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


SegmentpunktedurchSchraffur.jpg

 
Hallo Alfred,

danke für die schnelle Reaktion.

Ich möchte nicht die Polylinie, d.h den Umriss unterteilen, sondern eine Kontur in Segmente bzw. einzelne Flächen aufteilen. Ich hoffe, dass die Zeichnung besser als meine Erklärung ist...

Gruß
Dennis

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


Ex-Mitglied

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

Hi Dennis,

danke für die Erklärung, macht einiges klarer  

Zitat:
(assoc 2 (entget (entlast)))
da ist Dein Fehler, probier mal händisch eine Schraffur zeichnen und dann:
Code:
(assoc 2 (entget (cad (entsel))))
da, wie schon vorher angegeben, eine Schraffur heute kein Block mehr ist, daher bekommst Du hier auch keinen Blocknamen raus.

- alfred -

MICDEN
Mitglied
dipl.-ing.

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

Beiträge: 3
Registriert: 11.01.2009

erstellt am: 12. Jan. 2009 19: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

Servus Alfred,

der 'CAD'-Befehl funktioniert bei mir nicht. Ich habe aber nach ein wenig Bastelei eine andere Lösung gefunden.

Ich lese jetzt die max. Breite der Kontur ein. Setze einen Eckstartpunkt und zeichne ab hier einfach Linien deren Länge der max. Konturbreite entsprechen.
Der Abstand der Linien zueinander entspricht dem Abstand den ich in der Schraffur verwendet habe.

Anschließend können die Schnittpunkte der Linien mit der Kontur bestimmt werden und so erhalte ich die Punktliste.

Ich habe den Code auf einem anderen Rechner. Sag bitte Bescheid wenn Du daran interessiert bist. Dann stelle ich diesen morgen rein.

Gruß und vielen Dank für die Unterstützung

Dennis

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