Tetrahedron
This class is a child of PrimitiveShape.
Contents
classdef Tetrahedron < PrimitiveShape
%This Class defines the Tetrahedron object. This is a subclass of Primitive %Shape and defines the geometric properties for a Tetrahedron. % % URL : $URL: $ % Log : $Id: Tetrahedron.html,v 1.1 2008/07/23 12:51:20 jberg Exp $ % Copyright (c) 2008 The MathWorks, Inc.
Class Properties
properties ( SetAccess = 'public', GetAccess = 'public' ) edge_length = 1; % (pos def double) end properties ( Dependent = true ) moment_of_inertia_about_CG; % (3x3 double) volume; % (pos def double) end properties ( SetAccess = 'private', GetAccess = 'public', Constant = true ) dimension_order = {'edge_length'}; end properties ( SetAccess = 'private', GetAccess = 'private', Constant = true ) PROPERTY_LIST = { 'coord_system' % From parent class Shape 'edge_length' % 'material' % From parent class PrimitiveShape 'name' % From parent class Shape 'orientation' % From parent class Shape 'origin' % From parent class Shape }; end methods
Constructor
function obj = Tetrahedron(varargin) if(mod(nargin,2)~=0) error('Expecting inputs as property name-value pairs.') end prop_list = eval([mfilename '.PROPERTY_LIST']); n_props = length(prop_list); error(nargchk(0, 2*n_props, nargin,'string')); % Check to see if any input arguments are CoordSystem objects. If % so, then this object is being created from another similar object % and there is no need to create the Origin and/or CG CoordSystems. if ~nargin || ~strmatch('coord_system',varargin(1:2:end),'exact') obj.add_coord_system; % Add Origin CS end % Child-specific default obj.name = 'New Tetrahedron'; % Property Name-Value pair matching for ii=1:2:nargin prop = varargin{ii}; val = varargin{ii+1}; idx = strmatch(lower(prop),lower(prop_list),'exact'); if isempty(idx) error('%s: This property is unknown',... 'or cannot be set during the construction',... 'of the object: %s ',prop,mfilename); else obj.(prop_list{idx}) = val; end end % Create default CoordSystems specific to this Primitive. These are % not editable and are wrt the Origin of this Shape. % CG if obj.n_coord_system < 2 csTmp = CoordSystem('name','CG',... 'is_deletable',false,... 'is_fixed',true,... 'origin',[0 0 0],... 'parent_shape',obj); csTmp.reference_CS = obj.coord_system{1}; obj.add_coord_system(csTmp); end obj.attach_primitive(); end
SET Methods
function set.edge_length(obj, in) prop_name = 'edge_length'; prop_type = 'double'; [valid_flag in] = Validate.SCALAR(in,'type',prop_type,'minVal',eps); if valid_flag obj.(prop_name) = in; end end
GET Methods
function vol = get.volume(obj) vol = obj.width * obj.height * obj.depth; end function inertia_tensor = get.moment_of_inertia_about_CG(obj) % TVK: Not calculated yet m = obj.mass; w = obj.width; h = obj.height; d = obj.depth; inertia_tensor = (m/12).*[(h^2+d^2) 0 0; 0 (w^2+d^2) 0; 0 0 (w^2+h^2)]; end
end methods ( Access = 'public')
Public HELPER Methods
function attach_primitive(obj) %#ok<MANU> end function attach_generator(obj) %#ok<MANU> end
end
methods ( Static = true )
LOADOBJ Method
function B = loadobj(A) % We use loadobj so that when a stored object is loaded, we can % perform necessary steps that are contained in the constructor. We % have to do this because the constructor is not executed when an % object is loaded. Log.msg(sprintf('\n%s::%s',mfilename,'loadobj (Entering)')); prop_list = eval([mfilename '.PROPERTY_LIST']); % Construct object using the stored properties storedFields = fieldnames(A); args = cell(0); for ii=1:length(storedFields) prop = storedFields{ii}; idx = strmatch(lower(prop),lower(prop_list),'exact'); if ~isempty(idx) args{end+1} = prop; %#ok<AGROW> args{end+1} = A.(storedFields{ii}); %#ok<AGROW> end end B = Tetrahedron(args{:}); Log.msg(sprintf('%s::%s',mfilename,'loadobj (Exiting)')); end
end
end