Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Blockeinfügepunkt herausfiltern

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:  Blockeinfügepunkt herausfiltern (797 mal gelesen)
kathi-witt
Mitglied
Student des Vermessungswesens


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

Beiträge: 31
Registriert: 23.11.2005

AutoCAD 2000
Computer: "ACPI-PC (Advanced Configuration and Power Interface)"
Intel Pentium III, 1 GHz, 640 MB RAM
Grafikkarte: "NVIDIA RIVA TNT2 Model 64/Model 64 Pro (Microsoft Corporation)"
Betriebssystem: Windows XP Professional Service Pack 1

erstellt am: 24. Jan. 2006 15: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

Hallo Leute,

bin bei meiner Diplomarbeit und mal wieder ratlos...
Habe in meiner Zeichnung Blöcke mit Attributen eingefügt und möchte nun zwei Symbole (Blöcke) anhand eines bestimmten Attributes miteinander durch eine Linie verbinden. Bei dem Attribut handelt es sich um die Punktnummer des jeweiligen Messpunktes. Ich möchte also dass das Programm die Punkte der Punktnummern X und Y durch eine Linie miteinander verbindet. Es soll also in den vorhandenen Attributen nach der entsprechenden Punktnummer gesucht werden und wenn diese gefunden wurde der dazu gehörige Blockeinfügepunkt als Auswahlsatz abgespeichert werden. Dann soll die zweite Punktnummer gesucht und letztendlich beide Blockeinfügepunkte miteinander durch eine Linie verbunden werden.

Meine Frage:

Wie komme ich mit LISP an die Inhalte der Attribute und von da aus dann an den Blockeinfügepunkt???

Über Anregungen und Lösungsvorschläge würde ich mich sehr freuen.

Kathrin

------------------
"Es liegt in der menschlichen Natur, vernünftig zu denken und unlogisch zu handeln." Anatole France

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: 24. Jan. 2006 16:04    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 kathi-witt 10 Unities + Antwort hilfreich

wie man die Blockreferenz anhand eines Attributwertes findet kannst du aus diesem Beitrag entnehmen.
Der Referenzeinfügepunkt ist im GC10 gespeichert ... (cdr(assoc 10(entget(car(entsel "\nBlockreferenz wählen:")))))

Viel Spaß beim diplomieren wünscht

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

kathi-witt
Mitglied
Student des Vermessungswesens


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

Beiträge: 31
Registriert: 23.11.2005

AutoCAD 2000
Computer: "ACPI-PC (Advanced Configuration and Power Interface)"
Intel Pentium III, 1 GHz, 640 MB RAM
Grafikkarte: "NVIDIA RIVA TNT2 Model 64/Model 64 Pro (Microsoft Corporation)"
Betriebssystem: Windows XP Professional Service Pack 1

erstellt am: 24. Jan. 2006 17:37    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

Benötige ich den gesamten Code um an die Blockreferenz anhand des Attributwertes zu gelangen oder geht das auch kürzer?
Sorry, aber als "Fast-Anfänger" blick ich da nich so ganz durch...

Ansonsten erstmal DANKE für deine Hilfe.

Kathrin

------------------
"Es liegt in der menschlichen Natur, vernünftig zu denken und unlogisch zu handeln." Anatole France

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. Jan. 2006 17:47    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 kathi-witt 10 Unities + Antwort hilfreich

Hallo Katrin,
na wirklich kürzer eigentlich nicht, aber Du könntest eine Funktion definieren, die diese Aufgabe immer wieder erledigt.
Code:

(defun bl_gc10
(cdr(assoc 10(entget(car(entsel "\nBlockreferenz wählen:"))))))

Diese Funktion kannst Du dann immer wieder aufrufen wenn Du die Koordinate von einem Block brauchst. Du musst aber sicherstellen, daß diese Funktion auch in der aktuellen Zeichnnung geladen ist.

(setq koord bl_gc10)

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

Jörn

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

kathi-witt
Mitglied
Student des Vermessungswesens


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

Beiträge: 31
Registriert: 23.11.2005

AutoCAD 2000
Computer: "ACPI-PC (Advanced Configuration and Power Interface)"
Intel Pentium III, 1 GHz, 640 MB RAM
Grafikkarte: "NVIDIA RIVA TNT2 Model 64/Model 64 Pro (Microsoft Corporation)"
Betriebssystem: Windows XP Professional Service Pack 1

erstellt am: 24. Jan. 2006 18:16    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 Jörn,

1. das mit dem (cdr(assoc 10(entget(car(entsel "\nBlockreferenz wählen:"))))))
hab ich soweit verstanden meine Frage war, ob der Zugriff auf die Referenz anhand des Attributwertes auch einfacher (kürzer) geht als der Code auf den Thomas verwiesen hat???

Hier der Code von Thomas:

"Wie auch immer, ich würde Menü und entsprechende Buttons so erweitern, dass nach _amtitle
halt der Befehl UPDATE-Title-Block aufgerufen wird, der in folgendem Lisp definiert wird.

(defun DATE_GETSTR( / DATUM)
  (setq DATUM (rtos(getvar"cdate")2 6)) 
  (strcat (STR_LEFT_AD_CHAR (substr DATUM 5 2) 2 "0")
          "/"
          (STR_LEFT_AD_CHAR (substr DATUM 7 2) 2 "0")
          "/"
          (substr DATUM 1 4)                       
  )
)
(defun UPDATE-Title-Block ( INSERTNAME ATTRIBNAME  ATTRIBWERT / AUSWAHL INDEX OBJEKTDATEN)
  (if (= (type INSERTNAME) 'STR)
    (setq AUSWAHL (ssget "_x" (list '(0 . "INSERT")(cons 2 INSERTNAME))))
  )
  (if(or AUSWAHL
        (setq AUSWAHL (ssget "_x" '((0 . "INSERT"))))
    )
    (progn
      (setq INDEX -1)     
      (repeat (sslength AUSWAHL)
        (setq OBJEKTDATEN (entget (ssname AUSWAHL (setq INDEX (1+ INDEX)))))
        (if (assoc 66 OBJEKTDATEN)                   
          (while (/= (cdr (assoc 0 OBJEKTDATEN)) "SEQEND") 
            (setq OBJEKTDATEN (entget (entnext (cdr (assoc -1 OBJEKTDATEN)))))
            (if (and(=(cdr (assoc 0 OBJEKTDATEN)) "ATTRIB")                       
                    (=(strcase (cdr(assoc 2 OBJEKTDATEN))) ATTRIBNAME)
                )
              (progn               
                (entmod(subst(cons 1 ATTRIBWERT)
                            (assoc 1 OBJEKTDATEN)
                            OBJEKTDATEN
                      )
                )
              ) 
            )
          )           
        ) 
      )               
    )
  )

)
(defun c:UPDATE-Title-Block ()
  (UPDATE-Title-Block  nil "GEN-TITLE-DAT"  (DATE_GETSTR)) 
  (command "_.regen")
)
"

2. Geht '(cdr(assoc 10(entget(car(entsel "\nBlockreferenz wählen:"))))))' auch ohne Benutzereingabe (entsel "\nBlockreferenz wählen:")?

Kathrin

------------------
"Es liegt in der menschlichen Natur, vernünftig zu denken und unlogisch zu handeln." Anatole France

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: 24. Jan. 2006 18: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 kathi-witt 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von kathi-witt:

Sorry, aber als "Fast-Anfänger" blick ich da nich so ganz durch...

Für den Durchblick sorgt vielleicht das ausgezeichnete Lisp-Tutorial von Mapcar. Ansonsten hab ich natürlich Verständnis für deine sagen wir mal "anfängertypischen Defizite". Es wäre natürlich auch kein Problem, den kompletten - für deine Zwecke angepassten - Code hier reinzustellen, aber wäre dir damit geholfen ???

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

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: 24. Jan. 2006 18: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 kathi-witt 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von kathi-witt:

...geht
(cdr(assoc 10(entget(car(entsel "\nBlockreferenz wählen:"))))))' auch ohne Benutzereingabe (entsel "\nBlockreferenz wählen:")?

wenn du schon die Blockreferenz hast
z.B. über den Attributauswahlcode oder z.B.
(setq BLOCKREF (car(entsel)))
kannst du mit
(setq BASEPOINT(cdr(assoc 10(entget BLOCKREF))))
den Einfügepunkt ermitteln und in der Variable BASEPOINT speichern.


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

kathi-witt
Mitglied
Student des Vermessungswesens


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

Beiträge: 31
Registriert: 23.11.2005

AutoCAD 2000
Computer: "ACPI-PC (Advanced Configuration and Power Interface)"
Intel Pentium III, 1 GHz, 640 MB RAM
Grafikkarte: "NVIDIA RIVA TNT2 Model 64/Model 64 Pro (Microsoft Corporation)"
Betriebssystem: Windows XP Professional Service Pack 1

erstellt am: 24. Jan. 2006 18:37    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 Thomas,

Zitat:
Original erstellt von CADmium:
Für den Durchblick sorgt vielleicht das ausgezeichnete Lisp-Tutorial von Mapcar. Ansonsten hab ich natürlich Verständnis für deine sagen wir mal "anfängertypischen Defizite". Es wäre natürlich auch kein Problem, den kompletten - für deine Zwecke angepassten - Code hier reinzustellen, aber wäre dir damit geholfen ???


sicher wäre es einfacher für mich mit einem auf meine Zwecke angepassten Code klar zu kommen, als mich in einen umfangreichen Code reinzufinden, der außer mein Problem zu lösen auch noch viele andere Sachen macht. Ich wollte eigentlich nicht irgendwelchen überflüssigen Code in meinem Programm unterbringen nur weil ich nicht weiß, welcher Teil des Codes mein Problem löst und deshalb kurzerhand alles reinkopiere...
Irgendwann find ich bestimmt raus was dein Programm genau macht. Dachte nur fragen kostet ja nichts und warum umständlich wenns auch einfacher geht.
Aber wenn das zu viel verlangt ist, sorry.
Das Tutorial habe ich vor einiger Zeit besucht, aber danke für den Hinweis.

Wünsch dir noch einen schönen abend und danke für die Hilfe.

Kathrin

------------------
"Es liegt in der menschlichen Natur, vernünftig zu denken und unlogisch zu handeln." Anatole France

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: 24. Jan. 2006 18: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 kathi-witt 10 Unities + Antwort hilfreich


der obigen Code macht eigentlich was anderes.

Sicher referenzieren deine INSERTs den gleichen Block und dein verwendetes Attribut hat demzufolge auch immer den gleichen Namen.

also

(setq BLOCKNAME "PUNKTBLOCK")
(setq ATTRIBNAME "PUNKTNR")   
(setq ATTRIBVALUE "5")

mit
(setq AUSWAHL (ssget "_x" (list '(0 . "INSERT")(cons 2 BLOCKNAME)(66 . 1))))
erstellen wir erstmal einen Auswahlsatz aller in Frage kommeneden Referenzen..  GC66 steht dabei für "Attribute vorhanden"
 
Nun wird der Auswahlsatz durchsucht       
(if Auswahl
  (progn
    (setq INDEX -1)     
      (repeat (sslength AUSWAHL)
        (setq OBJEKTDATEN (entget (ssname AUSWAHL (setq INDEX (1+ INDEX)))))
        (if (assoc 66 OBJEKTDATEN)                   
          ;nun alle Attribute durchlaufen
          (while (/= (cdr (assoc 0 OBJEKTDATEN)) "SEQEND") 
            (setq OBJEKTDATEN (entget (entnext (cdr (assoc -1 OBJEKTDATEN)))))
            (if (and(=(cdr (assoc 0 OBJEKTDATEN)) "ATTRIB")
                    ; richtiger Attributname ?
                    (=(strcase (cdr(assoc 2 OBJEKTDATEN))) (strcase ATTRIBNAME))
                    ; gesuchter Attributwert ?
                    (=(cdr(assoc 1 OBJEKTDATEN))ATTRIBVALUE)
                )
              (progn               
                (setq TREFFER (ssname AUSWAHL INDEX))
 
... die fehlenden Klammern kriegste sicher hin.. Treffer ist dann das Objekt der entsprechenden Blockreferenz

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

kathi-witt
Mitglied
Student des Vermessungswesens


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

Beiträge: 31
Registriert: 23.11.2005

AutoCAD 2000
Computer: "ACPI-PC (Advanced Configuration and Power Interface)"
Intel Pentium III, 1 GHz, 640 MB RAM
Grafikkarte: "NVIDIA RIVA TNT2 Model 64/Model 64 Pro (Microsoft Corporation)"
Betriebssystem: Windows XP Professional Service Pack 1

erstellt am: 24. Jan. 2006 18:59    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

Zitat:
Original erstellt von CADmium:

Sicher referenzieren deine INSERTs den gleichen Block und dein verwendetes Attribut hat demzufolge auch immer den gleichen Namen.

Erstmal danke für die etwas einfachere Variante.

Aber leider ist es nicht immer der gleiche Block auf den sich meine inserts beziehen.
Es sind X verschiedene Blöcke, die alle ein Attribut namens Punktnummer jedoch mit unterschiedlichem Attributwert besitzen.

Kann ich dann in

(setq AUSWAHL (ssget "_x" (list '(0 . "INSERT")(cons 2 INSERTNAME))))

einfach (cons 2 INSERTNAME) weglassen und es funktioniert trotzdem?

Sorry, ich nerve dich wahrscheinlich schon.

Kathrin

------------------
"Es liegt in der menschlichen Natur, vernünftig zu denken und unlogisch zu handeln." Anatole France

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. Jan. 2006 19: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 kathi-witt 10 Unities + Antwort hilfreich

Hallo Katrin,
bei (cons 2 INSERTNAME) kannst Du auch Jokerzeichen benutzen
z.B. (cons 2 "GC_*") würde für die Blöcke "GC_S5" "GC_TEST" ... gehen.
wenn Du alle Blöcke auswählen willst, dann kannst Du (cons 2 INSERTNAME) auch völlig weglassen.

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

Jörn

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

kathi-witt
Mitglied
Student des Vermessungswesens


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

Beiträge: 31
Registriert: 23.11.2005

AutoCAD 2000
Computer: "ACPI-PC (Advanced Configuration and Power Interface)"
Intel Pentium III, 1 GHz, 640 MB RAM
Grafikkarte: "NVIDIA RIVA TNT2 Model 64/Model 64 Pro (Microsoft Corporation)"
Betriebssystem: Windows XP Professional Service Pack 1

erstellt am: 24. Jan. 2006 19:51    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 Jörn,

vielen Dank für deine Hilfe und einen schönen abend noch.

Kathrin

------------------
"Es liegt in der menschlichen Natur, vernünftig zu denken und unlogisch zu handeln." Anatole France

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 25. Jan. 2006 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 kathi-witt 10 Unities + Antwort hilfreich

Hi Kathi,
also ich hab''n paar relativ komplexe Funktionen, die sowohl Inserts finden können die einen bestimmten AttributNAMEN als auch einen bestimmten AttributWERT haben.
Ich weiß nur nicht, ob Du Dich da reindenken willst.
Auf jeden Fall steckt da die Lösung Deines Problems drinnen.
Ich hab auch ein Anwendungsbeispiel dabei, welches die Anwendung der SUB-Routinen veranschaulicht.
Wenn Du daran Interesse hast, poste hier. Dann stelle ich das rein, aber unter der Bedingung dass Du DEINE fertige Lösung auch hier postest.

------------------
Ciao,
Marc
   

[Diese Nachricht wurde von marc.scherer am 25. Jan. 2006 editiert.]

[Diese Nachricht wurde von marc.scherer am 25. Jan. 2006 editiert.]

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

kathi-witt
Mitglied
Student des Vermessungswesens


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

Beiträge: 31
Registriert: 23.11.2005

AutoCAD 2000
Computer: "ACPI-PC (Advanced Configuration and Power Interface)"
Intel Pentium III, 1 GHz, 640 MB RAM
Grafikkarte: "NVIDIA RIVA TNT2 Model 64/Model 64 Pro (Microsoft Corporation)"
Betriebssystem: Windows XP Professional Service Pack 1

erstellt am: 25. Jan. 2006 18:03    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 Marc,

Zitat:
Original erstellt von marc.scherer:
Hi Kathi,
also ich hab''n paar relativ komplexe Funktionen, die sowohl Inserts finden können die einen bestimmten AttributNAMEN als auch einen bestimmten AttributWERT haben.
Ich weiß nur nicht, ob Du Dich da reindenken willst.
Auf jeden Fall steckt da die Lösung Deines Problems drinnen.
Ich hab auch ein Anwendungsbeispiel dabei, welches die Anwendung der SUB-Routinen veranschaulicht.
Wenn Du daran Interesse hast, poste hier. Dann stelle ich das rein, aber unter der Bedingung dass Du DEINE fertige Lösung auch hier postest.



Vielen Dank für dein Angebot. Zur Anregung für evtl. Verbesserungen meiner Lösung und für andere User mit ähnlichem Problem kannst du deins gerne hier posten. Ich habe inzwischen mir eine funktionierende Funktion, die ebenfalls Inserts mit bestimmtem Attributnamen oder/und Attributwert findet und die Blockreferenz zurückgibt aus dem Code von Thomas gebastelt und hier ist sie:

(defun BlockRef (AUSWAHL ATTRIBNAME ATTRIBVALUE)
(if AUSWAHL
  (progn
    (setq INDEX -1)
    (repeat (sslength AUSWAHL)
    (setq OBJEKTDATEN
            (entget (ssname AUSWAHL (setq INDEX (+ 1 INDEX))))
    )
    (if (assoc 66 OBJEKTDATEN)
    ;;nun alle Attribute durchlaufen
    (while (/= (cdr (assoc 0 OBJEKTDATEN)) "SEQEND")
      (setq OBJEKTDATEN
          (entget (entnext (cdr (assoc -1 OBJEKTDATEN))))
      )
      (if (and (= (cdr (assoc 0 OBJEKTDATEN)) "ATTRIB")
;richtiger Attributname?
(= (strcase (cdr (assoc 2 OBJEKTDATEN)))
          (strcase ATTRIBNAME))
;gesuchter Attributwert?
(= (cdr (assoc 1 OBJEKTDATEN)) ATTRIBVALUE)
  )
(progn
  (setq TREFFER (ssname AUSWAHL INDEX))
)
)
      )
      )
    )
  )
)
)

(setq  ATTRIBNAME "PNR"
      ATTRIBVALUE "100")
;;Auswahlsatz der infrage kommenden Inserts wird erstellt:
(setq  AUSWAHL (ssget "X" '((0 . "INSERT") (66 . 1))))

(BlockRef AUSWAHL ATTRIBNAME ATTRIBVALUE) ;;Funktionsaufruf
;;Blockeinfügepkt. wird gespeichert:
(setq p1 (cdr (assoc 10 (entget TREFFER))))

;;Suche nach zweitem Punkt mit Punktnummer 101 wird gestartet:
(setq ATTRIBVALUE "101")
(BlockRef AUSWAHL ATTRIBNAME ATTRIBVALUE)
(setq p2 (cdr (assoc 10 (entget TREFFER)))

;;Linie zwischen den beiden gefundenen Punkten wird gezeichnet:
(command "_line" p1 p2 "")

Vielleicht nützt sie ja außer mir noch jemandem.

Vielen Dank an alle für ihre Hilfe!

Lieben Gruß
Kathrin

------------------
"Es liegt in der menschlichen Natur, vernünftig zu denken und unlogisch zu handeln." Anatole France

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

SOLID-master
Mitglied
Consultant/Trainer CAD/PDM/ERP


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

Beiträge: 87
Registriert: 20.04.2004

erstellt am: 14. Jul. 2008 15: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 kathi-witt 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von CADmium:
wenn du schon die Blockreferenz hast
z.B. über den Attributauswahlcode oder z.B.
(setq BLOCKREF [b](car(entsel))
)
kannst du mit
(setq BASEPOINT(cdr(assoc 10(entget BLOCKREF))))
den Einfügepunkt ermitteln und in der Variable BASEPOINT speichern.

hallo alle zusammen,
ich habe auch eine frage:
kann man statt (setq BLOCKREF (car(entsel)))
(setq BLOCKREF ?????blockname????eintippen)

da ich nicht weiß wo der liegt.
ich möchte das ergebnis dann für
kreisbefehl(mittelpunkt) weiter verwenden.


[/B]


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: 14. Jul. 2008 15:35    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 kathi-witt 10 Unities + Antwort hilfreich

Ach mennö ? Blockreferenzen eines Blockes (alle mit den gleichen NAmen) .. kann es doch mehrere geben ....

prinzipiell kannst du mal folgenden Ansatz nachvollziehen:

(if(setq A(ssget "_X" (list '(0 . "INSERT")(cons 2 BLOCKNAME)(cons 410 (getvar "CTAB")))))
  (setq BLOCKREF(ssname 0 A))
)

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 14. Jul. 2008 15: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 kathi-witt 10 Unities + Antwort hilfreich

"Ach mennö ?" ... Grins 

Haben wir nicht alle mal angefangen?
Ich sage mal die Lösung steht in Kathi ihrem ersten Code

( ... UPDATE-Title-Block ...
siehe auswahl
siehe repeat
siehe objektdaten ...)

mfg heiko

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