Die TB2 Fachschale wurde mit Flatport migriert und konfiguriert. Anschliessend wird die Flatport-Migration in ein weiteres Schema erneut durchgeführt, um den OracleImport (Mapping) zu konfigurieren. Später werden die TB2 Daten in die vorbereitete Map-Fachschale via Flatport und OracleImport migirert.
Bisher hat das Einrichten des OracleImportes und der Import selbst immer funktioniert - bis gestern bei einer Tabelle während des Importes folgende Fehlermeldung ausgegeben wurde:
Fehler:ORA-01400: Einfügen von NULL in ("WT_TB"."WTB_KB_BAUWERK_TBL"."FID") nicht möglich
Die Meldung ist soweit nachvollziehbar - aber warum tritt das Problem plötzlich auf und warum bei einer Tabellen aber nicht bei den anderen Tabellen im Schema?
Die Erkläung ist einfach, leider habe ich doch einige Zeit und letztlich den Hinweis vom Kollegen benötigt - der zugehörige Trigger "WTB_KB_BAUWERK_TBL_FID" war deaktiviert. Warum dies passiert ist kann ich nicht sagen - manuell deaktiviert habe ich ihn nicht. Nach dem Aktivieren lief die Migration ohne weitere Meldungen durch.
Map 2013, SP2
Tuesday, 29 October 2013
Monday, 28 October 2013
Ungültiger View aus TB_Dictionary entfernt / Views per Script registrieren
Wenn man die in der 1-Klick-Wartung gefundenen Probleme beheben lässt und die Option "Fachschalen-Wörterbuch" aktiviert hat sollte man sich darauf einstellen, dass ein ungültiger View aus TB_DICTIONARY entfernt wird. In der Map Hilfe heisst es:
Wörterbuch - Korrigiert oder entfernt ungültige Einträge in TB_DICTIONARY.
Das war mir nicht bewusst. In diesem Zusammenhang noch der Hinweis - anstelle die Views (etwas umständlich) über den Map-Administrator manuell einzubinden kann man das auch per Script. Hier ein Beispiel für die Ausführung im SQL Developer:
--in der Fachschale ausführen, hier: wt_fm
declare n_ret number;
begin
n_ret:=MAPSYS.FeatureClass.CreateFeatureClass('FM_V_DSP_SW_TRASSEKNOTEN','FM_V_DSP_SW_TRASSEKNOTEN','Darstellung','P', '', 2, 0.00050, '352257', 'anyinteract', 1000000, 1000000, 10000, -10, -10, -10, 1, 1);
n_ret:=MAPSYS.FeatureClass.CreateFeatureClass('FM_V_DSP_SW_TRASSEKANTE','FM_V_DSP_SW_TRASSEKANTE','Darstellung','L', '', 2, 0.00050, '352257', 'anyinteract', 1000000, 1000000, 10000, -10, -10, -10, 1, 1);
end;
--separat ausführen:
commit;
Die einzelnen Parameter für CreateFeatureClass sind beschrieben in "Autodesk Topobase ServerSide API Help", Stand 2011. Eine neuere Dokumentation habe ich nicht gefunden. Hier der Auszug aus der CHM Datei (Topobase_ServerSide_API.chm).
FeatureClassFactory.createFeatureClass Methodcreate a feature class with all necessary attributes.
Java
public static AbstractFeatureClass createFeatureClass(
String featureClassName,
String caption,
String topicName,
String featureClassType,
int parent_f_class_id,
int dimensions,
double tolerance,
String srid,
String spatialMask,
double max_x,
double max_y,
double max_z,
double min_x,
double min_y,
double min_z,
int readOnly,
int objectExists
) throws SQLException, TopobaseException;
Parameters
Parameters Description
featureClassName - name of the new feature class
caption - caption of the new feature class
topicName - in which topic does the feature class is in
featureClassType - type of the new feature class [varchar2(1)] -> P - Point, L - Line, O - Polygon, A - Label, C - Collection, T - Attribute, R - Raster, E - Centroid, S - CompoundSurface, I - CompoundLineString, D - AutoCad Collection ,W - WMSMap, M - Dimension
parent_f_class_id - parent feature class of the new feature class
dimensions - spatial dimension of the new feature class
tolerance - spatial tolerance of the new feature class
srid - spatial reference ID of the new feature class
spatialMask - spatial query mask of the new feature class
max_x - max x value of the new feature class
max_y - max y value of the new feature class
max_z - max z value of the new feature class
min_x - min x value of the new feature class
min_y - min y value of the new feature class
min_z - min z value of the new feature class
readOnly - Feature class is read only
objectExists - Table/View already exists (register feature class only)
Returns
instance of an abstract feature class object
Remarks
See Also
FeatureClassFactory Class
FeatureClassFactory Members
topobase.feature Package
geändert am 13.11. - die GRANTS sollten nicht erforderlich sein, da die Ausführungsberechtigung bereits der Rolle 'public' zugewiesen wurde. Daher GRANT/REVOKE Verweis im Beispielscript entfernt.
Wörterbuch - Korrigiert oder entfernt ungültige Einträge in TB_DICTIONARY.
Das war mir nicht bewusst. In diesem Zusammenhang noch der Hinweis - anstelle die Views (etwas umständlich) über den Map-Administrator manuell einzubinden kann man das auch per Script. Hier ein Beispiel für die Ausführung im SQL Developer:
--in der Fachschale ausführen, hier: wt_fm
declare n_ret number;
begin
n_ret:=MAPSYS.FeatureClass.CreateFeatureClass('FM_V_DSP_SW_TRASSEKNOTEN','FM_V_DSP_SW_TRASSEKNOTEN','Darstellung','P', '', 2, 0.00050, '352257', 'anyinteract', 1000000, 1000000, 10000, -10, -10, -10, 1, 1);
n_ret:=MAPSYS.FeatureClass.CreateFeatureClass('FM_V_DSP_SW_TRASSEKANTE','FM_V_DSP_SW_TRASSEKANTE','Darstellung','L', '', 2, 0.00050, '352257', 'anyinteract', 1000000, 1000000, 10000, -10, -10, -10, 1, 1);
end;
--separat ausführen:
commit;
Die einzelnen Parameter für CreateFeatureClass sind beschrieben in "Autodesk Topobase ServerSide API Help", Stand 2011. Eine neuere Dokumentation habe ich nicht gefunden. Hier der Auszug aus der CHM Datei (Topobase_ServerSide_API.chm).
FeatureClassFactory.createFeatureClass Methodcreate a feature class with all necessary attributes.
Java
public static AbstractFeatureClass createFeatureClass(
String featureClassName,
String caption,
String topicName,
String featureClassType,
int parent_f_class_id,
int dimensions,
double tolerance,
String srid,
String spatialMask,
double max_x,
double max_y,
double max_z,
double min_x,
double min_y,
double min_z,
int readOnly,
int objectExists
) throws SQLException, TopobaseException;
Parameters
Parameters Description
featureClassName - name of the new feature class
caption - caption of the new feature class
topicName - in which topic does the feature class is in
featureClassType - type of the new feature class [varchar2(1)] -> P - Point, L - Line, O - Polygon, A - Label, C - Collection, T - Attribute, R - Raster, E - Centroid, S - CompoundSurface, I - CompoundLineString, D - AutoCad Collection ,W - WMSMap, M - Dimension
parent_f_class_id - parent feature class of the new feature class
dimensions - spatial dimension of the new feature class
tolerance - spatial tolerance of the new feature class
srid - spatial reference ID of the new feature class
spatialMask - spatial query mask of the new feature class
max_x - max x value of the new feature class
max_y - max y value of the new feature class
max_z - max z value of the new feature class
min_x - min x value of the new feature class
min_y - min y value of the new feature class
min_z - min z value of the new feature class
readOnly - Feature class is read only
objectExists - Table/View already exists (register feature class only)
Returns
instance of an abstract feature class object
Remarks
See Also
FeatureClassFactory Class
FeatureClassFactory Members
topobase.feature Package
geändert am 13.11. - die GRANTS sollten nicht erforderlich sein, da die Ausführungsberechtigung bereits der Rolle 'public' zugewiesen wurde. Daher GRANT/REVOKE Verweis im Beispielscript entfernt.
Thursday, 24 October 2013
Blog 'Beyond the Box'
Bei Autodesk gibt es noch einen Blog, der sich auch mit Map/AIMS/Topobase beschäftigt - "Beyond the Box". Der Blog vielleicht nicht so bekannt - hat aber gerade einen interessanten Artikel zum Thema AIMS Performance.
Wednesday, 16 October 2013
Publizieren nach AIMS - Tooltip
In Map kann man für einen Layer "QuickInfos" erstellen (Kontextmenü zum Layer > Quickinfos einrichten). Leider werden diese beim Publizieren nach AIMS nicht zu "Tooltips".
In AIMS muss man dann die Tooltipps nachträglich konfigurieren. Muss man später das Darstellungsmodell nochmal publizieren gehen die eingerichteten Tooltipps verloren.
Jetzt kann man bei der Erstellung der Darstellungsmodelle schon den Tooltip für AIMS mitkonfigurieren. In Map hat man davon leider nichts aber beim (erneuten) Publizieren nach AIMS sind die Tooltips dann schon vorhanden.
Dazu muss man in der Layer Datei unterhalb <VectorLayerDefinition> den Tooltip definieren. Dieser entspricht einem normalen Map/AIMS "Ausdruck" innerhalb des XML Tags <ToolTip></ToolTip>, z.B.
<ToolTip>Concat ( 'DP-Objekt Nr.: ', OBJEKT, Concat ( '\n', BEZEICHNUNG, CONCAT( '\n', SCHUTZMASSNAHME ) ))</ToolTip>
Lädt man das Darstellungsmodell in Map wird der <ToolTip> ignoriert. Speichert man das Darstellungsmodell bleibt der <ToolTip> erhalten (zumindest hat das bisher bei mir mit "Speichern" "Speichern unter" funktioniert).
Man hat zwar bei der Erstellung des Darstellunsgmodells einen etwas höheren Aufwand - erspart sich später aber das manuelle Einrichten der Tooltipps in AIMS.
Map 2013, SP2
In AIMS muss man dann die Tooltipps nachträglich konfigurieren. Muss man später das Darstellungsmodell nochmal publizieren gehen die eingerichteten Tooltipps verloren.
Jetzt kann man bei der Erstellung der Darstellungsmodelle schon den Tooltip für AIMS mitkonfigurieren. In Map hat man davon leider nichts aber beim (erneuten) Publizieren nach AIMS sind die Tooltips dann schon vorhanden.
Dazu muss man in der Layer Datei unterhalb <VectorLayerDefinition> den Tooltip definieren. Dieser entspricht einem normalen Map/AIMS "Ausdruck" innerhalb des XML Tags <ToolTip></ToolTip>, z.B.
<ToolTip>Concat ( 'DP-Objekt Nr.: ', OBJEKT, Concat ( '\n', BEZEICHNUNG, CONCAT( '\n', SCHUTZMASSNAHME ) ))</ToolTip>
<ToolTip> Beispiel im Map-Layer |
Tooltip konfiguriert in AIMS/Studio |
Man hat zwar bei der Erstellung des Darstellunsgmodells einen etwas höheren Aufwand - erspart sich später aber das manuelle Einrichten der Tooltipps in AIMS.
Map 2013, SP2
Monday, 14 October 2013
Formulare anpassen per SQL
Im Formular-Designer lassen sich scheinbar nicht die Eigenschaften mehrerer gleichartiger Steuerelemente gleichzeitig ändern - zwar kann man die Steuerelemente auswählen und einen neuen Wert für eine Eigenschaft zuweisen aber die Zuweisung wird ignoriert. Hat man mehrere gleichartige Steuerelemente die man anpassen will ist die Änderung per SQL schneller als jedes Element anzufassen und anzupassen.
In der Tabelle TB_GN_DIALOG sucht man sich die ID des fraglichen Formulars. Damit kann man in der Tabelle TB_GN_CONTROL die Steuerlemente des Formulars herausfiltern, z.B. alle CheckBox Elemente:
select * from tb_gn_control where dialog_id = 6 and upper(classname) = 'CHECKBOX';
Um die FALSE und TRUE Werte sowie die Grösse der CheckBox Elemente anzupassen reicht ein UPDATE wie:
update tb_gn_control
set
falsevalue = 'N',
truevalue = 'J',
width = 40
where dialog_id = 6 and upper(classname) = 'CHECKBOX';
Das Positionieren mehrerer Elemente gleichzeitig - Verschieben per Maus - ist im Dialog Designer möglich.
Map 2013, SP2
Mehrere Checkboxen anpassen.... |
select * from tb_gn_control where dialog_id = 6 and upper(classname) = 'CHECKBOX';
Um die FALSE und TRUE Werte sowie die Grösse der CheckBox Elemente anzupassen reicht ein UPDATE wie:
update tb_gn_control
set
falsevalue = 'N',
truevalue = 'J',
width = 40
where dialog_id = 6 and upper(classname) = 'CHECKBOX';
....Endergebnis |
Map 2013, SP2
Wednesday, 9 October 2013
Flatport Migration (TBImport) - "Deleted" Daten werden mit migriert?
Bei einem der TB2 Schemas tritt das merkwürdige Phänomen auf, dass auch die in TB2 gelöschten Datensätze mit migriert werden. In TB2 hat die Fachschale 3 vollzogenen Mutationen und die Flatport-Migration erfolgt mit der Option "legal only" für die Mutationsübernahme.
Bei anderen TB2 Dokumente mit Mutationen, die auf gleiche Art migriert wurden, sind die gelöschten Daten nicht mit übertragen worden.
Warum das Problem nun bei diesem Dokument auftritt ist nicht klar. Leert man vor dem Flatport die Tabelle TB_MUTATIONS erfolgt die Datenübernahme aber wieder so wie erwartet.
Das Problem tritt sowohl mit Map 2012 und Map 2013 auf.
Bei anderen TB2 Dokumente mit Mutationen, die auf gleiche Art migriert wurden, sind die gelöschten Daten nicht mit übertragen worden.
Warum das Problem nun bei diesem Dokument auftritt ist nicht klar. Leert man vor dem Flatport die Tabelle TB_MUTATIONS erfolgt die Datenübernahme aber wieder so wie erwartet.
Das Problem tritt sowohl mit Map 2012 und Map 2013 auf.
Monday, 7 October 2013
Trigger umstellen von TB2 auf Map
Vor kurzem hatte ich schon in einem anderen Beitrag darauf hingewiesen, dass man Formulare besser nicht im Administrator oder in Map ohne Bildaufbau testet. Leider habe ich meine eigene Erkentniss ignoriert und den gleichen Fehler wieder begangen - diesmal im Zusammenhang mit Triggern.
Aus TB2 habe ich einen Trigger übernommen und auf die neuen AW-Tabellen- und Spaltennamen angepasst sowie die Verweise auf "deleted=0" entfernt. Ein kurzer Test mit Map - alles läuft wie erwartet. Dann testet die Kollegin und es geht doch nicht....Unterschied - ich habe ohne Bildaufbau getestet, die Kollegin mit Bildaufbau.
TB2 Trigger:
create or replace
TRIGGER AW_HALTUNG_SPUEL
BEFORE UPDATE OF SPUEL_INTERVALL ON AW_HALTUNG
FOR EACH ROW...
Ändert sich für eine Haltung das Spülintervall dann wird der nächste reguläre Spültermin neu berechnet. Man kann im Formular aber den nächsten Spültermin auch manuell eintragen.
In Map liess sich nun der nächste Spültermin nicht mehr ändern - bei Angabe eines neuen Datums wurde wieder der vorherige (errechnete) Spültermin eingetragen.
Ursache scheint zu sein, dass beim einem UPDATE in Map alle Spalten aktualisiert werden - nicht nur die Spalte, deren Wert sich im Formular geändert hat. Beim Setzen des Datums wurde also auch das Spülintervall aktualisiert (mit dem alten Wert) - mit der Folge, dass der Trigger oben ausgelöst, das Spüldatum neu errechnet und wieder auf den vorherigen Wert zurückgesetzt wurde.
Im Trigger ist jetzt ein zusätzlicher Test enthalten der prüft, ob sich der Intervall-Wert tatsächlich geändert hat. Nur dann wird die Berechnung ausgeführt:
-- nur abarbeiten, wenn sich Intervall tatsächlich geändert hat:
IF (:new.W_WASHING_INTERVAL != :old.W_WASHING_INTERVAL) THEN
...
Aus TB2 habe ich einen Trigger übernommen und auf die neuen AW-Tabellen- und Spaltennamen angepasst sowie die Verweise auf "deleted=0" entfernt. Ein kurzer Test mit Map - alles läuft wie erwartet. Dann testet die Kollegin und es geht doch nicht....Unterschied - ich habe ohne Bildaufbau getestet, die Kollegin mit Bildaufbau.
TB2 Trigger:
create or replace
TRIGGER AW_HALTUNG_SPUEL
BEFORE UPDATE OF SPUEL_INTERVALL ON AW_HALTUNG
FOR EACH ROW...
Ändert sich für eine Haltung das Spülintervall dann wird der nächste reguläre Spültermin neu berechnet. Man kann im Formular aber den nächsten Spültermin auch manuell eintragen.
In Map liess sich nun der nächste Spültermin nicht mehr ändern - bei Angabe eines neuen Datums wurde wieder der vorherige (errechnete) Spültermin eingetragen.
Ursache scheint zu sein, dass beim einem UPDATE in Map alle Spalten aktualisiert werden - nicht nur die Spalte, deren Wert sich im Formular geändert hat. Beim Setzen des Datums wurde also auch das Spülintervall aktualisiert (mit dem alten Wert) - mit der Folge, dass der Trigger oben ausgelöst, das Spüldatum neu errechnet und wieder auf den vorherigen Wert zurückgesetzt wurde.
Im Trigger ist jetzt ein zusätzlicher Test enthalten der prüft, ob sich der Intervall-Wert tatsächlich geändert hat. Nur dann wird die Berechnung ausgeführt:
-- nur abarbeiten, wenn sich Intervall tatsächlich geändert hat:
IF (:new.W_WASHING_INTERVAL != :old.W_WASHING_INTERVAL) THEN
...
Wenn es nicht mit Map geht....
Aus Map heraus hat der vollständige Interlis Export nicht funktioniert. Führt man den Export aber mit dem Sachdateneditor durch, dann funktioniert der Export auch.
Das ist eventuell nicht nur auf den Interlis Export beschränkt - wer Probleme mit bestimmten Funktionen/Abläufen in Map hat sollte daher mal schauen, ob sich das nicht auch über den Sachdateneditor besser bewerkstelligen lässt.
Das ist eventuell nicht nur auf den Interlis Export beschränkt - wer Probleme mit bestimmten Funktionen/Abläufen in Map hat sollte daher mal schauen, ob sich das nicht auch über den Sachdateneditor besser bewerkstelligen lässt.
Sachdateneditor |
Friday, 4 October 2013
Problem mit TB_SQL bei Job-aktiven Dokumenten
In Map 2013 gibt es Problem bei der Verwendung von TB_SQL in einem Job-aktiven Dokument. Verschiebt man in einem offenen Job z.B. ein Punktfeature kann es zu folgender Meldung kommen:
Die Meldung wird permanent wiederholt sobald man nur die Maus in der Zeichnung bewegt - das Arbeiten wird so ziemlich abgebremst. Das Objekt selbst wird aber verschoben.
Das Problem tritt nur auf, wenn der Layer keinen Standard-Stil aufweist, wie z.B. hier:
Definiert man einen Standard Stil erscheint die Meldung nicht mehr. Problem ist bei Autodesk inzwischen bekannt.
Gerade bei Verwendung von Jobs ist der Einsatz von TB_SQL in der Map - Hilfe beschrieben.
Map 2013, Sp2.1
Meldung in Map - FDO-Befehl konnte nicht ausgeführt werden. no such function: TB_SQL |
Die Meldung wird permanent wiederholt sobald man nur die Maus in der Zeichnung bewegt - das Arbeiten wird so ziemlich abgebremst. Das Objekt selbst wird aber verschoben.
Das Problem tritt nur auf, wenn der Layer keinen Standard-Stil aufweist, wie z.B. hier:
Layer ohne Standard-Stil führt zu Problemen bei TB_SQL und Jobs |
Definiert man einen Standard Stil erscheint die Meldung nicht mehr. Problem ist bei Autodesk inzwischen bekannt.
Gerade bei Verwendung von Jobs ist der Einsatz von TB_SQL in der Map - Hilfe beschrieben.
Map 2013, Sp2.1
Layer-Datei Editieren - XML Fehler finden
Beim Editieren der Layer Dateien passieren gelegentlich Tipp-Fehler oder ähnliches. Beim erneuten Laden des Darstellungsmodells erhält man dann eine Meldung wie diese:
Fehlermeldung beim Bildaufbau - XML Struktur einer der Layerdateien stimmt nicht. |
Schaut man in der Layer-Datei nach, dann ist in Zeile
249/250 kein Fehler zu finden.
Kein Fehler in der angegeben Zeile 249/250? |
Ohne weitere XML Werkzeuge konnte ich die korrekte
Zeilennummer mit Firefox ermitteln. Dazu die Layerdatei mit der Dateiendung
"XML" versehen und in den Firefox ziehen (scheinbar gibt es bei
meiner FF Version kein "Datei > ÖFFNEN" mehr?). Firefox meldet als
Ursache die Zeile 269:
Layerdatei als XML Datei in Firefox laden |
- dort findet sich dann tatsächlich auch dem Fehler:
Fehler ist tatsächlich in Zeile 269 - "<" fehlt. |
Bisher hatte ich bei Map das Gefühl, dass die in der
Fehlermeldung gezeigte Zeile auch den Fehler enthält. Aber heute hat das nicht
gepasst.
Der IE konnte das früher - glaube ich mich zu erinnern -
auch. Jetzt lädt er die XML Datei einfach als Text ohne XML Syntaxprüfung /
Syntaxhighlight. Vielleicht auch nur eine Einstellungssache…
Thursday, 3 October 2013
TB2 Darstellungsmodell nach Map umstellen – Beispiel 1 – Block
DM in TB2
-
Leitungskataster, 1:250 und 1:500
-
Blocksymbol - Grösse - 1x1 Einheiten (Meter)
-
Blocksymbol mit Polylinien mit Globaler Breite 0.06
-
TB2 DM Definition ElementSize 4 (1:250), 3 (1:500)
Variante 1 –
In Map für den Layer das Blocksymbol in den Stil-Editor
laden und versuchen dort die richtigen Einstellungen für die Grösse zu finden. Falls
man per DWG Export eine Zeichnung erstellen will darauf hoffen, dass die Grösse
auch richtig exportiert wird.
Variante 2 –
In Map für den Layer das Blocksymbol in den Stil-Editor
laden und alle weiteren Einstellungen in der Layer Datei selbst vornehmen.
Vorteile – erforderliche Werte sind (weitgehend) nachvollziehbar und
herleitbar und lassen sich teilweise direkt aus TB2 übernehmen, Anpassungen an verschiedene
Massstabsbereiche sind schnell gemacht in dem nur einige Werte verändert werden
müssen.
Ablauf:
1 Stil-Editor öffnen, Grössenkontext auf "Karte"
setzen
2 Block aus DWG importieren (wegen Globaler Breite im Block erscheint
als Vorschau nur ein schwarzes Rechteck) – "als Kopie" einfügen!
Symbole mit Globaler Breite erscheinen als schwarze Quadrate in der Vorschau |
3 Farbe wie gewünscht auswählen ("Bug" bei Auswahl
der Indexfarbe 94)
4 Einstellungen bei Breite/Höhe etc. belassen
5 Anzeigemassstab vorgeben (1-251)
6 Legendenlabel für Massstabereich angeben
7 Filter setzen
8 Massstabsbereich duplizieren und Werte anpassen (250 -
5000)
In Map nur das Grundgerüst der Layer Datei erstellen - Massstabsbereiche, Farben und Symbolimport - den Rest in der Layer Datei einstellen |
9 Kontextmenü zum Layer > "Layer Speichern"
10 Layerdatei im Texteditor öffnen
11 Folgende Werte anpassen (beide Massstabsbereiche)
<LineUsage>
<Repeat>1000</Repeat>
</LineUsage>
<AreaUsage>
<RepeatX>1000</RepeatX>
<RepeatY>1000</RepeatY>
</AreaUsage>
Ich bin mir nicht sicher, ob die Werte in allen oder nur
bestimmten Fällen gesetzt werden müssen. Müsste man weiter austesten. Warum
"1000"? Referenzmassstab 1:1000? Bin mir nicht ganz sicher – auch
hier müsste man weiter austesten.
Unterhalb <ParameterOverrides> passt man nun die
folgenden Werte an:
LWBYGLOBALWIDTH
Vorgabe bei mir: 60
Neu : 0.06 * 4
(Massstabsbereich 0-251)
Neu : 0.06 * 3
(Massstabsbereich 250-500)
Formel: GlobaleBreite des Elementes im Block * ElementSize
aus TB2 DM_Definition
BlockConverterGenerated_ScaleX (bzw. Y)
Vorgabe bei mir: 0.00178571428571429
Neu : 0.004
(Massstabsbereich 0-251)
Neu : 0.003
(Massstabsbereich 250-500)
Formel: Wert ElementSize (in Meter) aus Tb2 übernehmen und
Umrechnung in Millimeter.
An den letzten Eintrag </ParameterOverrides> folgende
Elemente (falls nicht vorhanden) hinzufügen:
…
</ParameterOverrides>
<ScaleX>250</ScaleX>
<ScaleY>250</ScaleY>
…
Bzw. Wert "500" für den Massstabsbereich ab 1:500
Datei speichern und neu einladen.
Darstellung am Bildschirm und im Plot sind nahezu identisch:
TBs Darstellung als XREF im Vordergrund, Map Symbol im Hintergrund |
Map Symbol im Vordergrund - TB2 Darstellung als XREF im Hintergrund |
Map Symbol oben rechts (ohne Drehung), TB2 Symbol unten links als XREF |
Ausdruck im Massstab 1:100, Symboldarstellung identisch (links unten TB2 als XREF, oben rechts Map Symbol) |
Man kann ähnliches auch für die Linienarten machen - dazu werde ich später mal ein Beitrag erstellen. Für Schraffuren haben wir noch nicht so recht herausgefunden wie man diese in Map wieder "hinbekommt".
Sowohl für die Blöcke als auch die Linien gilt dann - beim DWG export mit Vorlage stimmt das Exportergebnis mit der Map-Darstellung gut überein. Bei Schraffuren gibt es aber auch noch in Map 2014 Probleme mit der Skalierung des Musters.
Schade, dass es Map (bzw. Autodesk) einem hier so schwer macht - der Stil-Editor ist oft recht verwirrend hinsichtlich den Werte für Grösse/Breite etc. Zudem kann man nicht alle Einstellungen im Editor vornehmen, die im Layer möglich sind - hier bleibt nur die Bearbeitung der XML Datei. Der grösste Nachteil ist und bleibt aber die nicht vorhandene Dokumentation für diesen recht zentralen Bereich des Programms. Vielleicht will ja der eine oder andere nicht ganz zufriedene Map Nutzer eine Nachricht hinterlassen (unten bei "Products") :-)
Hier noch die zwei Layerdateien - direkt aus Map und Bearbeitet wie beschrieben.
Map 2103, SP2
Featuregeometrie ändern - Doppelklick öffnet AutoCAD Eigenschaftenfenster
Bearbeitet man eine Feature und klickt das Feature nach der Bearbeitung zweimal an öffnet sich das AutoCAD Eigenschaftenfenster und nicht das Formular. Um das Formular zu öffnen verwendet man entweder den "Info" Knopf aus dem Ribbon oder man checkt das Feature über das Kontextmenü zunächst ein und führt dann den Doppelklick aus.
Map 2013, SP2.11
Map 2013, SP2.11
Tuesday, 1 October 2013
Plotmodul API in Map
Vor einiger Zeit hatte ich geschaut, ob sich die ca. 400 TB2 Inselpläne in Map automatisiert neu erstellen lassen. In der Migration werden beim Inselplan z.B. Einfügepunkt und Drehung nach Map übernommen, nicht aber der eigentliche Plan und das Layout.
Zunächst muss man in Map ein neues Planlayout erstellen (siehe auch hier). Mit dem Layout kann man nun manuell den jeweiligen Inselplan erstellen. Einfacher geht es über die Map-API. Hier hat es mich aber einige Zeit gekostet. Schwierig war herauszufinden, wie letztlich der Plot über die API erzeugt wird - die API Dokumentation hat mir dort nicht geholfen und es waren Rückfragen bei Autodesk erforderlich (ein Vorteil der Advanced Subscription - diese beinhaltet auch ADN Support). Die anderen Fragen im Zusammenhang mit dem Plot Modul liessen sich mit Hilfe der Dokumentation beantworten.
Um den Plot zu erzeugen verwende ich folgende Funktion:
private long createNewPlot
(IPlotTemplate template,
IPlotGroup plotgroup,
string plotname,
Autodesk.Map.IM.Graphic.Point plotUrsprung,
Scale scale,
int drehung,
FeatureList ftLPlangebiet,
Autodesk.Map.IM.Graphic.Point plotUrsprungUEKarte,
Scale UEKarteMassstab)
{
//neuer Plot
IPlot newPlot = template.Instantiate(plotname, plotgroup);
//UEKarte erstellen
//GetMap(1) - UEKartenplatzhalter hat DrawOrder = 1
IPlotMap plotMapUEK = newPlot.GetMap(1);
//neuen Einfügepunkt für Karte setzen
plotMapUEK.ResetCapture(plotUrsprungUEKarte, 0, UEKarteMassstab);
//neue Haupt-Karte im Plot
IPlotMap plotMap = newPlot.MainMap;
//neuen Einfügepunkt für Karte setzen
plotMap.ResetCapture(plotUrsprung, drehung, scale);
//Puffereinstellungen für Inselkarte
double[] dbBuffer = new double[2] { 50.0, 150.0 };
//Inselkarte erstellen
plotMap.CreateIslandMap(ftLPlangebiet, dbBuffer);
long lFidNeuerPlot = plotMap.Parent.Feature.FID;
//FID des neuen Plots zurückgeben
return lFidNeuerPlot;
}
Map 2013, SP2.
Zunächst muss man in Map ein neues Planlayout erstellen (siehe auch hier). Mit dem Layout kann man nun manuell den jeweiligen Inselplan erstellen. Einfacher geht es über die Map-API. Hier hat es mich aber einige Zeit gekostet. Schwierig war herauszufinden, wie letztlich der Plot über die API erzeugt wird - die API Dokumentation hat mir dort nicht geholfen und es waren Rückfragen bei Autodesk erforderlich (ein Vorteil der Advanced Subscription - diese beinhaltet auch ADN Support). Die anderen Fragen im Zusammenhang mit dem Plot Modul liessen sich mit Hilfe der Dokumentation beantworten.
Um den Plot zu erzeugen verwende ich folgende Funktion:
private long createNewPlot
(IPlotTemplate template,
IPlotGroup plotgroup,
string plotname,
Autodesk.Map.IM.Graphic.Point plotUrsprung,
Scale scale,
int drehung,
FeatureList ftLPlangebiet,
Autodesk.Map.IM.Graphic.Point plotUrsprungUEKarte,
Scale UEKarteMassstab)
{
//neuer Plot
IPlot newPlot = template.Instantiate(plotname, plotgroup);
//UEKarte erstellen
//GetMap(1) - UEKartenplatzhalter hat DrawOrder = 1
IPlotMap plotMapUEK = newPlot.GetMap(1);
//neuen Einfügepunkt für Karte setzen
plotMapUEK.ResetCapture(plotUrsprungUEKarte, 0, UEKarteMassstab);
//neue Haupt-Karte im Plot
IPlotMap plotMap = newPlot.MainMap;
//neuen Einfügepunkt für Karte setzen
plotMap.ResetCapture(plotUrsprung, drehung, scale);
//Puffereinstellungen für Inselkarte
double[] dbBuffer = new double[2] { 50.0, 150.0 };
//Inselkarte erstellen
plotMap.CreateIslandMap(ftLPlangebiet, dbBuffer);
long lFidNeuerPlot = plotMap.Parent.Feature.FID;
//FID des neuen Plots zurückgeben
return lFidNeuerPlot;
}
Map 2013, SP2.
Subscribe to:
Posts (Atom)