| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: CivilTINVolumeSurface: Kaufe Äpfel, kriege Birnen (1621 mal gelesen)
|
fred_tomke Mitglied Applikationsingenieur
Beiträge: 156 Registriert: 14.06.2004
|
erstellt am: 19. Okt. 2005 08:02 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich krieg hier Mega-schlechte Laune: Man erzeuge zwei TINSurfaces. Bilde aus den beiden ein TINVolumeSurface. Im VBA-Makro1 wird iterativ die Surface-Collection nach TINVolumeSurface geprüft. Für alle TINVolumeSurfaces werden aus dem Statistics-Objekt die Volumina ausgegeben. Ist das Surface vom Type aecckTINVolumeSurface, ist das Object vom Type AeccTinVolumeSurface und das Statistic-Object vom Type AeccTinVolumeSurfaceStatistics. So solls sein. Im VBA-Makro2 wird mittels ThisDrawing.Utility.GetEntity ein TinVolumeSurface gewählt. Geht der geneigte Entwickler davon aus, gleich dem GetEntity eine Variable vom Typ AeccTinVolumeSurface zu übergeben, krachts schon mal hier. Der Laie ist beeindruckt, den Profi wunderts. Gehen wir also eine Etage höher und übergeben GetEntity eine Variable vom Typ AeccSurface. Nun klappts. Das gewählte Element wird nach TINVolumeSurface geprüft. Im positiven Fall habe ich nunmehr eine Variable vom Typ AeccTinVolumeSurface bereitgehalten und weise - wie im Autodesk-Beispiel - der Variable oTinVolSurf oSurf aus GetEntity zu. set oTinVolSurf = oSurf Peng! Na gut, das geht dann auch nicht. Dann lassen wir uns von der Surfaces-Collection das entsprechende Objekt ausgeben und weisen es der Variable oTinVolSurf (vom Typ AeccTinVolumeSurface, weil es ist doch ein TinVolumeSurface) zu. set oTinVolSurf = oSurfaces(oSurf.Name) Peng! Spätestens an dieser Stelle glaubt der Laie, er habe sich im AutoCAD verklickt. Prüft man jedoch was in der Surfaces-Collection alles drin ist, wird man schnell fündig: Das TinVolumeSurface, das der User über den Arbeitsbereich erzeugt hat, ist vom Type aecckTINVolumeSurface, das Object ist aber vom Type AeccTinSurface und das Statistic-Object vom Type AeccTinSurfaceStatistics (siehe Anlage). So bekomme ich natürlich keine Volumina. Aber wieso? Hatte ich nicht das gleiche Problem unter VLisp? Hatte ich nicht auf Anraten von Autodesk mit VBA begonnen? Zitat: "...Yes , you can read the volume data in Map 3D 2006 / Civil 3D 2006 using other languages than VisualLisp. In my earlier communication, I had sent you an example in VBA which demonstrates creation of a volume surface and statistics calculation...." Und nun? VG, Fred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 19. Okt. 2005 08:59 <-- editieren / zitieren --> Unities abgeben: Nur für fred_tomke
|
fred_tomke Mitglied Applikationsingenieur
Beiträge: 156 Registriert: 14.06.2004
|
erstellt am: 19. Okt. 2005 09:21 <-- editieren / zitieren --> Unities abgeben:
Hm, wenn ich das aber tue, dann ist es ja im Prinzip falsch, den das gewählte Objekt ist ja ein AeccTinVolumeSurface und kein AeccTinSurface. Da ich nicht weiß, ob Du schon mit TinSurfaces konfrontiert warst, eine kurze Erklärung anbei (wenn Du das schon alles kennst, überlies es). Im Map 3D/Civil 3D gibt es zum einen AeccTinSurfaces, die ganz normal aus Punkten, Linien usw. mit Höheninformationen erzeugt werden. Die Volumendifferenz zweiter AeccTinSurfaces kann mit einem AeccTin<b>Volume</b>Surface ermittelt werden. Das ist ein eigenständiges Objekt als Ergebnis der Prismenberechnung. AeccTinSurface und AeccTin<b>Volume</b>Surface gehören zur Klasse AeccSurface. Deklariere ich die Variable oTinVolSurf als AeccSurface, kriege ich nur allgemeine Angaben, wie Name, Type usw. Eine typabhängige Eigenschaft ist das Statistics-Object, das es nicht vom AeccSurface gibt. Das Statistic-Object eines AeccTinSurface ist vom Typ AeccTinSurfaceStatistics und vom AeccTin<b>Volume</b>Surface ist es AeccTin<b>Volume</b>SurfaceStatistics. Nur unter AeccTin<b>Volume</b>SurfaceStatistics kriege ich die Eigenschaften CutVolume, FillVolume und NetVolume, nicht jedoch vom AeccTinSurfaceStatistics. In der Anlage VBA.JPG siehst Du, dass nach dem GetEntity das als AeccTinVolumeSurface erzeugte DGM von Map als AeccTinSurface mit dem Typ aecckTinVolumeSurface erkannt wird und ebenso falsch das AeccTinSurfaceStatistics-Object ausgibt. Konntest Du folgen? Du hast so schön IAeccTinSurface geschrieben - worin besteht der Unterschied zu AeccTinSurface? VG, Fred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fred_tomke Mitglied Applikationsingenieur
Beiträge: 156 Registriert: 14.06.2004 Map 2015 x64 Win7 x64 12 GB RAM ADN OpenDCL
|
erstellt am: 19. Okt. 2005 09:26 <-- editieren / zitieren --> Unities abgeben:
|
Stelli1 Moderator Verm.-Ing.
Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 19. Okt. 2005 09:31 <-- editieren / zitieren --> Unities abgeben: Nur für fred_tomke
Hallo Fred, was willst du eigentlich machen ?? Ein DGM nachprogrammieren ? Volumenberechnung ? zwei DGM verschneiden ? Willst du es anwenden oder verkaufen ? Wofür braucht man eine Multifunktion zur Eigenschaftsabfrage ? Dafür gibts ja die Objekte mit den Eigenschaften. Seit 2 Jahren habe ich keine Aufgaben mehr für ein DGM. Früher habe ich das DGM Atlas verwendet. Kann bis 4 Mio Punkte. Kostet auch nicht viel. Das hast du alles drin. Für die Massenberechnung müsstest du auch noch eine REB Datenart erzeugen. Stelli ------------------ Warum lisp'eln wenn's auch anders geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 19. Okt. 2005 09:37 <-- editieren / zitieren --> Unities abgeben: Nur für fred_tomke
|
fred_tomke Mitglied Applikationsingenieur
Beiträge: 156 Registriert: 14.06.2004
|
erstellt am: 19. Okt. 2005 09:56 <-- editieren / zitieren --> Unities abgeben:
Nein, ich will kein DGM nachprogrammieren. Ich will das von Autodesk mitgelieferte DGM nutzen: Nachdem man nun DGM's im Map und Civil erstellen kann, gelingt es mir endlich, Kundenanfragen zu beantworten, die bspw. mit unserer Pflanzenverwendung einem TinSurface (z.B. Wall-Oberfläche) eine Ansaat zuweisen wollen. Das Pendant dazu wäre für das LV-Massenmanagement das TinVolumeSurface für die Mengenberechnung: Ich weise einer Position im AutoCAD ein Objekt zu und habe das Volumen für die Kostenschätzung. VG, Fred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fred_tomke Mitglied Applikationsingenieur
Beiträge: 156 Registriert: 14.06.2004 Map 2015 x64 Win7 x64 12 GB RAM ADN OpenDCL
|
erstellt am: 19. Okt. 2005 09:58 <-- editieren / zitieren --> Unities abgeben:
|
fred_tomke Mitglied Applikationsingenieur
Beiträge: 156 Registriert: 14.06.2004
|
erstellt am: 20. Okt. 2005 07:50 <-- editieren / zitieren --> Unities abgeben:
... es ist sooooo traurig ... ADN-Antwort Hi Fred, Thanks for the update. I had noticed the screen selection behavior of a TinVolume surface earlier and I can reproduce the issue. I have updated the change request 690136 (logged earlier) with all necessary details. Meanwhile, as a workaround, I request you to use the code snippet earlier sent to you which loops through the surface collections and if any TinVolume surface exists it returns the statistics. Macht echt Sinn das Ganze. VG, Fred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 20. Okt. 2005 13:24 <-- editieren / zitieren --> Unities abgeben: Nur für fred_tomke
dann schau halt mal nach , was das denn für ein Typ ist Code:
Dim a ' ohne einer Typzuweisung Set a = osurfs(osurf.name) Debug.Print TypeName(a)
Zitat:
set oTinVolSurf = oSurf Peng!
ausserdem was heisst PENG ! Wie wärs mal mit einer Fehlermeldung ? Ist es überhaupt ein Laufzeitfehler 13, Typen unverträglich ? ------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC [Diese Nachricht wurde von fuchsi am 20. Okt. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fred_tomke Mitglied Applikationsingenieur
Beiträge: 156 Registriert: 14.06.2004
|
erstellt am: 20. Okt. 2005 16:52 <-- editieren / zitieren --> Unities abgeben:
Hallo Anton, ja, also, das ist so: - oTinVolSurf ist vom Typ AeccTinVolumeSurface, weil ich ein AeccTinVolumeSurface haben will. Nur wenn die Variable vom Typ AeccTinVolumeSurface ist, kann ich auch das Statistics-Object abfragen. - oSurf ist vom Typ AeccSurface Da oSurf.Type = aecckTinVolumeSurface ergibt, kann ich set oTinVolSurf = oSurf machen, weil oTinVolSurf vom Typ AeccTinVolumeSurface ist und oSurf ein Objekt vom Typ AeccTinVolumeSurface tragen sollte, das klappt nur deshalb, weil AeccTinVolumeSurface eine Ableitung von AeccSurface ist. AeccTinVolumeSurface ist abgeleitet von AeccSurface, genauso wie AeccTinSurface, AeccGridSurface und AeccGridVolumeSurface. Hast Du Dir das mitgesandte Bild vba.jpg angesehen? In dem Bild siehst Du, dass bereits das Item in der Überwachung in der Collection falsch ist - noch bevor ich es in eine Variable mit einem definierten Objekttyp gebracht habe. Das heißt: Ich habe ein AeccTinVolumeSurface gewählt, Autodesk gibt es aber als AeccTinSurface zurück, schreibt jedoch den Typ aecckTinVolumeSurface ran. Weil ich diesen Type bekommen, gehe ich davon aus, dass es ein AeccTinVolumeSurface ist und gehe den nächsten Schritt. Und dann kommt PENG! Die Fehlermeldung heißt: Laufzeitfehler 13, Typen unverträglich. Autodesk hat mitgeteilt, dass sie den Fehler reproduzieren können und mir raten, eben kein DGM anzuklicken. Was Sinn macht. Ich hoffe, ich konnte etwas Licht ins Dunkel bringen. Letztlich kann in diesem Fall keiner helfen außer ein Bugfixing von Autodesk selbst. VG, Fred
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fred_tomke Mitglied Applikationsingenieur
Beiträge: 156 Registriert: 14.06.2004 Map 2015 x64 Win7 x64 12 GB RAM ADN OpenDCL
|
erstellt am: 24. Okt. 2005 10:35 <-- editieren / zitieren --> Unities abgeben:
letzte Antwort zu diesem Problem vom ADN... Hi Fred, Thanks for the information regarding number of Civil 3D installations and expectations in earth work calculations feature. I have updated the change request with the details you have sent to us. I have also verified the issue using C# (as requested by you), however, no success in there too when we try to make a screen selection of a volume surface. I think it is due to the reason that, we are using the same COM API via Interop in .NET. I have also discussed this issue with my colleagues and they confirmed the same. Sorry for the bad news. AT this point, I can only request you to use the other procedure of looping through the surface collections and for a TinVolume surface get the statistics. I do agree with you that screen selection of a surface to get the volume statistics would be a better option when there are number of surfaces in a dwg file. I am trying to follow-up the status of the change Request logged on this issue and I will update you when I hear from our QA & Engineering team on the same. Verharren wir der Dinge, die da kommen mögen... VG, Fred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |