Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  eindeutiger Blockname

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:  eindeutiger Blockname (580 mal gelesen)
fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 29. Jun. 2004 11: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

ich weiss das thema hatten wir bereits, aber mir geht es NICHT um eindeutige namen mit cdate sondern ...

ich erstelle mittels Variantenkonstruktion Möbel
der benutzer wählt z.B.: aus einem Menü einen Tisch aus.
Danach gibt er in einem Dialog die Tischbreite, Tischhöhe, Tischtiefe, Plattenart, Verkabelung ja/nein usw. ein.

diese Infos müssen ja in den Blocknamen eingehen, umd diesen eindeutig zu machen

z.B.: könnte daraus ein blocknamen der in etwa so lautet herauskommen

TISCH1_BR-1000_TI-800_HO-720_PL-MA

der Block Tisch1 mit Breite 1000, Tiefe 800, Höhe 720 und Plattenart mit Massivanleimer


da jedoch manche Möbel bei uns etwas komplexer aufgebaut sind, (da können schon mal 20 Merkmale zum Ausfülen sein) komme ich da auf sehr lange Blocknamen.

(z.B.: aus einer aktuellen Zeichnung ein Blockname
72BTR2BTW04DG__0500010024002110000000000000________ALUAL2F33A2F63A2F53A2FUBH1F3
3A1F63A1F53A1FUBH)

gibst es da nicht einen Algorithmus, um diese Informatioenen verkürzt darzustellen. Der Blockname muss nicht mehr entschlüsselbar sein, er muss aber für die Konfiguration des Tisches eindeutig bleiben.
ich hab mir gedacht , so ala winzip-mässig, das kann ja auch eine datei komprimieren und wieder 1 zu 1 herstellen, nur halt mit einem langen string.

Ich möchte bewusst NICHT auf datum, Uhrzeit ausweichen,sondern bei den konfigurationsmermalen bleiben, da 2 komplett gleich konfigurierte Tische den gleichen Blocknamen ergeben sollen,
bzw. die Teile auch zwischen Zeichnungen hin- und her kopiert werden können .
(ok. die chance, das 2 planer in untersch. zeichnungen genau zur gleichen millisekunde den tisch1 konfigurieren ist zwar minimal, aber der teufel schläft Nicht)

ich hoffe ich hab mich jetzt verständlich ausgedrückt.

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

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


Ex-Mitglied

erstellt am: 29. Jun. 2004 13:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Zitat:
Original erstellt von fuchsi:
gibst es da nicht einen Algorithmus, um diese Informatioenen verkürzt darzustellen. Der Blockname muss nicht mehr entschlüsselbar sein, er muss aber für die Konfiguration des Tisches eindeutig bleiben.

Da Du dann ja einen Tisch mit den Merkmalen 800, 320, 720, 1850, 2499 von einem anderen Tisch mit den Merkmalen 800, 320, 720, 1850, 2498 unterscheiden willst, gibt's eigentlich nur eine Lösung: Du musst auf ein anderes Zahlensystem ausweichen, also beispielsweise Hexadezimalzahlen statt Dezimalzahlen verwenden. Damit bleibt die vollständige Info erhalten, der String wird kürzer.

Bei entsprechend umfangreichen Infos aber wirst Du die maximal zulässige Länge der Blocknamen immer überschreiten, und dagegen hilft Dir absolut kein Kraut: Du kannst nicht beliebig viel Informationen in 128 oder 256 Byte unterbringen (genaue MaxLänge habe ich jetzt nicht im Kopf).

Du wirst Dich für Dein Anliegen also zwingend (!) auf eine Anzahl von Merkmalen beschränken müssen, die zusammen genommen diese Bytelänge nicht überschreiten.

Tom Berger

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


mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 29. Jun. 2004 14:06    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 fuchsi 10 Unities + Antwort hilfreich

Hi Fuchsi, wenn du diesen Blocknamen mit WinZip einpackst, werden aus 91 Bytes 191, da beim Einpacken erstmal ein gewisser Overhead entsteht. Für so kleine Sachen bringt das nix! Mit einem ZIP-Verfahren, dass ausschließlich Zeichen erzeugt, die für Blocknamen gültig sind, wird das noch viel länger, und außerdem äußerst kompliziert!

