| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Eigenschaften einer Polylinei als Text ausweisen (1741 mal gelesen)
|
kilmar Mitglied Techniker Bau
Beiträge: 5 Registriert: 24.02.2010
|
erstellt am: 24. Feb. 2010 12:06 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, also zunächst bin ich komplett neu hier im Forum, und ich hoffe ich stelle hier keine blöden Frage... Weiters möchte ich noch anmerken dass ich in der lisp-Programmierung so gut wie keine Ahnung habe :-( Ich kann zwar lisp Datein laden, und das wars auch schon. Also ich hätte da folgendes Problem in meinem CAD-Programm 2010. Ich hätte da eine Zeichnung bzw. dwg Datei mit ein paar hundert Polylininien welche geschlossen sind. Und mich interessiert von jeder Polylinie die Eigenschaften: FLÄCHE und LÄNGE Weiters liegen die Polylinien je nach Eigenschaft auf unterschiedlichen Layern (z.B.: 01_Layer Nr.1; 02_Layer Nr.2; usw.) Nun bräuchte ich ein hilfreiches Tool welche mir die Eigenschaften (Fläche und Länge) für jede einzelne Polylinie seperat ausweist. Super wäre noch den Layernamen hinzuzufügen, z.B.: 01_Layer Nr.1: Fläche: 800,151 EH2; Länge: 70,345 EH und eben diese Information neben der Polylinie hintextet. Ich bin zwar beim CADWiesel schon fast fündig geworden, und zwar die "FLA_BER" lisp Datei. Aber mir fehlt da eben etwas, und zwar: - das der LAYERNAME im Text auch eingebaut wird - die Zusatzinfo der Länge der Polylinie bzw. die Abwicklung - und dass das ganze auf 3 Kommastellen ausgewiesen wird (d.h. 800.151 EH2 und nicht 800.15 EH2) - und eben alle Polylinien welche zum auswerten sind seperat je Polylinie hinzuschreiben, und nicht zu addieren Wenn mir da jemand helfen könnte wär dass super super toll :-) mfg der auf Hilfe angewiesene Markus PS: hier noch die CADWiesel lisp Datei ____________________________________ (defun c:fla_ber ( / t_2 Ss) ;;(if ;; (/= (findfile "md_fla.dwg")nil) ;;(progn (setq Ss nil t_2 nil) (setq Ss (ssget ));'((0 . "LWPOLYLINE")))) (if (not Ss) (princ (strcat "\nNichts gewählt.")) (progn (command "_.area" "_a" "_o") (while (setq t_2 (ssname Ss 0)) ;;; (setq md_in (cdr (assoc 10 (entget t_2)))) ;;; (setq md_rnr_in (ssget "X" t_2)) ;;; (setq startp md_in) (command t_2) (setq Ss (ssdel t_2 Ss)) );while (command "" "") (princ "\n") (princ (strcat "\n*****Gesamtfläche: " (rtos (getvar "area") 2 5)))(terpri) ;(command "_.Insert" "md_fla" startp "1" "1" "0" (rtos (getvar "area")2 2)) );endprogn );endif (setq startp (getpoint "Einfügepunkt:")) (command "_text" startp "2.5" "0" (rtos (getvar "area")2 2)) ;;);ende progn ;;);end if (princ) ) ____________________________________ 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: 24. Feb. 2010 12:21 <-- editieren / zitieren --> Unities abgeben: Nur für kilmar
Zitat: Original erstellt von kilmar: ...Ich bin zwar beim CADWiesel schon fast fündig geworden, und zwar die "FLA_BER" lisp Datei. Aber mir fehlt da eben etwas, und zwar: - das der LAYERNAME im Text auch eingebaut wird - die Zusatzinfo der Länge der Polylinie bzw. die Abwicklung - und dass das ganze auf 3 Kommastellen ausgewiesen wird (d.h. 800.151 EH2 und nicht 800.15 EH2) - und eben alle Polylinien welche zum auswerten sind seperat je Polylinie hinzuschreiben, und nicht zu addierenWenn mir da jemand helfen könnte wär dass super super toll :-) ...
Hallo,
wenn ich das richtig interpretiere, dann hast du etwas gefunden, brauchst aber etwas ganz anderes, und hoffst nun, dass dir jemand das Ganze macht. Dazu vielleicht ein Hinweis: Das Lisp-Forum ist zum Austausch zu Themen der Programmierung in dieser Programmiersprache gedacht. Es ist keine Plattform zum Wünsche äußern. Deine Aufgabenstellung umzusetzen ist nicht so schwer. Wenn du dich selber an der Umsetzung versuchen willst, also den Einstieg in die Programmierung machst, dann sei dir Hilfe zugesichert. Wenn du dies jedoch nicht vor hast, dann lies hier im Forum mal quer, und es werden dir einige User auffallen, die individuelle Programmierung als Dienstleistung (gegen Entgeld) anbieten. Bei Fragen ... 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 |
kilmar Mitglied Techniker Bau
Beiträge: 5 Registriert: 24.02.2010
|
erstellt am: 24. Feb. 2010 13:36 <-- editieren / zitieren --> Unities abgeben:
Seas Holger, danke für deine Antwort... Da ich leider keine Kohle habe um mir soetwas fachgerecht programmieren zu lassen, werde ich nun versuchen meine oben angeführten Probleme selbst zu lösen :-) also ich werd's echt versuchen... und es tut mir leid solch "anscheinend" blödsinnige fragen zu schreiben :-( könntest du mir vielleicht irgenwelche links zum thema lisp Programmierung für dummies wie mich zukommen lassen... wo man eben von null an versuchen kann dies irgendwie zu lernen... ...und vielleicht könntest mir ja noch einen tip geben wie man die drei kommastellen einstellt??? mfg der hilflose markus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 24. Feb. 2010 13:44 <-- editieren / zitieren --> Unities abgeben: Nur für kilmar
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 24. Feb. 2010 13:56 <-- editieren / zitieren --> Unities abgeben: Nur für kilmar
Zitat: Original erstellt von kilmar: Seas Holger, danke für deine Antwort... Da ich leider keine Kohle habe um mir soetwas fachgerecht programmieren zu lassen...
dann frag deinen Chef - ich glaube kaum, dass du so etwas privat benötigst. Zitat: Original erstellt von kilmar: ..., werde ich nun versuchen meine oben angeführten Probleme selbst zu lösen :-) also ich werd's echt versuchen... und es tut mir leid solch "anscheinend" blödsinnige fragen zu schreiben :-( ...
Deine Frage war nicht blödsinnig, nur falsch platziert. Zitat: Original erstellt von kilmar: ... könntest du mir vielleicht irgenwelche links zum thema lisp Programmierung für dummies wie mich zukommen lassen... wo man eben von null an versuchen kann dies irgendwie zu lernen... ...
Jetzt machst du es dir aber sehr einfach. Das Forum bietet eine sehr gute Suchfunktion. Für dich nach Lisp lernen gesucht: und gefunden Zitat: Original erstellt von kilmar: ...und vielleicht könntest mir ja noch einen tip geben wie man die drei kommastellen einstellt??? ...
Für dich nach Kommastellen gesucht: und gefundenGrüß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 |
kilmar Mitglied Techniker Bau
Beiträge: 5 Registriert: 24.02.2010
|
erstellt am: 24. Feb. 2010 16:16 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, danke für deine tipps :-) bin auch schon im Forum fündig geworden, jetzt hab ich mir folgende lisp Datei zusammengestöpselt und bin schon fast am Ende meiner Probleme... Vielleicht könntest du mir noch erklären wie man in der unten angeführten lisp Datei statt der manuellen Eingabe einen automatischen Auszugs des aktuellen layers macht??? BITTE :-) Und wenn ich dich um noch etwas BITTEN kann wäre dass wie man die Auswertungen (in diesem Fall dreimal d.h. Position->Fläche->Umfang) in einem setzt... er soll einfach alles mit einem Einfügepunkt machen und untereinander auflisten... (defun c:test ( / obj flae umfa) (setq filename "flae.dat") (setq trenn " ; ") (setq nachkomma 3) (Setq BLIALT (getvar "blipmode")) (Setq CMDALT (getvar "cmdecho")) (Setq OSMALT (getvar "osmode")) (setvar "blipmode" 0) (setvar "cmdecho" 0) (setvar "OSMODE" 0) (terpri) (SETQ obj (getpoint "Punkt in der Fläche")) (command "_.boundary" obj "") (command "_.area" "o" "_last") (setq flae (getvar "area")) (setq umfa (getvar "perimeter")) (terpri) (setq _typ (getstring "Position : ")) (alert (strcat "Fläche: " (rtos flae 2 nachkomma) "\nUmfang: " (rtos umfa 2 nachkomma) "\nPosition: " _typ )) (princ) (terpri) (setq file (open "flae.dat" "a")) (write-line (strcat _typ trenn (rtos flae 2 nachkomma) trenn (rtos umfa 2 nachkomma) ) file) (close file) (setq p_text (getpoint "Einfügepunkt für Beschreibung")) (setq s_text (strcat _typ)) (command "_.text" p_text "" "" s_text) (setq p_flae (getpoint "Einfügepunkt für Fläche")) (setq s_flae (strcat "A = " (rtos Flae 2 nachkomma)"m2")) (command "_.text" p_flae "" "" s_Flae) (terpri) (setq p_umfa (getpoint "Einfügepunkt für Umfang")) (setq s_umfa (strcat "U = " (rtos umfa 2 nachkomma)"m")) (command "_.text" p_umfa "" "" s_umfa) (terpri) (setvar "blipmode" BLIALT) (setvar "cmdecho" CMDALT) (setvar "OSMODE" OSMALT) ) (alert "Das Programm ist ordnungsgemäß geladen \nAufruf mit test ---> enter") Danke Markus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 24. Feb. 2010 18:35 <-- editieren / zitieren --> Unities abgeben: Nur für kilmar
Wenn Du das hier Zitat: (alert (strcat "Fläche: " (rtos flae 2 nachkomma) "\nUmfang: " (rtos umfa 2 nachkomma) "\nPosition: " _typ ))
erweiterst auf Code: (alert (setq gesamttext (strcat "Fläche: " (rtos flae 2 nachkomma) "\nUmfang: " (rtos umfa 2 nachkomma) "\nPosition: " _typ )))
dann hast Du schon den Text den Du (wahrscheinlich) willst. Und wie Du den ausgibst siehst Du weiter unten im Programm.------------------ Schöne Grüße Ernst www.geopaint.at 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: 25. Feb. 2010 08:45 <-- editieren / zitieren --> Unities abgeben: Nur für kilmar
Hallo kilmar, das Lisp-Teil, was du da ausgegrsben hast, passt aber nicht zu dem, was du eigentlich möchtest. Bei diesem clickst dun in eine augenscheinlich vorhandene Fläche und schreibst zu dieser die Fläche und Unfang raus. Du willst doch aber zu allen vorhandenen geschlossenen Polylinien eben diese Werte + Layername anschreiben. Dazu musst du dich zuerst mit Auswahlsätzen beschäftigen: (ich tippe das hier nur so runter, Code kann also Schreibfehler enthalten. (setq aws (ssget "_X" '((0 . "*POLYLINE")))) dann musst du die Elementnamen der Polylines ermitteln. Ich denke, wenn du nach bau_elemli im Forum suchst solltest du das Richtige finden. Das Folgende ist eine Schleife durch alle diese Polylinien (mapcar '(lambda (EL / LAYERname vlEL fl umfg txt ipt) ;Ermittlung Layername (setq LAYERname (cdr(assoc 8 (entget EL)))) ;Da die Eigenschaft Fläche und Umfang direkt als Eigenschaft des ActiveX-Objektes der Polyline abrufbar ist, musst du das VL-Object ermitteln (setq vlEL (vlax-ename->vlaObject EL)) ;Nun kannst du die Eigenschaften ermitteln (setq fl (vlax-get-property vlEL 'area) umfg (vlax-get-property vlEL 'Length) txt (strcat Layername "; " (rtos fl 2 2) "; " (rtos umfg 2 2)) ) ;Wohin nun mit dem Text? ich würde den in den Schwerpunkt der PL setzen (musst du mal im Forum suchen, wie das geht ;... Punkt ermitteln und Text setzen ) (if aws(bau_elemli aws)) ) So, das ist alles ... bei Fragen... 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 |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 25. Feb. 2010 23:06 <-- editieren / zitieren --> Unities abgeben: Nur für kilmar
|
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 04. Mrz. 2010 18:44 <-- editieren / zitieren --> Unities abgeben: Nur für kilmar
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 05. Mrz. 2010 08:48 <-- editieren / zitieren --> Unities abgeben: Nur für kilmar
|