| |
| 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: Fläche von Hatch/Solid (3611 mal gelesen)
|
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: 30. Okt. 2008 11:02 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 30. Okt. 2008 11:09 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
(vla-get-area ... Im VLIDE mal F1 drücken ..ActiveX und VBA-Referenz wählen.. Objectmodel .. da werden zu jedem Object die verfügbaren Methoden und Properties aufgelistet ------------------ - 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
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 30. Okt. 2008 11:16 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
|
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: 30. Okt. 2008 11:45 <-- editieren / zitieren --> Unities abgeben:
Grüß Euch @heiko Hab mal ein HATCH ausgewählt: Code: Befehl: (vlax-dump-object (vlax-ename->vla-object (car (entsel))) T)Objekt wählen: ; IAcadHatch: AutoCAD Hatch-Schnittstelle (Schraffur) ; Eigenschaftswerte: ; Application (RO) = #<VLA-OBJECT IAcadApplication 00b9d604> ; AssociativeHatch = 0 ; Document (RO) = #<VLA-OBJECT IAcadDocument 05400520> ; Elevation = 0.0 ; GradientAngle = 0.0 ; GradientCentered = -1 ; GradientColor1 = #<VLA-OBJECT IAcadAcCmColor 1adbd4a0> ; GradientColor2 = #<VLA-OBJECT IAcadAcCmColor 1adb9540> ; GradientName = "LINEAR" ; Handle (RO) = "39002" ; HasExtensionDictionary (RO) = 0 ; HatchObjectType = 0 ; HatchStyle = 0 ; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 1adbe184> ; ISOPenWidth = 100 ; Layer = "Abrechnung" ; Linetype = "ByLayer" ; LinetypeScale = 1.0 ; Lineweight = -1 ; Normal = (0.0 0.0 1.0) ; NumberOfLoops (RO) = 7 ; ObjectID (RO) = 2102415440 ; ObjectName (RO) = "AcDbHatch" ; OwnerID (RO) = 2112748808 ; PatternAngle = 0.0 ; PatternDouble = 0 ; PatternName (RO) = "_SOLID" ; PatternScale = 1.0 ; PatternSpace = 1.0 ; PatternType (RO) = 1 ; PlotStyleName = "ByLayer" ; TrueColor = #<VLA-OBJECT IAcadAcCmColor 1adbb5f0> ; Visible = -1 ; Unterstützte Methoden: ; AppendInnerLoop (1) ; AppendOuterLoop (1) ; ArrayPolar (3) ; ArrayRectangular (6) ; Copy () ; Delete () ; Evaluate () ; GetBoundingBox (2) ; GetExtensionDictionary () ; GetLoopAt (2) ; GetXData (3) ; Highlight (1) ; InsertLoopAt (3) ; IntersectWith (2) ; Mirror (2) ; Mirror3D (3) ; Move (2) ; Rotate (2) ; Rotate3D (3) ; ScaleEntity (2) ; SetPattern (2) ; SetXData (2) ; TransformBy (1) ; Update () T
Abgesehen davon, dass ich da keine Fläche sehe - wie könnte ich denn auf diese Werte zugreifen, etwa um (print) mit einem Wert zu füttern?@Thomas Ich nehme an (vla-get-area (vlax-ename->vla-object (car (entsel)))) Code: Befehl: (vla-get-area (vlax-ename->vla-object (car (entsel))))Objekt wählen: 2564.15 Befehl: (vla-get-area (vlax-ename->vla-object (car (entsel)))) Objekt wählen: ; Fehler: ActiveX-Server gab folgenden Fehler zurück: unbekannter Name: Area
bei LW-Poly gehts, bei HATCH - siehe oben ???Das Objekt-Modell (oder besser, diese Seite) kenn ich - aber da lande ich ja dann bei VBA und nicht bei Lisp - oder hab ich was übersehen ? ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 30. Okt. 2008 11:50 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
mmh????? hatch Befehl: (vlax-dump-object (vlax-ename->vla-object (car (entsel))) T) Objekt wählen: ; IAcadHatch: AutoCAD Hatch-Schnittstelle (Schraffur) ; Eigenschaftswerte: ; Application (RO) = #<VLA-OBJECT IAcadApplication 00d098b4> ; Area (RO) = 2488.95 ??? 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: 30. Okt. 2008 11:53 <-- editieren / zitieren --> Unities abgeben:
|
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 30. Okt. 2008 12:07 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 30. Okt. 2008 12:23 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
Zitat: Original erstellt von Geos: Das Objekt-Modell (oder besser, diese Seite) kenn ich - aber da lande ich ja dann bei VBA und nicht bei Lisp - oder hab ich was übersehen ?
Gibts da zwischen Lisp und VBA Unterschiede ??? Die Logik und die Namen und die Parameter sind doch dieselben ....
------------------ - 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 |
Ex-Mitglied
|
erstellt am: 30. Okt. 2008 12:28 <-- editieren / zitieren -->
Hi Ernst, ja, ich glaube es geht erst seit 2007. [EDIT] ==> sorry, 2006!! [/EDIT] Ich möchte nur kurz ergänzen, dass auch mit AutoCAD2009 die Flächenberechnung von Schraffuren Fehler hat, sprich in bestimmten Zuständen (elliptische Bögen und/oder Splines als Begrenzung) kann es vorkommen, dass keine Fläche berechnet werden kann. Das ist dann auch schon im Eigenschaftsfenster so, dass keine Fläche angezeigt wird. Wieso ist das hier zu erwähnen: aus der Erfahrung, dass Programme, die darauf aufbauen, dass es die Flächeneigenschaft bei Schraffuren geben muss, eben abfliegen. Also Error-Handling einbauen vor Zugriff auf Flächeneigenschaft!!! - alfred - [Diese Nachricht wurde von a.n. am 30. Okt. 2008 editiert.] |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 30. Okt. 2008 12:32 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
|
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: 30. Okt. 2008 17:43 <-- editieren / zitieren --> Unities abgeben:
Hallo @Alfred und Holger Mir ist es nicht gelungen - weder mit obigen Funktionen, noch im Eigenschaftsfenster - eine Hatch-Fläche zu ermitteln. Hatte aber auch nicht genug Zeit, um ausführlich zu testen. Sicher ist: den Hatches liegen nur LWPolys zugrunde, diese wiederum bestehen nur aus Geraden. Manche haben Inseln. Größenmäßig: max. 50m, aber Gauß-Krüger Koords. Was das Programm betrifft - ich wollte dasjenige, welches die Schraffur erzeugt, erweitern - es sollte auch die Fläche ausdrucken. @Thomas Nun, für die Fläche - sagen wir (LW)POLYLINE - gibts jetzt: (vla-get-area (vlax-ename->vla-object (car (entsel)))) oder - einige vl-Funktionen kenn ich auch schon (vlax-curve-getArea (vlax-ename->vla-object (car (entsel)))) Aber weder die eine, noch die andere Funktion finde ich im ObjectModel, geschweige denn die Syntax oder was ich wie übergeben muss bzw. was ich zurückbekomme. Die 2. Funkt. findet sich in der Acad-Hilfe, aber woher hast Du beispielsweise, die Funkt. (vla-get-area ...) ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 30. Okt. 2008 19:19 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
im Objectmodel in der Hilfe suche ich mir das Object ... Doppelklick ... Übersicht zum Objekt popt auf ... da findet man dann Properties wie LINETYPE .. die man mit (vla-get-LINETYPE VLA-OBJECT) abfragen kann .. Alternativ geht das mit (vlax-get-property VLA-OBJECT "LINETYPE") oder (vlax-get-property VLA-OBJECT 'LINETYPE) Methoden ruft man mit vla-METHODE oder vlax-invoke-method auf Ist immer das gleiche .... und wenn mans mal geschnallt hat echt pippi
------------------ - 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 |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 30. Okt. 2008 21:32 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
Hallo Ernst, mal ein anderer Ansatz, wenn es mit der Schraffur nicht direkt geht: Code: (defun c:get-hat-area ( / return) (command "_.-hatchedit" (car (entsel)) "_b" "_r" "_n") (setq return (vla-get-area (vlax-ename->vla-object (entlast)))) (entdel (entlast)) return )
- also die Schraffurumgrenzung als Region wiederherstellen und die Fläche abfragen. Das berücksichtigt dann auch die Löcher... Bis 2006 runter geht's. Älter hab' ich z.Zt. nicht. Musst Du also selbst testen Grüsse, Henning
------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de 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: 31. Okt. 2008 18:50 <-- editieren / zitieren --> Unities abgeben:
Danke Henning! Bei 2005 gibts die Option "_recreate Boundary" bei "hatchedit" leider noch nicht. Aber ich werd ja hoffentlich mal 'ne neuere Version bekommen ... Danke auch Dir, Thomas! Aus Deinen Hinweisen leite ich mal folgendes ab: Die Funktion (vlax-get-property VLA-OBJECT "xxx") liefert Objekteigenschaften. Zu übergeben sind: VLA-OBJECT - bekommt man z.B. von der Funktion (vlax-ename->vla-object ... ), der wiederum ein ENAME, wie beispielsweise von (car (entsel)) oder (entlast) geliefert, zu übergeben ist. "xxx" - steht für die gesuchte Eigenschaft, wobei die xxx durch die im ObjectModel, beim jeweiligen ENTITIE, vorgefundenen Zeichenketten (= Eigenschaften) zu ersetzen sind. Die Funktion (vla-get-xxx VLA-OBJECT) liefert Objekteigenschaften. Die xxx sind (wie oben) wieder durch die, im ObjectModel beim jeweiligen ENTITIE, vorgefundenen Zeichenketten (= Eigenschaften) zu ersetzen. Zu übergeben ist: VLA-OBJECT - bekommt man z.B. von der Funktion (vlax-ename->vla-object ... ), der wiederum ein ENAME, wie beispielsweise von (car (entsel)) oder (entlast) geliefert, zu übergeben ist. Wenn auch laienhaft, aber immerhin haben wir jetzt deutsche Beschreibungen für zwei vl-Funktionen. Umgekehrt scheints nicht so einfach ... Code: Befehl: (vlax-put-property (vlax-ename->vla-object #ename) "LAYER" "AB3AU") nil
... das funkt ...Code: Befehl: (vlax-put-property (vlax-ename->vla-object #ename) "patternname" "ANSI37") ; Fehler: ActiveX-Server hat einen Fehler zurückgegeben: Typkonflikt
... das nicht ... naja, in der Hilfe stehts ja auch so: (vlax-put-property vlaobj 'Color 1)Code: Befehl: (vlax-put-property (vlax-ename->vla-object #ename) 'patternname ANSI37) ; Fehler: ActiveX-Server hat einen Fehler zurückgegeben: Typkonflikt
... auch nicht ... aber ANSI37 is ja ein StringCode: Befehl: (vlax-put-property (vlax-ename->vla-object #ename) 'patternname "ANSI37") ; Fehler: ActiveX-Server hat einen Fehler zurückgegeben: Typkonflikt
... nein - dann vielleicht ...
Code: Befehl: (vla-put-patternname (vlax-ename->vla-object #ename) "ANSI37") ; Fehler: no function definition: VLA-PUT-PATTERNNAME
Der springende Punkt scheint: Zitat: ...und wenn mans mal geschnallt hat ...
Aber für heute lass ichs mal ... ------------------ Schöne Grüße Ernst www.geopaint.at 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: 31. Okt. 2008 19:12 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
Es ist noch kein Meister vom Himmel gefallen Code: Befehl: (vlax-dump-object (vlax-ename->vla-object (car (entsel))) 'T) Objekt wählen: ; IAcadHatch: AutoCAD Hatch-Schnittstelle (Schraffur) ; Eigenschaftswerte: ... ; PatternAngle = 0.0 ; PatternDouble = 0 ; PatternName (RO) = "SOLID" ; PatternScale = 1.0 ; PatternSpace = 1.0 ; PatternType (RO) = 1 ; PlotStyleName = "ByLayer" ; TrueColor = #<VLA-OBJECT IAcadAcCmColor 105eac50> ; Visible = -1 ; Unterstützte Methoden: ... ; Rotate (2) ; Rotate3D (3) ; ScaleEntity (2) ; SetPattern (2) ; SetXData (2) ; TransformBy (1) ; Update ()
Patternnamen ist ein RO = ReadOnly attribut, kann also nuir gelsen, nicht gesetzt werden. Aber es gibt eine Methode zum Setzen des Schraffurmustern - Setpattern Dazu gibts natürlich nicht (vlax-set-property ... sondern (vlax-invoke-method ...------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 31. Okt. 2008 19:39 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
|
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 31. Okt. 2008 19:54 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
|
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: 01. Nov. 2008 18:00 <-- editieren / zitieren --> Unities abgeben:
Da seht Ihr, auf welch blöde Ideen man kommen kann, wenn man auf Vermutungen angewiesen ist. Warum funkt (vlax-put-property) beim Layer und nicht beim Patternname (bzw. warum ist Patternname RO, wenn über setPattern doch änderbar)? Try and Error mag ja auch eine Lernmöglichkeit sein, aber bei mir funktioniert das nur, wenn der Teil der Versuche, die mit Error enden, sehr stark in der Minderheit bleiben. Meine eigentliche Aufgabe ist nicht das Programmieren, aber wenn ich bei meiner Arbeit "vor einen Hindernis stehe", muss ich abschätzen, ob sich das Abändern/Erweitern vorhandener Werkzeuge (= *.lsp), oder sogar ein neues Programm lohnt. In der Regel ist da auch keine Zeit um die engl. Hilfe - is ja besser als gar nichts - (für die (vl-..) und (vlax-..)-Funktionen durchzuackern (... soll ja alles schon vorgestern fertig sein ). Ich hab zwar schon öfter mit dem Gedanken gespielt, mir die mal zu übersetzen (in der Freizeit, mit dict.leo), hätte ja einen enormen Lerneffekt, aber wenns dann so endet wie oben ... Stimmt, Axel hat bereits einige Funktionen beschrieben - aber für das Auslesen/Setzen der Eigenschaften hatte ich bereits (kürzere ) eigene Funftionen (dxf wert ename) und (mod ename grcode wert). Diese vl-Funktion waren also keine Bereicherung, weshalb ich das wohl nicht mit der nötigen Aufmerksamkeit gelesen hatte und daher mein Gehirn wohl auch die Speicherung verweigert hat. Interessant werden die dann wieder, wenn's mit dem "alten Lisp" mühsam wird oder gar nicht geht - so wie oben bei der Fläche, die gibts eben nicht über (cdr (assoc x (entget ename))). Und dann fällt mir auch wieder ein, dass Ihr hier (vla-..)-Funktionen gepostet werden und denke mir, dass derjenige ja auch irgendwo gelesen haben müßte, dass es beispielsweise eine Funktion (vla-get-area ..) gibt, der ein VLA-Object zu übergeben ist, oder eben (vla-SetPattern ...). Und hie und da frag ich dann halt - wie oben - in der Hoffnung, dass es in der Zwischenzeit doch ein neues Buch oder WebSite gibt um halt keine Info-Möglichkeit zu "verpassen".
------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 04. Nov. 2008 02:54 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
Hallo Ernst! Also, wenn das mit "_recreate Boundary" bei "hatchedit" in deinem 2005er nicht geht, dann ist für dich vielleicht dieser Link interessant. Einziger Nachteil: Es werden genau die Objekte wiederhergestellt, aus denen die Umgrenzung ursprünglich gebildet wurde. Das muss nicht immer eine Polylinie sein. Daher wird danach das Messen der Fläche mitunter etwas aufwendiger, wenn man die einzelnen Objekte (Linien, Bögen,..) erst händisch in eine PL umwandeln muss. [EDIT:]Hab grad auf deiner Homepage das Fläche-Programm gesehen. Laut deiner Programm-Beschreibung müsstest du zusammen mit dem gerade von mir geposteten Link genau das hinkriegen, was du willst: Die Fläche von Schraffuren. (Zumindest, wenn es bei dir funktioniert. Bei mir funktioniert dein Prog nämlich nicht.)[/EDIT] ------------------ Gruß, Stephan www.stbartl.at [Diese Nachricht wurde von autocart am 04. Nov. 2008 editiert.] 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: 04. Nov. 2008 17:30 <-- editieren / zitieren --> Unities abgeben:
Danke für den Link - kann ich sicher irgendwann brauchen. Die Arbeit, die Auslöser für die Frage war, ist fertig (war nicht so unfangreich) hab die Frage eher interessehalber gestellt. Was das Flächenprogramm betrifft - (hat) funktioniert bis ACAD 2005 - zumindest bei mir. ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |