⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 axis.c

📁 seismic software,very useful
💻 C
字号:
/*axis object code*/#include <stdio.h>#include "main.h"#include "axis.h"/*axis init from mandatory getparn1=,o1=,d1=,label1= are length, origin, sampling, and name of first axis, etc.*/AxisAxisInit (iaxis,stride)int iaxis, stride;	{	Axis axis;	string par;	int i;	NEW (Axis,axis,1);	axis->dir = iaxis;	axis->stride = stride > 0 ? stride : 1;	sprintf (par,"label%d",iaxis);	if (GETPARSTRING (par,"s",axis->label) == 0) {		sprintf (axis->label,"n%d",iaxis);		}	sprintf (par,"n%d",iaxis);	if (GETPARINT (par,"d",&axis->size) == 0) {		err ("%s missing\n",par);		}	sprintf (par,"o%d",iaxis);	if (GETPARFLOAT (par,"f",&axis->first) == 0) {		axis->first = 0.;		}	sprintf (par,"d%d",iaxis);	if (GETPARFLOAT (par,"f",&axis->delta) == 0) {		axis->delta = 1.;		}	sprintf (par,"z%d",iaxis);	if (GETPARFLOAT (par,"f",&axis->zoom) == 0) {		axis->zoom = 1.;		}	NEW (float*,axis->values,axis->size);	NEW (string*,axis->script,axis->size);	AxisSetScale (axis);	AxisSetValues (axis);	return (axis);	}/* axis init from arguments, superceded by getpar */AxisAxisInit2 (dir,stride,label,size,first,delta,zoom)int dir, stride, size;float first, delta, zoom;string label;	{	Axis axis;	string par;	int i;	NEW (Axis,axis,1);	axis->dir = dir;	axis->stride = stride > 0 ? stride : 1;	strcpy (axis->label,label);	sprintf (par,"label%d",dir);	GETPARSTRING (par,"s",axis->label);	axis->size = size;	sprintf (par,"n%d",dir);	GETPARINT (par,"d",&axis->size);	axis->first = first;	sprintf (par,"o%d",dir);	GETPARFLOAT (par,"f",&axis->first);	axis->delta = delta;	sprintf (par,"d%d",dir);	GETPARFLOAT (par,"f",&axis->delta);	if (axis->delta == 0.0) axis->delta = 1.0;	axis->zoom = zoom;	sprintf (par,"z%d",dir);	GETPARFLOAT (par,"f",&axis->zoom);	NEW (string*,axis->script,axis->size);	NEW (float*,axis->values,axis->size);	AxisSetScale (axis);	AxisSetValues (axis);	return (axis);	}/* compute axis scale */AxisSetScale (axis)Axis axis;	{	int i;	char n[20];	sprintf (n,"%g",axis->delta-(int)axis->delta);	axis->prec = strlen(n) - 2;	axis->prec = axis->prec > 0 ? axis->prec : 0;	axis->prec = axis->prec < 10 ? axis->prec : 10;	for (axis->scale=1, i=0; i<axis->prec; i++) axis->scale *= 10;	}/* return axis prec */AxisPrec (axis)Axis axis;	{	if (!axis) return (0);	else return (axis->prec);	}/* return axis scale */AxisScale (axis)Axis axis;	{	if (!axis) return (0);	else return (axis->scale);	}/* build a list of values for the axis */AxisSetValues (axis)Axis axis;	{	int i;	if (!axis) return;		for (i=0; i<axis->size; i++) {		axis->values[i] = axis->first+i*axis->delta;		sprintf (axis->script[i],"%s=%g",axis->label,axis->values[i]);		}	}/* return sample size of axis */AxisSize (axis)Axis axis;	{	if (!axis) return (0);	return (axis->size);	}/* return axis delta */floatAxisDelta (axis)Axis axis;	{	if (!axis) return (0);	return (axis->delta);	}/* return axis first value */floatAxisFirst (axis)Axis axis;	{	if (!axis) return (0);	return (axis->first);	}/* return last value */floatAxisLast (axis)Axis axis;	{	if (!axis) return (0);	return (axis->first+(axis->size-1)*axis->delta);	}/* return axis zoom */floatAxisZoom (axis)Axis axis;	{	if (!axis) return (0);	return (axis->zoom);	}/* return name of axis */char*AxisLabel (axis)Axis axis;	{	if (!axis) return (0);	return (axis->label);	}/* return stride of axis */AxisStride (axis)Axis axis;	{	if (!axis) return (0);	return (axis->stride);	}/* return value of axis at given index */float AxisValue (axis,index)Axis axis;int index;	{	if (!axis || index < 0 || index >= axis->size) return (0.);	else return (axis->values[index]);	}/* return scaled value */AxisScaledValue (axis,index)Axis axis;int index;	{	if (!axis) return (0);	if (index < 0 || index >= axis->size) return (0);	return ((int)(axis->scale*AxisValue(axis,index)));	}/* return array of axis values */float*AxisValues (axis)Axis axis;	{	if (!axis) return (0);	return (axis->values);	}/* return index given value */AxisIndex (axis,value)Axis axis;float value;	{	int index;	index = (value - axis->first) / axis->delta;	if (index < 0 || index >= axis->size) return (NO_INDEX);	else return (index);	}/* return scaled index */AxisScaledIndex (axis,value)Axis axis;int value;	{	float fvalue;	if (!axis) return (NO_INDEX);	fvalue = value;	fvalue = fvalue / axis->scale;	return (AxisIndex (axis,fvalue));	}	/* return axis direction */AxisDir (axis)Axis axis;	{	if (!axis) return (NO_INDEX);	else return (axis->dir);	}/* return axis script */char*AxisScript (axis,index)Axis axis;int index;	{	if (!axis || index < 0 || index >= axis->size) return ("");	else return (axis->script[index]);	}/* print info about axis */AxisInfo (axis)Axis axis;	{	Message message;	if (!axis) return;	sprintf (message, "Axis: label%d=%s n%d=%d o%d=%g d%d=%g z%d=%g prec=%d scale=%d",		axis->dir, axis->label,		axis->dir, axis->size,		axis->dir, axis->first,		axis->dir, axis->delta,		axis->dir, axis->zoom,		axis->prec,		axis->scale);	UIMessage (message);	}/* save axis parameters */AxisSavePar (axis)Axis axis;	{	Message message;	if (!axis) return;	sprintf (message, "Axis%d: label%d=\"%s\" n%d=%d o%d=%g d%d=%g z%d=%g",		axis->dir,		axis->dir, axis->label,		axis->dir, axis->size,		axis->dir, axis->first,		axis->dir, axis->delta,		axis->dir, axis->zoom);	UISaveMessage (message);	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -