# sc_Shape - Man Page

A Shape is a Volume represents an 3D solid.

## Synopsis

`#include <shape.h>`

Inherits **sc::Volume**.

Inherited by **sc::ConnollyShape**, **sc::SphereShape**, **sc::Uncapped5SphereExclusionShape**, **sc::UncappedTorusHoleShape**, and **sc::UnionShape**.

### Public Member Functions

**Shape** (const **Ref**< **KeyVal** > &keyval)

virtual double **distance_to_surface** (const **SCVector3** &r, **SCVector3** *grad=0) const =0

virtual int **is_outside** (const **SCVector3** &r) const

void **compute** ()

Recompute at least the results that have compute true and are not already computed.

void **interpolate** (const **SCVector3** &p1, const **SCVector3** &p2, double val, **SCVector3** &result)

int **value_implemented** () const

Information about the availability of values, gradients, and hessians.

Public Member Functions inherited from **sc::Volume****Volume** (const **Ref**< **KeyVal** > &)

void **set_gradient** (const **SCVector3** &g)

void **set_gradient** (**RefSCVector** &g)

void **get_gradient** (**SCVector3** &g)

void **set_x** (const **SCVector3** &x)

void **set_x** (const **RefSCVector** &x)

Set and retrieve the coordinate values.

void **get_x** (**SCVector3** &x)

virtual void **boundingbox** (double valuemin, double valuemax, **SCVector3** &p1, **SCVector3** &p2)=0

virtual void **solve** (const **SCVector3** &p, const **SCVector3** &grad, double **value**, **SCVector3** &result)

Public Member Functions inherited from **sc::Function**

virtual **RefSCVector gradient** ()

int **gradient_needed** () const

int **do_gradient** (int)

virtual void **set_desired_gradient_accuracy** (double)

virtual double **actual_gradient_accuracy** () const

virtual double **desired_gradient_accuracy** () const**AccResultRefSCVector** & **gradient_result** ()

virtual **RefSymmSCMatrix hessian** ()

int **hessian_needed** () const

int **do_hessian** (int)

virtual void **set_desired_hessian_accuracy** (double)

virtual double **actual_hessian_accuracy** () const

virtual double **desired_hessian_accuracy** () const**AccResultRefSymmSCMatrix** & **hessian_result** ()

virtual void **guess_hessian** (**RefSymmSCMatrix** &)**Compute** a quick, approximate hessian.

virtual **RefSymmSCMatrix inverse_hessian** (**RefSymmSCMatrix** &)

virtual int **gradient_implemented** () const

virtual int **hessian_implemented** () const**RefSCVector get_x** () const

const **RefSCVector** & **get_x_no_copy** () const

virtual **Ref**< **NonlinearTransform** > **change_coordinates** ()

An optimizer can call change coordinates periodically to give the function an opportunity to change its coordinate system.

virtual void **print** (std::ostream &=**ExEnv::out0**()) const

Print information about the object. **Function** (**StateIn** &)**Function** (const **Function** &)**Function** (const **Ref**< **KeyVal** > &, double funcacc=DBL_EPSILON, double gradacc=DBL_EPSILON, double hessacc=DBL_EPSILON)

The keyval constructor reads the following keywords: **Function** & **operator=** (const **Function** &)**Ref**< **SCMatrixKit** > **matrixkit** () const

Return the **SCMatrixKit** used to construct vectors and matrices. **RefSCDimension dimension** () const

Return the **SCDimension** of the problem.

virtual void **save_data_state** (**StateOut** &)

Save the base classes (with save_data_state) and the members in the same order that the **StateIn** CTOR initializes them.

virtual double **value** ()

Return the value of the function.

int **value_needed** () const

Returns nonzero if the current value is not up-to-date.

int **do_value** (int)

If passed a nonzero number, compute the value the next time **compute()** is called. **AccResultdouble** & **value_result** ()

virtual void **set_desired_value_accuracy** (double)

Set the accuracy to which the value is to be computed.

virtual double **actual_value_accuracy** () const

Return the accuracy with which the value has been computed.

virtual double **desired_value_accuracy** () const

Return the accuracy with which the value is to be computed.

Public Member Functions inherited from **sc::SavableState****SavableState** & **operator=** (const **SavableState** &)

void **save_state** (**StateOut** &)

Save the state of the object as specified by the **StateOut** object.

void **save_object_state** (**StateOut** &)

This can be used for saving state when the exact type of the object is known for both the save and the restore.

virtual void **save_vbase_state** (**StateOut** &)

Save the virtual bases for the object.

Public Member Functions inherited from **sc::DescribedClass****DescribedClass** (const **DescribedClass** &)**DescribedClass** & **operator=** (const **DescribedClass** &)**ClassDesc** * **class_desc** () const throw ()

This returns the unique pointer to the **ClassDesc** corresponding to the given type_info object.

const char * **class_name** () const

Return the name of the object's exact type.

int **class_version** () const

Return the version of the class.

Public Member Functions inherited from **sc::RefCount**

int **lock_ptr** () const

Lock this object.

int **unlock_ptr** () const

Unlock this object.

void **use_locks** (bool inVal)

start and stop using locks on this object

refcount_t **nreference** () const

Return the reference count.

refcount_t **reference** ()

Increment the reference count and return the new count.

refcount_t **dereference** ()

Decrement the reference count and return the new count.

int **managed** () const

void **unmanage** ()

Turn off the reference counting mechanism for this object.

int **managed** () const

Return 1 if the object is managed. Otherwise return 0.

Public Member Functions inherited from **sc::Identity****Identifier identifier** ()

Return the **Identifier** for this argument.

Public Member Functions inherited from **sc::Compute**

virtual void **obsolete** ()

Marks all results as being out of date.

### Additional Inherited Members

Static Public Member Functions inherited from **sc::SavableState**

static void **save_state** (**SavableState** *s, **StateOut** &)

static **SavableState** * **restore_state** (**StateIn** &si)

Restores objects saved with save_state.

static **SavableState** * **key_restore_state** (**StateIn** &si, const char *keyword)

Like restore_state, but keyword is used to override values while restoring.

static **SavableState** * **dir_restore_state** (**StateIn** &si, const char *objectname, const char *keyword=0)

Protected Member Functions inherited from **sc::Volume**

double & **interpolation_accuracy** ()

virtual void **failure** (const char *)

Protected Member Functions inherited from **sc::Function**

virtual void **set_value** (double)

virtual void **set_hessian** (**RefSymmSCMatrix** &)

virtual void **set_matrixkit** (const **Ref**< **SCMatrixKit** > &)

Set the **SCMatrixKit** that should be used to construct the requisite vectors and matrices.

virtual void **set_dimension** (const **RefSCDimension** &)

virtual void **set_actual_value_accuracy** (double)

virtual void **set_actual_gradient_accuracy** (double)

virtual void **set_actual_hessian_accuracy** (double)**RefSCVector** & **get_x_reference** ()

Get read/write access to the coordinates for modification.

void **do_change_coordinates** (const **Ref**< **NonlinearTransform** > &)

Change the coordinate system and apply the given transform to intermediates matrices and vectors.

Protected Member Functions inherited from **sc::SavableState****SavableState** (const **SavableState** &)**SavableState** (**StateIn** &)

Each derived class **StateIn** CTOR handles the restore corresponding to calling save_object_state, save_vbase_state, and save_data_state listed above.

Protected Member Functions inherited from **sc::RefCount****RefCount** (const **RefCount** &)**RefCount** & **operator=** (const **RefCount** &)

Protected Attributes inherited from **sc::Function****Ref**< **SCMatrixKit** > **matrixkit_**

Used to construct new matrices. **RefSCVector x_**

The variables. **RefSCDimension dim_**

The dimension of x_. **AccResultdouble value_**

The value of the function at x_. **AccResultRefSCVector gradient_**

The gradient at x_. **AccResultRefSymmSCMatrix hessian_**

The hessian at x_.

## Detailed Description

A **Shape** is a **Volume** represents an 3D solid.

The value of the **Shape** at each point in space is the distance to the surface. The distance is negative if the point is inside the solid. For **Shape** specializations that cannot compute the distance to the surface, the value will be 1.0 outside and -1.0 inside the solid.

## Member Function Documentation

### void sc::Shape::compute () [virtual]

Recompute at least the results that have compute true and are not already computed. This should only be called by **Result**'s members.

Implements **sc::Volume**.

### void sc::Shape::interpolate (const SCVector3 & p1, const SCVector3 & p2, double val, SCVector3 & result) [virtual]

Reimplemented from **sc::Volume**.

### int sc::Shape::value_implemented () const [virtual]

Information about the availability of values, gradients, and hessians.

Reimplemented from **sc::Function**.

## Author

Generated automatically by Doxygen for MPQC from the source code.