Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Objekte an line oder pline ausrichten

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:  Objekte an line oder pline ausrichten (7757 mal gelesen)
cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 17. Jul. 2009 10: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

Servus Lispler!

Ich habe hier zwar einen Ansatz, aber die Routine funktioniert noch nicht, so wie ich das gern will.

Prinzip soll sein, dass die Objekte (Block mit Attribut) an einer Linie ausgerichtet werden sollen.
Das Lisp was ich habe funktioniert manuell, indem ich einzeln die Blöcke drehe (Kreuzsymbol und Attribut gleichermassen).
Geht das nicht zu machen, dass ich erst die line oder pline wähle und dann alle Objekte wähle, die ausgerichtet werden sollen.

(Ich finde die Funktion den Baspoint extra zu wählen überflüssig, weil er vom Block schon vorgegeben wird)

; Description:
;
; Rotates objects relative to a specific angle or angle of an entity
; 1. select objects to rotate
; 2. select Rotation Baseline (straight segment on object(s) being rotated,
;      which will take on new angle)
; 3. select line segment whose angle you want Baseline to match
; 4. pick Base Point for rotation
; 5. then drag ortho rotation for final position
;==========================================================================
(defun c:rot (/ l:ang r:cang *r2:err* c_e s_a ss ne ed e1 ab am ra bp)

  ;-SELECT LINE, RETURN ANGLE
  (defun l:ang (pmt / e et ed p1 p2 aptr)
    (cond ((not pmt)(setq pmt "\nSelect line: " ne nil))
          ((= (type pmt) 'LIST)(setq ne pmt)) ;called with nentsel list
          ((setq ne nil))
    )
    (if (or ne
            (while (progn (initget "A  ") ;keyword "A" available
                    (setq ne (nentsel pmt))
                    (cond ((not ne)(princ "0 found"))
                          ((listp ne)
                            (setq e (car ne)
                                  ed (entget e)
                                  et (cdr (assoc 0 ed))
                            )
                            (and (/= et "LINE")(/= et "LEADER")
                                  (/= et "LWPOLYLINE")(/= et "VERTEX")
                                  (princ "Invalid object, Try Again ")
                            )
                          )
                    )
                  )
            )
            (/= ne "")
        )
      (cond ((= ne "A") "A")
            (t (setq aptr (getvar "aperture"))
              (setvar "aperture" (getvar "pickbox"))
              (setq p1 (if (= et "XLINE")'(0 0 0)(osnap (cadr ne) "nea"))
                    p2 (if (= et "XLINE")(cdr (assoc 11 ed))(osnap (cadr ne) "endp"))
              )
              (setvar "aperture" aptr)
              (angle p1 p2)
            )
      )
    )
  )
  ;-CORRECT ANGLE
  (defun r:cang (ang rot /)
    (cond ((>= ang rot)(- ang pi))
          ((< ang 0.0)(+ ang pi))
          (ang)
    )
  )
  ;-ERROR HANDLING
  (defun *r2:err* (m)
    (or (member m '("Function cancelled" "quit / exit abort" "console break"))
        (prompt (strcat "\n< " m " >\n"))
    )
    (if s_a (setvar "snapang" s_a))
    (if aptr (setvar "aperture" aptr))
    (setvar "cmdecho" c_e)
    (setq *error* *e*)(princ)
  )

  ;-GET VALUES
  (setq *e* (cond (*e*)(*error*))
        *error* *r2:err*
        c_e (getvar "cmdecho")
  )

  ;-MAIN FUNCTION
  (if (setq ss (ssget))
    (progn
      (setvar "cmdecho" 0)
      (command "rotate" ss "")
      (if (and (setq bp (getpoint "\nBase point: "))
              (setq ab (l:ang "\nSelect rotation baseline: "))
              (setq am (l:ang "\nAngle/<match line>:"))
              (or (/= am "A")(setq am (getangle "\nNew angle: ")))
          )
        (progn
          (setq ra (- am ab)
                s_a (getvar "snapang")
          )
          (setvar "orthomode" 1)
          (prompt "\nOrtho position: ")
          (setvar "snapang" 0.0)
          (command bp (/ (* ra 180.0) pi) "rotate" ss "" bp pause)
          (setvar "snapang" s_a)(setq s_a nil)
        )
        (command)
      )
    )
  )

  ;-RETURN VARIABLES
  (setvar "cmdecho" c_e)
  (setq *error* *e*)
  (princ)
)
;-END FILE

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


Ex-Mitglied

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


DynBlock_Ausrichtungsparameter_2009_AN02.zip

 
Hi,

Sorry, ich funke schon wieder dazwischen, aber dafür brauchst Du kein Tool, das kann AutoCAD schon.

Schau mal bei der Blockdefinition auf die Werkzeugpalette 'Blockerstellungspalleten' 'Parameter' und dort 'Ausrichtungsparameter'. Hat Deine Blockdefinition einen solchen Parameter, dann wird beim ziehen des Blocks zu einer z.B. Polylinie automatisch eine Ausrichtung erkannt.

Zeichnung liegt bei, viel Erfolg, - alfred -

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

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

Super Alfred. Funzt bestens, ist natürlich simpel (ohne viel Lisp-aufwand). Ich bin da noch nicht ganz bei den dynamischen Blöcken durchgestiegen.

Von der Arbeitsweise her ist so, dass ich den dynamische Block manuell an Linie führen muss (geile Formulierung).
Was ist aber, wenn ich ähnlich wie bei measure alle Blöcke per einem Arbeitsgang an ein pline generiere, dann wird der Block autom. ausgerichtet.

Andersrum wäre es hilfreich für mich, wenn ich einen Polygon wähle, dass dann alle Entities daran ausgerichtet werden. Einfach deshalb, weil ich nicht nur dyn. Blöcke habe (Bedarf auch Zeit alle Blöcke umzuschreiben).

Gruss Dirk

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

tunnelbauer
Ehrenmitglied V.I.P. h.c.
Bauingenieur



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

Beiträge: 7085
Registriert: 13.01.2004

ich hab eh keine Probleme damit...

erstellt am: 17. Jul. 2009 11:31    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 cadplayer 10 Unities + Antwort hilfreich

Also eventuell steh ich grad am Schlauch oder kapier es prinzipiell nicht. Aber _measure kann bei mir auch Blöcke am Objekt ausrichten...

------------------
Grüsse

Thomas

Korrekturen zum Kochbuch AutoLISP

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


Ex-Mitglied

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

Hi, 
Zitat:
Was ist aber, wenn ich ähnlich wie bei measure alle Blöcke per einem Arbeitsgang an ein pline generiere, dann wird der Block autom. ausgerichtet
...funktioniert auch mit dem Ausrichtungsparameter im Block, kein Unterschied zu ohne ...

Zitat:
Andersrum wäre es hilfreich für mich, wenn ich einen Polygon wähle, dass dann alle Entities daran ausgerichtet werden. Einfach deshalb, weil ich nicht nur dyn. Blöcke habe (Bedarf auch Zeit alle Blöcke umzuschreiben).
...wenn bereits Elemente bestehen, die nicht ausgerichtet sind, aber sich ausrichten sollen (ohne manuelles Hingreifen), dann funk ich nicht weiter dazwischen  , dann solltest Du aber auch noch angeben

- ob es sich nur um Blöcke handelt
- wie Du, lt. Deiner Formulierung 'alle Entities' erkennen oder selektieren willst. Ich nehme nicht an, dass sich die ganze Zeichnung jetzt an eine Polylinie legen soll.

Und Blockdefinitionen zu modifizieren ist Arbeit ==> JA, aber denk mal über zukünftige Projekte nach. 

- alfred -

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 17. Jul. 2009 12:44    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


100gon2.jpg

 
Hi again
So ist es halt im Leben, kriegt man die Hand, will man gleich den ganzen Arm. Es ist nicht unbemerkt geblieben, dass sich das Spektrum um einiges erweitert hat  Aber klar soll es erstmal dabei bleiben Blöcke mit Attributen auszurichten, und das ist ja mit Autocad-blanko nur manuell (umständlich lösbar). Hier mal ein kleiner Einwurf, den gmk tat:

(defun c:gmk_ausr ()
(SETQ wahl (ENTSEL "Linie wählen: ")
      element (ENTGET (CAR wahl))
      anfp (CDR(ASSOC 10 element))
      endp (CDR(ASSOC 11 element))
      riwi (atof (angtos (ANGLE anfp endp) 2 10))
)
(setq obj (ENTSEL "\nBlock/Text auswählen: "))
(WHILE obj
    (SETQ art (CDR (CADR (ENTGET (CAR obj)))))
    (if (= art "TEXT") (COMMAND "_change" objname "" "" "" "" "" riwi "")) ; damit ist der text gedreht
    (if (= art "INSERT") (COMMAND "_change" objname "" "" "" riwi))        ; damit ist der block gedreht 
    (SETQ obj (ENTSEL "\nBlock/Text auswählen: "))
)
)

geht bestens, wäre noch wünschenswert, wenn man zur Endbestätigung eine Abfrage um 100gon drehen bekommen würde, weil mein Block immer um 100gon verdreht ausgerichtet wird.

Gruss Dirk

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


Ex-Mitglied

erstellt am: 17. Jul. 2009 13:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Dirk,

vorweg, ich sagte schon, ich nix Lisp, da kann ich nicht eingreifen. Für die, die des Lispelns mächtig sind, brauchst Du aber schon auch mehr als nur etwas kopiertes hinzulegen und 'indirekt ausgedrückt': ich bräuchte 

Und noch zu Deinem Screenshot: Wenn das Vermessungspunkte sind, dann ist Dir schon bewusst, dass Du die geographische Position änderst.  Es gibt Leute, die hätten das gar nicht gern.

- alfred -

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 17. Jul. 2009 13:27    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

Miss(t)verständnis: das Objekt sollte nur im Basispunkt, also das im Kreuzsymbol drehen.

@Alfred: klar, ohne Lisp ist das möglich - Ich bin kein Lispler, nur begeisterter Anwender   (vielleich wird das ja noch mal was mit eignen Programierungen - alles eine Frage von Zeit). Immerhin habe ich ein paar kümmerliche Kenntnisse aus dem Kochbuch von mapcar (bezieht sich aber nicht auf das Buch - ist 1A super)

@tunnelbauer: soweit ich weiss, kann man mit mesure Blöcke mit Regelabstand auf eine Linie setzen, mein Ausgangspunkt ist aber der, dass die Blöcke (gesetzte Höhen) schon auf der Linie stehen und ich jetzte in mühevoller Kleinarbeit die Blöcke rotieren muss.

PS.: das ist mein voller Ernst, ich siehe absolut meinen Hut vor jedem Lispler, der seine Gedanken freigibt und so quasi Anfängern eine Chance gibt, einzusteigen.


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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 17. Jul. 2009 13: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


100gon2.jpg

 
Vergass den richtigen JPG anzuhängen - schönes WE

Dirk

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 17. Jul. 2009 13:31    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


100gon2.jpg

 
komisch selbige Namen können nicht v.w.w

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