XYZGetIsoline¶
XYZGetIsoline liefert die x/y-Koordinaten der Isolinie eines XYZ-Datensatzes.
- rmXY = XYZGetIsoline(hData, nIsoValue, nLineIndex)
Returnwert
rmXY ist eine zweispaltige Matrix mit den x/y-Koordinaten der Isolinie, oder 0.0 falls die Isolinie nicht gefunden wurde.
Parameter
- hData
hData ist die Zugriffsnummer (Handle) des Datensatzes, der mit XYZCreate erzeugt wurde.
- nIsoValue
nIsoValue ist die Nummer der gesuchten Isolinie, beginnend mit 1.
- nLineIndex
nLineIndex ist die Nummer des gesuchten Isolinienteils, beginnend mit 1.
Beispiel
Das folgende Beispiel konvertiert alle Isolinien eines 3D-Datensatzes in 2D-Datensätze.
def XYZ_to_XY(hXYZData)
{
hLayer = GetParent(hXYZData)
nIso = XYZGetNumberOfIsoValues(hXYZData);
rvValues=XYZGetIsoValues(hXYZData);
for (i in 1:nIso) {
j = 1;
while (1) {
xy = XYZGetIsoline(hXYZData, i, j);
if (len(xy) == 1) {
break;
}
hXY = XYCreate(sprintf("%g", rvValues[i]), xy[;1], xy[;2]);
LayerAddDataset(hLayer, hXY);
j = j+1;
}
}
}
Das folgende Beispiel sichert die x/y-Koordinaten aller Isolinien in einer
Excel-Datei. Um die Funktion benutzen zu können, kopieren Sie das Beispiel
in eine Datei mit der Erweiterung .ic
und speichern die Datei im
autoload-Verzeichnis von UniPlot. Markieren Sie einen 3D-Datensatz und wählen
Sie aus der Benutzerschalterleiste das Kommando Iso to Excel
aus:
RegisterCommand("3D-Datensatz", "__IsoToExcel", "Iso to Excel...");
UserBar_Add("__IsoToExcel");
def <smMatrix, smType> = XYZ_to_XY(hXYZData)
{
oData = [.];
oData.MaxN = 0;
nLine = 0;
nIso = XYZGetNumberOfIsoValues(hXYZData);
rvValues = XYZGetIsoValues(hXYZData);
for (i in 1:nIso) {
j = 1;
while (1) {
rmXY = XYZGetIsoline(hXYZData, i, j);
if (len(rmXY) == 1) {
break;
}
if (j == 1) {
oValue = [.];
oValue.nLine = 0;
}
oLine = [.];
oLine.Value = rvValues[i];
oLine.rmXY = rmXY;
oValue[j] = oLine;
oValue.nLine = oValue.nLine + 1;
if (oData.MaxN < nr(rmXY)) {
oData.MaxN = nr(rmXY);
}
j = j+1;
nLine = nLine + 1;
}
if (j > 1) {
oData[i] = oValue;
}
}
iCol = 1;
smMatrix = strempty(oData.MaxN+2, nLine*2);
smType = strempty(oData.MaxN+2, nLine*2) + "s";
rvKeys = oData.keys(1);
for (i in rvKeys) {
oValue = oData[i];
nLine = oValue.nLine;
for (j in 1:nLine) {
iiCol = iCol + (j-1) * 2;
smMatrix[1; iiCol] = sprintf("%.10lf", oValue[j].Value);
smMatrix[2; iiCol] = sprintf("%d", j);
smType[1; iiCol] = "";
smType[2; iiCol] = "";
rmXY = oValue[j].rmXY;
smMatrix[3:nr(rmXY)+2; iiCol, iiCol+1] = smprintf("%.10lf", rmXY);
smType[3:nr(rmXY)+2; iiCol, iiCol+1] = "";
}
iCol = iCol + nLine * 2;
}
return;
}
def __IsoToExcel()
{
hvHandle = GetActiveXYZHandles();
if (hvHandle[4] == 0) {
MessageBoxError("Please select a map dataset");
return 0;
}
ssFileName = GetSaveFileName("", "Excel-Tabelle (*.xlsx)|*.xlsx|", 1,
"Save Isoline values...");
if (ssFileName == "") {
return;
}
ssFileName = _AddFileNameExtension(ssFileName, ".xlsx");
<smMatrix, smType> = XYZ_to_XY(hvHandle[4]);
bRet = ExcelWriteEx(ssFileName, smMatrix, smType);
if (bRet) {
ShellExecute(ssFileName);
} else {
MessageBoxError("Write Excel File failed.")
}
}
Siehe auch
id-877726