| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: xlspl ??? wie sieht denn die liste aus ? (1878 mal gelesen)
|
philoktet1 Mitglied Architekt
Beiträge: 7 Registriert: 11.03.2006
|
erstellt am: 11. Mrz. 2006 20:55 <-- editieren / zitieren --> Unities abgeben:
(nochmal im lisp-forum) hi... bin von vworks nun bei acad gelandet und versuche zu lisp´len... ich versuche eine liste mit linien- und punktinformationen von einer dwg zu erstellen, die dann von einer statiksoftware und einem java-optimierungstool bearbeitet werden soll. objekte anklicken und punkte auslesen funktioniert ! die .txt datei wieder einlesen und punkte im raum erstellen auch ! jetzt muss ich zwischen den punkten, die in der liste einfach mit drei zahlen beschrieben werden (xyz), noch stäbe einfügen. leider weiss ich noch nicht mal wie ich diese in der liste benennen soll ? name plus anfangs und endpunkt als xyz ? oder auf die punkte verweisen die schon da sind ? (nach dem motto du bist eine linie und zwischen p1 und p2) wie erzeuge ich denn sinnvolle 3d-linien aus einer liste, und wie sieht diese liste aus ? danke im voraus und gruss philipp Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 11. Mrz. 2006 21:36 <-- editieren / zitieren --> Unities abgeben: Nur für philoktet1
|
startrek Mitglied Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 11. Mrz. 2006 21:47 <-- editieren / zitieren --> Unities abgeben: Nur für philoktet1
Hi und willkommen Phillip, hmm, Du möchtest einfach Linien von P1 nach P2 nach P3 nach ... P20? Das geht genauso wie mit den Punkten, einfach eine *.scr wie folgt:
Code:
_line 0,0,0 1,0,0 0,1,0 5,5,0
Das ergibt für oben sukzessive 3 Linien. Oder willst Du immer die Line zwischen 2 Punkten, eg eine von 0.0.0 nach 1.0.0 und eine von 0.1.0 nach 5.5.0? Wenn letzteres kann ich Dir mit Lisp nicht helfen - kann nur s.u. - aber das geht sicher auch mit Lisp.Gruss Nancy --
Code:
Sub aaa() Dim fso As Object, s, lines, p1#(2), p2#(2), i& Set fso = CreateObject("scripting.filesystemobject") s = fso.GetFile("d:\test.scr").OpenAsTextStream.ReadAll lines = Split(s, Chr(13)) For i = 1 To UBound(lines) - 1 Step 2 p1(0) = CDbl(Split(lines(i), ",")(0)) p1(1) = CDbl(Split(lines(i), ",")(1)) p1(2) = CDbl(Split(lines(i), ",")(2)) p2(0) = CDbl(Split(lines(i + 1), ",")(0)) p2(1) = CDbl(Split(lines(i + 1), ",")(1)) p2(2) = CDbl(Split(lines(i + 1), ",")(2)) ThisDrawing.ModelSpace.AddLine p1, p2 Next Set fso = Nothing End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
philoktet1 Mitglied Architekt
Beiträge: 7 Registriert: 11.03.2006
|
erstellt am: 11. Mrz. 2006 22:15 <-- editieren / zitieren --> Unities abgeben:
hi... die statiksoftware braucht nur stäbe und punkte. für ein fachwerk sollte dies ausreichen. das ist fast der kleinste gemeinsame nenner um soetwas zu beschreiben. @startrek: dein code beschreibt eine linie mit koordinaten: _line 0,0,0 1,0,0 0,1,0 5,5,0 was ich suche ist eine liste, die linien und punkte beschreibt, schön wäre es auch wenn man einer linie attribute geben (namen etc etc) könnte ? diese dann in die statikersoftware ist kein problem über einen parser. die zweite software kann man auch anpassen. bei diesem script habe ich noch nicht kapiert was man eigentlich einladen muss... hat jemand eine beispieldatei (.txt) ??? (defun c:xlspl ( / datei f datzeile zeile tabli x) (setq datei (getfiled "Datei wählen" "" "txt" 0)) (setq f (open datei "r")) (while (setq datzeile (read-line f)) (setq zeile (read (vl-string-translate "," "." (vl-string-translate " " (chr 209) (vl-string-translate "." (chr 182) (strcat "(" datzeile ")") ) ) ) ) tabli (if tabli (append tabli (list (cons 10 zeile))) (list (cons 10 zeile)) ) ) ) (close f) (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(67 . 0) '(410 . "Model") '(8 . "0") '(100 . "AcDbPolyline") (cons 90 (length tabli)) '(70 . 0) '(43 . 0.0) '(38 . 0.0) '(39 . 0.0)) (apply 'append (mapcar '(lambda (x) (list x '(40 . 0.0) '(41 . 0.0) '(42 . 0.0)) ) tabli )) (list '(210 0.0 0.0 1.0)) );append ) ) danke und gruss philipp
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 12. Mrz. 2006 01:38 <-- editieren / zitieren --> Unities abgeben: Nur für philoktet1
Zitat: Original erstellt von philoktet1: ... die statiksoftware braucht nur stäbe und punkte. für ein fachwerk sollte dies ausreichen. das ist fast der kleinste gemeinsame nenner um soetwas zu beschreiben. ...
ich gehe mal davon aus, dass das, was du als Stab benennst einfach nur die Zuordnung 2er Punkte zueinander ist. Zitat: Original erstellt von philoktet1: was ich suche ist eine liste, die linien und punkte beschreibt, schön wäre es auch wenn man einer linie attribute geben (namen etc etc) könnte ? diese dann in die statikersoftware ist kein problem über einen parser. die zweite software kann man auch anpassen.
Ja dann lege doch einfach ein Format für den Listenaufbau fest. L IchBinLinie1 0.0 0.0 10.0 0.0 P IchBinPunkt1 10.0 0.0 L IchBinLinie2 10.0 0.0 0.0 10.0 P IchBinPunkt2 0.0 10.0 oder P 1 IchBinPunkt1 10.0 0.0 P 2 IchBinPunkt2 0.0 10.0 P 3 IchBinPunkt3 0.0 0.0 L IchbinStab1 1 2 L IchbinStab2 2 3 L IchbinStab3 3 1 Zum einen benennst du die Punkte mit Zahlen und zum anderen beziehst du dich dann bei der Liniendefinition auf diese Punkt-Nr'n. Du kannst scheinbar das Format festlegen, was willst du denn hier nun beantwortet haben? Wo ist konkret dein Problem? Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
philoktet1 Mitglied Architekt
Beiträge: 7 Registriert: 11.03.2006
|
erstellt am: 12. Mrz. 2006 16:41 <-- editieren / zitieren --> Unities abgeben:
mmmh... ok also ich möchte ein raumfachwerk in einer liste beschreiben. dies ist quasi "gencode" der das gebäude beschreiben soll. mit diesem kann man dann statik etc. optimieren. es gibt dann eine datei die sowohl von der statiksoftware, als auch von einem javaprogramm verbessert wird. also diese version beinhaltet nur koordinaten und namen: L IchBinLinie1 0.0 0.0 10.0 0.0 (name ? und von xy nach xy ?) P IchBinPunkt1 10.0 0.0 (punkte haben nur namen und xy ?) hierbei haben die stäbe eine verbindung zum punkt (dh wenn ich den punkt ändere geht die linie mit, oder ?) P 3 IchBinPunkt3 0.0 0.0 (name + xy) L IchbinStab1 1 2 (stabname und von p1 nach p2) bis jetzt funktionieren halt nur einfache punkte und ich versuche direkt eine gute einbindung von linien zu finden. die version wo sich linien nach punkten definieren ist schon nicht schlecht, ich wusste nur nicht ob und wie sowas geht... also wenn man : NamePunkt1, x,y,z NameStab1, NamePunkt1, NamePunkt2 in eine liste schreibt sollte man daraus ein konstrukt aus linien und punkten erhalten können. wie sieht denn die datei aus die man bei dem xlspl-script braucht ? da müssten doch auch diese infos enthalten sein ? probleme habe ich die linien über das script zu erzeugen. bis jetzt ist die liste für punkte ja simpel (nur xyz). danke und gruss philipp
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 12. Mrz. 2006 17:12 <-- editieren / zitieren --> Unities abgeben: Nur für philoktet1
Hallo Philipp, so wie es mir scheint, fehlt dir nur eine Idee, wie man so etwas aufbauen könnte. Ich werde aus deinem Geschriebenen nicht so recht schlau. Du kannst die Datei gestalten wie du willst, da du sowohl AutoCAD- als auch Statik-Programmseitig noch alle Möglichkeiten offen hast. Eine solche ASCII-Datei ist strohdoof. Die Logik, was du meinst mit Stab und Linien usw, die musst du dir selber überlegen. Eine DXF-Datei weiß mit Sicherheit auch nicht, was darin enthalten ist, dass weiß wiederum AutoCAD, welches die Daten nach festgelegten Vorgaben analysiert und darstellt. Diese Vorgaben musst du entwickeln - ist es dass womit du ein Problem hast? Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
philoktet1 Mitglied Architekt
Beiträge: 7 Registriert: 11.03.2006
|
erstellt am: 12. Mrz. 2006 18:55 <-- editieren / zitieren --> Unities abgeben:
hi... das problem ist weniger der aufbau der datei, als die umsetzung in acad. ok der aufbau in punkte und linien ist soweit klar, die informationen wie namen und xyz koordinaten auch. was überhaupt nicht funktioniert ist die umsetzung. punkte raus ok... einlesung auch ok... schwierig wird es die dinger mit namen zu versehen und linien zu erzeugen. also splitten wir mal das problem: wie kann man punkte mit einem namen versehen ? wie kann man die linien mit die info geben: du bist von p1 zu p2 ? danke im voraus und gruss philipp
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 12. Mrz. 2006 20:03 <-- editieren / zitieren --> Unities abgeben: Nur für philoktet1
für welchen Aufbau der Datei hast du dich nun entschieden? Poste am besten mal ein Bsp, dann kann man da auch konkret helfen. Das Linien erzeugen sollte dann auch kein Thema sein. Grundsätzlich gilt, dass du den Linien nur über XData zusätzliche Informationen dranhängen kannst. Unter diesem Stichwort kannst du ja entweder hier im Forum oder in der Acad-Hilfe mal suchen. Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
philoktet1 Mitglied Architekt
Beiträge: 7 Registriert: 11.03.2006
|
erstellt am: 13. Mrz. 2006 11:18 <-- editieren / zitieren --> Unities abgeben:
hi... listenformat wäre schön wenn es punkte und linien ernthält !!! bis jetzt kann ich nur punkte machen. Liste könnte doch so aussehen : (punktname, layer, x-koordinate, y-koordinate, z-koordinate) p1, 0, 0.0, 0.0, 0.0 p2, 0, 1.0, 1.0, 1.0 (linienname, layer, von-punkt?, zu-punkt?) L1, 0, p1, p2 damit sollte man doch zwei punkte und eine linie, die zwischen diesen beiden sitzt beschreiben können... soweit die theorie, das einlesen von punkten in einer einfachen liste (x,y,z) funktioniert. aber erste frage die sich ergibt wo schreibe ich die linien in der liste hin ? untereinander ? p1, 0, 0.0, 0.0, 0.0 p2, 0, 1.0, 1.0, 1.0 L1, 0, p1, p2 oder dahinter ? p1, 0, 0.0, 0.0, 0.0, L1, 0, p1, p2 und wie kriege ich die linien zwischen die punkte ? also hiermit kann man doch linien erzeugen: (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(67 . 0) '(410 . "Model") '(8 . "0") '(100 . "AcDbPolyline") (cons 90 (length tabli)) '(70 . 0) '(43 . 0.0) '(38 . 0.0) '(39 . 0.0)) (apply 'append (mapcar '(lambda (x) (list x '(40 . 0.0) '(41 . 0.0) '(42 . 0.0)) ) tabli )) (list '(210 0.0 0.0 1.0)) );append und die liste die dazugehört sollte doch so aussehen ? linienblock 1 X-Einfügepunkt 0 linienblock 1 Y-Einfügepunkt 0 linienblock 1 Z-Einfügepunkt 0 linienblock 1 Layer 0 linienblock 1 Ausricht. 0 linienblock 1 X-Skalierung 1 linienblock 1 Y-Skalierung 2 linienblock 1 Z-Skalierung 3 linienblock 1 X-Extrusion 0 linienblock 1 Y-Extrusion -1 linienblock 1 Z-Extrusion 0
wie sieht denn meine eingabe aus wenn ich die linien zwischen die punkte hänge ? danke und gruss philipp Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 15. Mrz. 2006 01:03 <-- editieren / zitieren --> Unities abgeben: Nur für philoktet1
... das ist doch vollkommen egal an welcher Stelle die Punkte oder Linien in der Datei gespeichert sind, hauptsache je Zeile ein Element. Erstmal die Ganze Datei einlesen, dann trennen in die einzelnen Elemente und dann die Punkte und Linien zeichnen. Das DXF-Fragment erzeugt LWPolylines und keine Linien. Du solltest dich vorher entscheiden, was du als Ergebnis haben möchtest. Soll dein Gebilde am Ende als ein Zeichnungselement existieren, dann ist die LWPolyline das richtige Element, dann kannst du auch mehrerer Punkte zur Liniendefinition nutzen. BSP: L1, 0, p1, p2, p3, p4, p5, .. , pX 'und wie kriege ich die linien zwischen die punkte ?' Schau am besten mal in die Hilfe unter den Stichworten: command oder entmake Was hast du denn schon programmiert? Wo hakt es denn genau? Im Moment, sorry, habe ich den Eindruck, dass du noch keinen Plan (von AutoLISP) hast. Das soll jetzt keineswegs böse gemeint sein, aber deine Fragen lassen vermuten, dass du hier irgendwelche Scripte als Lösung erwartest, was sicher nicht ausreichen wird. Wie liest du denn die Punkte als einfache Koordinatenliste ein? Ist der Code von dir oder von wo auch immer zusammengestückelt? Ich bin der Meinung, wenn man eine ASCII-Datei mit 3 Koordinaten in der Zeile einlesen kann, dann kann man auch eine Datei mit X beliebig vielen Daten in einer Zeile einlesen. Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 15. Mrz. 2006 08:54 <-- editieren / zitieren --> Unities abgeben: Nur für philoktet1
Zitat: Original erstellt von philoktet1: ...versuche eine liste mit linien- und punktinformationen von einer dwg zu erstellen ...gruss philipp
Kannst du diese Datei mal hier reinstellen, damit man eine Vorstellung bekomment, was hier denn vorliegt (LWPOLYLINE und 3D Statik auslesen kann ich mir schon mal nicht so richtig vorstellen). Punkte zu benennen könnte man mit AutoCAD-Bordmitteln (ohne Programmierung) auch über attributierte Blöcke erreichen.
------------------ Mit freundlichem Gruß Udo Hübner Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
philoktet1 Mitglied Architekt
Beiträge: 7 Registriert: 11.03.2006
|
erstellt am: 15. Mrz. 2006 10:29 <-- editieren / zitieren --> Unities abgeben:
hi... bis jetzt hab ich alles mit vectorscript geschrieben und dachte der sprung auf lisp kann nicht so dramatisch sein ;-) eigentlich versuche ich hiermit nur einen teilaspekt aus einem grösseren zusammenhang darzustellen. ich habe ein javaprogramm das räume optimiert und diese als xml ausgibt. diese datei wird auf einen server geladen und durch einen genetischen algorithmus gedrückt und über mehrere generationen ein optimiertes system entwickelt (hoffentlich...) die statikersoftware rstab soll die einzelteile bewerten und ihnen eine fitness geben. acad brauche ich nur zum visualisieren und kontrollieren. um das auszuprobieren habe ich versucht die datei in eine excel zu parsen und in acad bzw rstab einzulesen. ich weiss auch nicht genau ob das der richtige weg ist, bis jetzt wurde halt rstab über den umweg excel, VBA, visual basic gefüttert. (hoffentlich kann man das später weglassen) also acad und das einlesen einer liste zu stäben und knoten ist nur mittel zum zweck und bevor ich alles neu machen, dachte ich , ich frag mal jemanden der sich damit auskennt :-) im moment funktioniert es auch ganz primitiv über den _SCRIPT befehl und das öffnen einer datei. um dies komfortabler zu gestalten suche ich eine .lsp die punkte und linien ausliest und darstellt. im moment ist das wohl nur ein syntaxproblem (anders als vworks)... irgendeine idee für eine "quick and dirty" lösung ? danke im voraus und gruss philipp Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 15. Mrz. 2006 10:58 <-- editieren / zitieren --> Unities abgeben: Nur für philoktet1
Hallo philipp, dann bastel dir doch eine XSLT, die das Zeugs in eine Lisp-Datei schreibt. LSP sind nur ASCIIs, was dann also mit dem Saxon-Transformator möglich sein sollte. Ich kann mir in diesem Zusammenhang aber auch eine Transformation in eine DXF-Datei vorstellen. Oder eine PHP, die dann eine DXF erzeugt. Damit wärst du Plattformunabhängig und die Geometrie kann in allen möglichen CAD-Systemen angezeigt werden. Oder du machst (wie scheinbar geplant) eine Transformation in das Punkte und Linien-Sysem. Dann brauchst du aber ein Programm, welches die so generierten Files im Acad zur Anzeige bringt. Dass du dafür fertige Lösungen findest, kann ich mir nicht vorstellen. Das Format der Dateien ist eben doch sehr speziell. Wenn du allerdings kurzfristig eine Lösung benötigts, dann kannst du mich gerne kontaktieren. Den Rahmen der freiwilligen Hilfe hier in den Foren übersteigt das Thema allerdings. Willst du es selber umsetzen und hast an bestimmten Punkten im Programm Fragen, dann ist das Forum sicher eine sehr gute Plattform um voran zu kommen. Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|