Wenn die Merkmale M in Abstufungen vorliegen, kannst du evtl. alle Kombinationen (M1 * M2 * ... * Mn = Anzahl der Möglichkeiten) und durchnummerieren. Das macht eine kleine Lisproutine sehr schnell. Problem: Wenn sich was an der Produktpalette ändert, siehst du alt aus.

Einzig realistischer Ansatz: Hash-Werte berechnen - allerdings sind die nicht eindeutig, es kann immer mal vorkommen, dass zwei Produkte den selben Hashwert haben. Wenn man's geschickt macht, aber eher selten.

Die Idee an sich finde ich nicht so gut - wer soll mit solchen Blocknamen denn arbeiten? Ich würde Zufallszahlen verwenden und über eine DB abgleichen, ob der Block schon vorhanden ist. Da reichen 8 Stellen von 0..Z bis ins übernächste nächste Jahrtausend.

Gruß, Axel

Gruß, Axel

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

Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze

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


Ex-Mitglied

erstellt am: 29. Jun. 2004 14:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Zitat:
Original erstellt von mapcar:
Wenn die Merkmale M in Abstufungen vorliegen, kannst du evtl. alle Kombinationen (M1 * M2 * ... * Mn = Anzahl der Möglichkeiten) und durchnummerieren. Das macht eine kleine Lisproutine sehr schnell. Problem: Wenn sich was an der Produktpalette ändert, siehst du alt aus.

Nun ergibt aber die Kombination der Merkmale Breite 3 x Höhe 4 denselben Blocknamen wie die Merkmale Breite 4 x Höhe 3. Klappt also auch nicht.

Zitat:

Einzig realistischer Ansatz: Hash-Werte berechnen - allerdings sind die nicht eindeutig, es kann immer mal vorkommen, dass zwei Produkte den selben Hashwert haben. Wenn man's geschickt macht, aber eher selten.

Da auch hier die Strings unkontrollierbar lang werden können, ist auich das keine Lösung.

Eine sichere Lösung existiert nur, wenn an die Blockdefinitionen XDATA gehängt werden, die alle Merkmale  - am besten in einer ASSOC-Liste - enthalten. Damit nicht bei jedem Block die gesamte Blocktabelle durchsucht werden muss, holt man sich beim Öffnen einer Zeichnung die Liste aller dieser XDATA in eine globale Variable, so dass dann bequem gesucht werden kann, ob die aktuelle Merkmalskombination schon in der Liste enthalten ist oder nicht.

Bei dieser sicheren Lösung aber ist dann der Blockname wieder völlig frei und kann am sinnvollsten aus einer Kombination von irgend einem wichtigen Merkmal und CDATE gebildet werden.

Gruß
Tom Berger

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


CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 29. Jun. 2004 14: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 Nur für fuchsi 10 Unities + Antwort hilfreich

Hai fuchsi

ich würde genauso wie Axel es sagt über eine Datenbank an die Problematik rangehen.

Es muss ja nicht unbedingt eine DB sein, aber irgendeine Datei, worin die Realnames zu Kurzbezeichnungen zugeordnet werden.
Das ganze lässt sich sicherlich dann auch schön per dcl einbauen, so das die Geschichte ziemlich DAU sicher sein könnte

------------------
Gruß
CADwiesel
Besucht uns im CHAT

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 29. Jun. 2004 15:43    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

also dass mit einer DB ist glaube ich schon mal ein ganz guter Lösungsansatz.

@mapcar
Die Idee an sich finde ich nicht so gut - wer soll mit solchen Blocknamen denn arbeiten?

was meinst du mit arbeiten ?, den planern interresiert der blockname nicht (die wenigstens meiner planer wissen überhaupt was ein block ist, für die ist das trum in der zeichnung ein tisch, ein schrank usw. den sie hin- und herschieben :-)


@tom.berger
Eine sichere Lösung existiert nur, wenn an die Blockdefinitionen XDATA gehängt werden, die alle Merkmale  - am besten in einer ASSOC-Liste - enthalten

das ist sowieso geplant, für stücklisten, preisrechnung usw. werte ich nur die grundartikelnummer und die merkmale in den xdatas aus. der blockname soll nur für ein konfiguriertes Möbel eindeutig sein. und das nicht nur pro zeichnung sondern zeichnungsübergreifend (fertige Möblierungsvorschläge abspeichern und in jede Planung reinkopieren)


na ich werd mir am abend bei einem bierchen (da fallen mir immer die besten ideen ein) die idee mit der db überlegen, damit wäre ich zumindest mal pro Filiale eindeutig. (ev. pro filiale ein eigener nummernkreis)

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

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 29. Jun. 2004 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 Nur für fuchsi 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Tom:
>Original erstellt von mapcar:
>Wenn die Merkmale M in Abstufungen vorliegen, kannst du evtl. alle
>Kombinationen (M1 * M2 * ... * Mn = Anzahl der Möglichkeiten) und
>durchnummerieren. Das macht eine kleine Lisproutine sehr schnell.
>Problem: Wenn sich was an der Produktpalette ändert, siehst du alt
>aus.

Nun ergibt aber die Kombination der Merkmale Breite 3 x Höhe 4 denselben Blocknamen wie die Merkmale Breite 4 x Höhe 3. Klappt also auch nicht.


Nö. Wenn es Breiten von 3 und Höhen von 4 gibt, lautet die Rechnung 2 x 2 = 4 mögliche Produkte - ich habe doch nicht gesagt, dass man Breite  x Höhe x Farbe x Preis oder so etwas ausrechnen soll;-)

Code:

BREITE HÖHE NUMMER/BLOCKNAME
  3      3        0
  3      4        1
  4      3        2
  4      4        3

Also: 50 Breiten x 75 Längen x 70 Höhen x 24 Farben x 150 Sonstwas ergeben z.B 945 Millionen Möglichkeiten - die lassen sich hexadezimal mit 8 Ziffern darstellen lassen (ich gehe hier vom Datentype LONG aus, da ist noch Luft). 5 weitere Features lassen sich mit einem weiteren Long erfassen usw. In der Realität wird sowieso keine Firma Tische in 70 verschiedenen Höhen anbieten;-) Verwendet man dann noch das Zahlensystem mit der Basis 36 [0..Z], kann man mit einem 8stelligen Namen ca. 8 Billiarden möglicher Produkte benennen. Das dürfte doch reichen, oder?

Zitat:
Original erstellt von Tom:
>Original erstellt von mapcar:
>Einzig realistischer Ansatz: Hash-Werte berechnen - allerdings sind
>die nicht eindeutig, es kann immer mal vorkommen, dass zwei Produkte
>den selben Hashwert haben. Wenn man's geschickt macht, aber eher
>selten.

Da auch hier die Strings unkontrollierbar lang werden können, ist auich das keine Lösung.



Auch Nö. Ein Hashwert muss nicht länger werden. Nimm irgendwas, meinetwegen die Quersumme der Summe der ASCII-Werte aller zu codierenden Merkmale) modulo 65531, dann liegt der Hash im Bereich 0 ... 0xFFF0 und hat garantiert max. 4 Stellen

Gruß, Axel

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

Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze

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


Ex-Mitglied

erstellt am: 29. Jun. 2004 19:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Zitat:
Original erstellt von mapcar:
Nö. Wenn es Breiten von 3 und Höhen von 4 gibt, lautet die Rechnung 2 x 2 = 4 mögliche Produkte - ich habe doch nicht gesagt, dass man Breite  x Höhe x Farbe x Preis oder so etwas ausrechnen soll;-)

Ich ging fälschlich davon aus, dass Du daraus den Blocknamen basteln wolltest. Deine Tabelle ist zwar auch nur dann eine 100%ige Lösung, wenn es für jedes Merkmal eine begrenzte Menge von zulässigen Werten gibt, aber ich schätze mal, dass so ein Blockname dann schon etwa für die Anzahl der Sterne im Universum ausreichen sollte :-)

Gruß
Tom Berger

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


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