Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  linienkoordinaten in block

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:  linienkoordinaten in block (952 mal gelesen)
fca_mi2
Mitglied
Bauingenieur


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

Beiträge: 505
Registriert: 10.01.2003

ACAD2018

erstellt am: 02. Jul. 2021 07: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

hallo,

ich habe einen block in meinem plan.
gibt es eine möglichkeit die koordinaten einer linie in diesem gedrehten (verzerrten) block auszulesen ? ich meine ohne selbst mit koordinatentransformationen rechnen zu müssen ?

------------------
MfG
Frank

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

Meldin
Mitglied



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 02. Jul. 2021 08:20    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 fca_mi2 10 Unities + Antwort hilfreich

ohne groß drüber nachzudenken schieß ich mal einen wilden gedanken raus hohhe das reicht für einen Freitag morgen. da es ohne große berechnungen sein soll:
command nk
letztes objekt
anfang ende ermitteln
letztes objekt löschen

------------------
Gruß Wolfgang

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

fca_mi2
Mitglied
Bauingenieur


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

Beiträge: 505
Registriert: 10.01.2003

ACAD2018

erstellt am: 02. Jul. 2021 08:38    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

aha, nkopie kannte ich auch noch nicht

geht es vielleicht auch ohne command ?

------------------
MfG
Frank

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 02. Jul. 2021 08: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 Nur für fca_mi2 10 Unities + Antwort hilfreich

Der einfache Weg ist: Explodieren, am besten über vla-explode, Daten greifen, Objekte löschen.

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: 02. Jul. 2021 10: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 fca_mi2 10 Unities + Antwort hilfreich

Hallo Frank,
wenn du Anfangs- und Endpunkt einer Linie aus einer bestimmten Blockeinfügung brauchst musst du ja auch wissen welche Blockeinfügung das ist.
Ich gehe also mal davon aus dass du das weist.
Wenn du die Linie mit (nentsel) anklickst bekommst du als letzen Eintrag in der Ergebnisliste die Liste der Blöcke in der die Linie verschachtelt ist.
Diese Liste brauchst du.

Außerdem brauchst du natürlich des erste Element der Ergebnisliste, das ist ja die Linie selbst.

Jetzt ermittelst du z.B. den Startpunkt und benutzt die unten stehende Funktion "k_blk-p->layout-p" (die beiden anderen Funktionen musst du auch laden weil die unterwegs gebraucht werden) und bekommst den entsprechenden Punkt außerhalb des Blocks zurück.

Es wird hier der ursprüngliche Punkt mit den Skalierfaktoren multipliziert die Blockeinfügepunkte addiert und der Drehwinkel berücksichtigt egal wie weit die Struktur verschachtelt ist.

Hab ich auch anders herum (also von außerhalb des Blocks hinein)
Viel Spass damit 

Code:
(defun k_blk-p->layout-p (p inslist)
;;; gibt von einem Punkt in einer Blockdefinition den entsprechenden Punkt in der Zeichnung zurück
;;; p = Punkt in der Blockdefinition
;;; inslist = Liste der Inserts wie sie z.B. von nentsel zurückgegeben wird
  (setq p (k_3d->2d p))
  (foreach ins inslist
    (setq ent_data (entget ins))
    (setq
      p (mapcar
  '*
  p
  (list (cdr (assoc 41 ent_data)) (cdr (assoc 42 ent_data)))
)
    )
    (setq p (mapcar '+ p (k_3d->2d (cdr (assoc 10 ent_data)))))
    (setq p (k_p_twist
      p
      (cdr (assoc 10 ent_data))
      (cdr (assoc 50 ent_data))
    )
    )
  )
  p
)

(defun k_p_twist (p px wx)
;;; Punkt um ein Zentrum rotieren
;;; Winkel in rad
  (setq pz (caddr p) pxz (caddr px))
  (setq p (k_3d->2d p) px (k_3d->2d px))
  (vl-remove 'nil (append (polar px (+ (angle px p) wx) (distance px p)) (list pz)))
)

(defun k_3d->2d (wert / dummy)
  (if (vl-every '(lambda (dummy) (= (type dummy) 'LIST)) wert)
    (mapcar '(lambda (dummy) (list (car dummy) (cadr dummy)))
    wert
    )
    (list (car wert) (cadr wert))
  )
)


------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 02. Jul. 2021 11: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 Nur für fca_mi2 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Andreas Kraus:
[i]Es wird hier der ursprüngliche Punkt mit den Skalierfaktoren multipliziert die Blockeinfügepunkte addiert und der Drehwinkel berücksichtigt egal wie weit die Struktur verschachtelt ist.

Das funktioniert natürlich für jeden beliebigen Koordinatenpunkt innerhalb der Blockdefinition ganz genau so wie für die Punkte, die mit Entities in der Blockdefinition zusammen hängen. Und das geht mit 3D genau so wie mit 2D. Ich würde deshalb eine allgemeine Funktion zur Transformation aus der Blockdefinition in die Blockreferenz schreiben (also z.B. (TRANS-BD->BR pt en) mit en als Ename der Blockreferenz), die man vielfältig auch in anderem Kontext verwenden kann. Und wie der Koordinatenpunkt pt der Blockdefinition gefunden wird, hängt von den Umständen ab, beispielsweise eben durch Wahl eines Entities mit NENTSEL, oder mittels Durchsuchen der Blockdefiniton usw..

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

Meldin
Mitglied



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 02. Jul. 2021 12:22    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 fca_mi2 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von fca_mi2:
ohne selbst mit koordinatentransformationen rechnen zu müssen ?

ist das dann noch so nach k_blk-p->layout-p ?


------------------
Gruß Wolfgang

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 02. Jul. 2021 12: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 fca_mi2 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadffm:
Der einfache Weg ist: Explodieren, am besten über vla-explode, Daten greifen, Objekte löschen.

Das geht meistens schief. Nimm mal an, Du willst eine Ellipse zeichnen, die deckungsgleich über einem in der ungleich skalierten und gedrehten Blockreferenz liegenden Kreis liegen soll.

Um die Transformationsberechnung kommt da keiner vorbei, und die ist hier überaus trivial, und die brauchst Du sowieso bei vielen anderen Aufgaben.

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 02. Jul. 2021 12: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 Nur für fca_mi2 10 Unities + Antwort hilfreich

[Recht hast du]
Aberfür das Annehmen habe ich heute keine Zeit, vor-Urlaub-Stress.

Ich lese nur Koordinaten und was mit denen passiert steht nicht geschrieben,
für Koordinaten sollte es passen. (TRANS sollte wohl noch eingesetzt werden)

Ich nehme auch kein exlode, aber es wurde nach dem "einfachsten" Weg gefragt und das fiel mir dazu ein,
dies erfordert die wenigsten Programmierkenntnisse (vom Code copy&pasten mal abgesehen)

Aber auch wnn nicht, bin auf dem weg  

Gruß Sebastian

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: 02. Jul. 2021 13:09    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 fca_mi2 10 Unities + Antwort hilfreich

Zitat:
ist das dann noch so nach k_blk-p->layout-p ?

Also ich verwende die Funktion um Koordinaten aus zum Teil verschachtelten Blöcken in den Modellbereich zu übertragen.

Bei mir konkret hauptsächlich Leuchten und Brandmelderpositionen aus Xrefs (dort sind die Teile als Blöcke eingefügt) in einen Leerrohrplan. Damit werden dann automatisch die Deckendosen in den Beton gezeichnet (macht Spass  ).

Umrechnen muss ich da gar nichts mehr.
Ich arbeite allerdings im WKS.
Wenn das nicht so ist muss man da noch mit (trans ... ) ran.
Ach ja, die Funktion ist nur für 2D. 3D hab ich dafür noch nie gebraucht, kann aber jeder umbauen der Lust dazu hat  .

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

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

Meldin
Mitglied



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 03. Jul. 2021 13:01    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 fca_mi2 10 Unities + Antwort hilfreich

Also da das Thema hier von linie zu Elipse und Kreis weiter zu Xref gekletter ist.
Wäre hier mein Ansatz für die linie ohne command.
Code:
(if (and
      (setq e (nentselp "\nLinie in Block wählen: "))
      (= (length e) 4)
      (setq Start (getpropertyvalue (car e) "StartPoint"))
      (setq Ende(getpropertyvalue (car e) "EndPoint"))
      (setq matrix (caddr e))
    )
  (progn (setq Start(list
  (+ (* (caar matrix) (car Start)) (last (car matrix)))
  (+ (* (cadadr matrix) (cadr Start)) (last (cadr matrix)))
  (+ (* (cadadr matrix) (caddr Start)) (last (caddr matrix)))
))
(setq Ende (list
  (+ (* (caar matrix) (car Ende)) (last (car matrix)))
  (+ (* (cadadr matrix) (cadr Ende)) (last (cadr matrix)))
  (+ (* (cadadr matrix) (caddr Ende)) (last (caddr matrix)))
))
  )
)

------------------
Gruß Wolfgang

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: 04. Jul. 2021 14: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 fca_mi2 10 Unities + Antwort hilfreich

@Wolfgang
Kann man so machen aber hier wird nur eine Verschachtelungsebene berücksichtigt und die Blockdrehung würde ich auch noch reinbringen, dann ist das universeller.

k_blk-p->layout-p macht das ja.
Ich würds halt so machen:

Code:
(setq e     (nentselp "\nLinie in Block wählen: ")
      start (getpropertyvalue (car e) "StartPoint")
      ende  (getpropertyvalue (car e) "EndPoint")
)

(if (vl-every '(lambda (dummy) (= (type dummy) 'LIST)) (last e))
  (setq start (k_blk-p->layout-p
start
(last e)
      )
ende  (k_blk-p->layout-p
ende
(last e)
      )
  )
)


Muss aber noch gecheckt werden dass man auch eine Linie anklickt oder wenigstens was mit Start- und Endpunkt sonst gibts ne Fehlermeldung.

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

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