File Coverage

blib/lib/Rinchi/CIGIPP/LineOfSightSegmentRequest.pm
Criterion Covered Total %
statement 127 171 74.2
branch 29 68 42.6
condition 6 18 33.3
subroutine 31 33 93.9
pod 29 29 100.0
total 222 319 69.5


line stmt bran cond sub pod time code
1             #
2             # Rinchi Common Image Generator Interface for Perl
3             # Class Identifier: f78af5d8-200e-11de-bdb9-001c25551abc
4             # Author: Brian M. Ames
5             #
6              
7             package Rinchi::CIGIPP::LineOfSightSegmentRequest;
8              
9 1     1   21 use 5.006;
  1         4  
  1         42  
10 1     1   5 use strict;
  1         2  
  1         30  
11 1     1   5 use warnings;
  1         3  
  1         27  
12 1     1   5 use Carp;
  1         2  
  1         3415  
13              
14             require Exporter;
15              
16             our @ISA = qw(Exporter);
17              
18             # Items to export into callers namespace by default. Note: do not export
19             # names by default without a very good reason. Use EXPORT_OK instead.
20             # Do not simply export all your public functions/methods/constants.
21              
22             # This allows declaration use Rinchi::CIGI::AtmosphereControl ':all';
23             # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
24             # will save memory.
25             our %EXPORT_TAGS = ( 'all' => [ qw(
26            
27             ) ] );
28              
29             our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
30              
31             our @EXPORT = qw(
32            
33             );
34              
35             our $VERSION = '0.02';
36              
37             # Preloaded methods go here.
38              
39             =head1 NAME
40              
41             Rinchi::CIGIPP::LineOfSightSegmentRequest - Perl extension for the Common Image
42             Generator Interface - Line Of Sight Segment Request data packet.
43             data packet.
44             =head1 SYNOPSIS
45              
46             use Rinchi::CIGIPP::LineOfSightSegmentRequest;
47             my $loss_rqst = Rinchi::CIGIPP::LineOfSightSegmentRequest->new();
48              
49             $packet_type = $loss_rqst->packet_type();
50             $packet_size = $loss_rqst->packet_size();
51             $request_ident = $loss_rqst->request_ident(21900);
52             $destination_entity_valid = $loss_rqst->destination_entity_valid(Rinchi::CIGIPP->Valid);
53             $response_coordinate_system = $loss_rqst->response_coordinate_system(Rinchi::CIGIPP->GeodeticCS);
54             $destination_point_coordinate_system = $loss_rqst->destination_point_coordinate_system(Rinchi::CIGIPP->GeodeticCS);
55             $source_point_coordinate_system = $loss_rqst->source_point_coordinate_system(Rinchi::CIGIPP->EntityCS);
56             $request_type = $loss_rqst->request_type(Rinchi::CIGIPP->BasicLOS);
57             $alpha_threshold = $loss_rqst->alpha_threshold(109);
58             $source_entity_ident = $loss_rqst->source_entity_ident(49099);
59             $source_latitude = $loss_rqst->source_latitude(51.147);
60             $source_xoffset = $loss_rqst->source_xoffset(62.907);
61             $source_longitude = $loss_rqst->source_longitude(78.025);
62             $source_yoffset = $loss_rqst->source_yoffset(54.82);
63             $source_altitude = $loss_rqst->source_altitude(58.857);
64             $source_zoffset = $loss_rqst->source_zoffset(29.08);
65             $destination_latitude = $loss_rqst->destination_latitude(43.842);
66             $destination_xoffset = $loss_rqst->destination_xoffset(75.381);
67             $destination_longitude = $loss_rqst->destination_longitude(44.992);
68             $destination_yoffset = $loss_rqst->destination_yoffset(15.47);
69             $destination_altitude = $loss_rqst->destination_altitude(36.503);
70             $destination_zoffset = $loss_rqst->destination_zoffset(16.844);
71             $material_mask = $loss_rqst->material_mask(52904);
72             $update_period = $loss_rqst->update_period(241);
73             $destination_entity_ident = $loss_rqst->destination_entity_ident(60143);
74              
75             =head1 DESCRIPTION
76              
77             Line-of-Sight (LOS) Segment testing is used to determine whether an object lies
78             along a test segment. This type of test is typically used to determine whether
79             one point is visible from another, or whether the point is occluded by some
80             object. The Line of Sight test segment is defined in the Line of Sight Segment
81             Request packet by a source point and a destination point.
82              
83             The LOS ID attribute is used to correlate requests from the Host with responses
84             from the IG. When the IG responds to a LOS request, it will copy the LOS ID
85             value contained within the request to the LOS ID attribute of the corresponding
86             response packet.
87              
88             Note that Line of Sight Segment Request packets and Line of Sight Vector
89             Request packets share the LOS ID attribute. Duplicating the LOS ID value
90             between both request types can cause data loss.
91              
92             If the Request Type attribute is set to Basic (0), the IG will respond with a
93             Line of Sight Response packet. If the attribute is set to Extended (1), the IG
94             will respond with a Line of Sight Extended Response packet.
95              
96             The Alpha Threshold attribute specifies the minimum alpha value with which an
97             intersection should register. If an LOS test segment intersects with a surface
98             whose alpha at the intersection point is lower than this value, no Line of
99             Sight Response or Line of Sight Extended Response packet will be generated.
100              
101             The Update Period attribute specifies the number of frames between periodic
102             responses. This allows the Host to send just one Line of Sight Segment Request
103             packet but receive continuous responses if the test point will not move with
104             respect to the specified coordinate system. If Update Period is set to zero,
105             the request will be treated as a one-shot request and the IG will return a
106             single response. The Host should manipulate the value of LOS ID so that an ID
107             is not reused before the IG has sufficient time to process and respond to the
108             request. If Update Period is set to some value n greater than zero, the IG will
109             return a request every nth frame until the Entity is destroyed or until the
110             Update Period attribute set to zero.
111              
112             The IG can only return valid LOS data if an intersection is detected along the
113             LOS segment. If the LOS data cannot be calculated, the Valid attribute of the
114             response packet will be set to zero (0).
115              
116             The IG will generate a response for each intersection along the LOS segment.
117              
118             Besides the range of the LOS ID attribute, there is no restriction on the
119             number of LOS requests that can be sent in a single frame; however, the
120             response time of the IG might be degraded as the number of LOS requests increases.
121              
122             =head2 EXPORT
123              
124             None by default.
125              
126             #==============================================================================
127              
128             =item new $loss_rqst = Rinchi::CIGIPP::LineOfSightSegmentRequest->new()
129              
130             Constructor for Rinchi::LineOfSightSegmentRequest.
131              
132             =cut
133              
134             sub new {
135 1     1 1 192 my $class = shift;
136 1   33     9 $class = ref($class) || $class;
137              
138 1         20 my $self = {
139             '_Buffer' => '',
140             '_ClassIdent' => 'f78af5d8-200e-11de-bdb9-001c25551abc',
141             '_Pack' => 'CCSCCSddddddICCS',
142             '_Swap1' => 'CCvCCvVVVVVVVVVVVVVCCv',
143             '_Swap2' => 'CCnCCnNNNNNNNNNNNNNCCn',
144             'packetType' => 25,
145             'packetSize' => 64,
146             'requestIdent' => 0,
147             '_bitfields1' => 0, # Includes bitfields unused42, destinationEntityValid, responseCoordinateSystem, destinationPointCoordinateSystem, sourcePointCoordinateSystem, and requestType.
148             'destinationEntityValid' => 0,
149             'responseCoordinateSystem' => 0,
150             'destinationPointCoordinateSystem' => 0,
151             'sourcePointCoordinateSystem' => 0,
152             'requestType' => 0,
153             'alphaThreshold' => 0,
154             'sourceEntityIdent' => 0,
155             'sourceLatitude_xOffset' => 0,
156             'sourceLongitude_yOffset' => 0,
157             'sourceAltitude_zOffset' => 0,
158             'destinationLatitude_xOffset' => 0,
159             'destinationLongitude_yOffset' => 0,
160             'destinationAltitude_zOffset' => 0,
161             'materialMask' => 0,
162             'updatePeriod' => 0,
163             '_unused43' => 0,
164             'destinationEntityIdent' => 0,
165             };
166              
167 1 50       4 if (@_) {
168 0 0       0 if (ref($_[0]) eq 'ARRAY') {
    0          
169 0         0 $self->{'_Buffer'} = $_[0][0];
170             } elsif (ref($_[0]) eq 'HASH') {
171 0         0 foreach my $attr (keys %{$_[0]}) {
  0         0  
172 0 0       0 $self->{"_$attr"} = $_[0]->{$attr} unless ($attr =~ /^_/);
173             }
174             }
175             }
176              
177 1         3 bless($self,$class);
178 1         3 return $self;
179             }
180              
181             #==============================================================================
182              
183             =item sub packet_type()
184              
185             $value = $loss_rqst->packet_type();
186              
187             Data Packet Identifier.
188              
189             This attribute identifies this data packet as the Line of Sight Segment Request
190             packet. The value of this attribute must be 25.
191              
192             =cut
193              
194             sub packet_type() {
195 1     1 1 7 my ($self) = @_;
196 1         7 return $self->{'packetType'};
197             }
198              
199             #==============================================================================
200              
201             =item sub packet_size()
202              
203             $value = $loss_rqst->packet_size();
204              
205             Data Packet Size.
206              
207             This attribute indicates the number of bytes in this data packet. The value of
208             this attribute must be 64.
209              
210             =cut
211              
212             sub packet_size() {
213 1     1 1 6 my ($self) = @_;
214 1         4 return $self->{'packetSize'};
215             }
216              
217             #==============================================================================
218              
219             =item sub request_ident([$newValue])
220              
221             $value = $loss_rqst->request_ident($newValue);
222              
223             LOS ID.
224              
225             This attribute identifies the LOS request. When the IG returns a Line of Sight
226             Response packet in response to this request, the LOS ID attribute of that
227             packet will contain this value to correlate the response with this request.
228              
229             Note: Because the Line of Sight Response data packet is used for responding to
230             both the LOS segment and LOS vector requests, the LOS ID value used for one
231             request type should not be duplicated for the other request type before the IG
232             has sufficient time to generate a response.
233              
234             =cut
235              
236             sub request_ident() {
237 1     1 1 16 my ($self,$nv) = @_;
238 1 50       5 if (defined($nv)) {
239 1         2 $self->{'requestIdent'} = $nv;
240             }
241 1         4 return $self->{'requestIdent'};
242             }
243              
244             #==============================================================================
245              
246             =item sub destination_entity_valid([$newValue])
247              
248             $value = $loss_rqst->destination_entity_valid($newValue);
249              
250             Destination Entity ID Valid.
251              
252             This attribute determines whether the Destination Entity ID attribute contains
253             a valid entity ID.
254              
255             If this flag is set to Valid (1) and Destination Point Coordinate System is set
256             to Entity (1), then the destination endpoint will be defined with respect to
257             the entity specified by Destination Entity ID.
258              
259             If this flag is set to Not Valid (0), then the destination endpoint will be
260             defined with respect to either the source entity (specified by Source Entity
261             ID) or the Geodetic coordinate system as determined by the Destination Point
262             Coordinate System attribute.
263              
264             NotValid 0
265             Valid 1
266              
267             =cut
268              
269             sub destination_entity_valid() {
270 1     1 1 3 my ($self,$nv) = @_;
271 1 50       4 if (defined($nv)) {
272 1 50 33     15 if (($nv==0) or ($nv==1)) {
273 1         4 $self->{'destinationEntityValid'} = $nv;
274 1         3 $self->{'_bitfields1'} |= ($nv << 4) &0x10;
275             } else {
276 0         0 carp "destination_entity_valid must be 0 (NotValid), or 1 (Valid).";
277             }
278             }
279 1         3 return (($self->{'_bitfields1'} & 0x10) >> 4);
280             }
281              
282             #==============================================================================
283              
284             =item sub response_coordinate_system([$newValue])
285              
286             $value = $loss_rqst->response_coordinate_system($newValue);
287              
288             Response Coordinate System.
289              
290             This attribute specifies the coordinate system to be used in the response.
291              
292             If this attribute is set to Geodetic (0), then the intersection point will be
293             specified by latitude, longitude, and altitude.
294              
295             If this attribute is set to Entity (1), then the intersection point will be
296             specified relative to the reference point of the intersected entity.
297              
298             GeodeticCS 0
299             EntityCS 1
300              
301             =cut
302              
303             sub response_coordinate_system() {
304 1     1 1 3 my ($self,$nv) = @_;
305 1 50       4 if (defined($nv)) {
306 1 50 33     6 if (($nv==0) or ($nv==1)) {
307 1         3 $self->{'responseCoordinateSystem'} = $nv;
308 1         3 $self->{'_bitfields1'} |= ($nv << 3) &0x08;
309             } else {
310 0         0 carp "response_coordinate_system must be 0 (GeodeticCS), or 1 (EntityCS).";
311             }
312             }
313 1         2 return (($self->{'_bitfields1'} & 0x08) >> 3);
314             }
315              
316             #==============================================================================
317              
318             =item sub destination_point_coordinate_system([$newValue])
319              
320             $value = $loss_rqst->destination_point_coordinate_system($newValue);
321              
322             Destination Point Coordinate System.
323              
324             This attribute indicates the coordinate system relative to which the test
325             segment destination endpoint is specified. If this attribute is set to Geodetic
326             (0), then the endpoint is given by latitude, longitude, and altitude.
327              
328             If this attribute is set to Entity (1) and Destination Entity ID Valid is set
329             to Not Valid (0), then the endpoint is defined relative to the reference point
330             of the entity specified by Source Entity ID.
331              
332             If this attribute is set to Entity (1) and Destination Entity ID Valid is set
333             to Valid (1), then the endpoint is defined relative to the reference point of
334             the entity specified by Destination Entity ID.
335              
336             GeodeticCS 0
337             EntityCS 1
338              
339             =cut
340              
341             sub destination_point_coordinate_system() {
342 1     1 1 3 my ($self,$nv) = @_;
343 1 50       4 if (defined($nv)) {
344 1 50 33     5 if (($nv==0) or ($nv==1)) {
345 1         2 $self->{'destinationPointCoordinateSystem'} = $nv;
346 1         4 $self->{'_bitfields1'} |= ($nv << 2) &0x04;
347             } else {
348 0         0 carp "destination_point_coordinate_system must be 0 (GeodeticCS), or 1 (EntityCS).";
349             }
350             }
351 1         5 return (($self->{'_bitfields1'} & 0x04) >> 2);
352             }
353              
354             #==============================================================================
355              
356             =item sub source_point_coordinate_system([$newValue])
357              
358             $value = $loss_rqst->source_point_coordinate_system($newValue);
359              
360             Source Point Coordinate System.
361              
362             This attribute indicates the coordinate system relative to which the test
363             segment source endpoint is specified.
364              
365             If this attribute is set to Geodetic (0), then the endpoint is given by
366             latitude, longitude, and altitude.
367              
368             If this attribute is set to Entity (1), then the endpoint is defined relative
369             to the reference point of the entity specified by Entity ID.
370              
371             GeodeticCS 0
372             EntityCS 1
373              
374             =cut
375              
376             sub source_point_coordinate_system() {
377 1     1 1 3 my ($self,$nv) = @_;
378 1 50       7 if (defined($nv)) {
379 1 50 33     23 if (($nv==0) or ($nv==1)) {
380 1         4 $self->{'sourcePointCoordinateSystem'} = $nv;
381 1         4 $self->{'_bitfields1'} |= ($nv << 1) &0x02;
382             } else {
383 0         0 carp "source_point_coordinate_system must be 0 (GeodeticCS), or 1 (EntityCS).";
384             }
385             }
386 1         6 return (($self->{'_bitfields1'} & 0x02) >> 1);
387             }
388              
389             #==============================================================================
390              
391             =item sub request_type([$newValue])
392              
393             $value = $loss_rqst->request_type($newValue);
394              
395             Request Type.
396              
397             This attribute determines what type of response the IG should return for this
398             request.
399             If this attribute is set to Basic (0), the IG will respond with a Line of Sight
400             Response packet. If this attribute is set to Extended (1), the IG will respond
401             with a Line of Sight Extended Response packet.
402              
403             BasicLOS 0
404             ExtendedLOS 1
405              
406             =cut
407              
408             sub request_type() {
409 1     1 1 3 my ($self,$nv) = @_;
410 1 50       6 if (defined($nv)) {
411 1 50 33     8 if (($nv==0) or ($nv==1)) {
412 1         3 $self->{'requestType'} = $nv;
413 1         5 $self->{'_bitfields1'} |= $nv &0x01;
414             } else {
415 0         0 carp "request_type must be 0 (BasicLOS), or 1 (ExtendedLOS).";
416             }
417             }
418 1         5 return ($self->{'_bitfields1'} & 0x01);
419             }
420              
421             #==============================================================================
422              
423             =item sub alpha_threshold([$newValue])
424              
425             $value = $loss_rqst->alpha_threshold($newValue);
426              
427             Alpha Threshold.
428              
429             This attribute specifies the minimum alpha value (i.e., minimum opacity) a
430             surface may have for an LOS response to be generated.
431              
432             =cut
433              
434             sub alpha_threshold() {
435 1     1 1 6 my ($self,$nv) = @_;
436 1 50       5 if (defined($nv)) {
437 1         4 $self->{'alphaThreshold'} = $nv;
438             }
439 1         5 return $self->{'alphaThreshold'};
440             }
441              
442             #==============================================================================
443              
444             =item sub source_entity_ident([$newValue])
445              
446             $value = $loss_rqst->source_entity_ident($newValue);
447              
448             Source Entity ID.
449              
450             This attribute specifies the entity relative to which the test segment
451             endpoints are defined. This attribute is ignored if Source Point Coordinate
452             System and Destination Point Coordinate System are both set to Geodetic (0).
453              
454             =cut
455              
456             sub source_entity_ident() {
457 1     1 1 7 my ($self,$nv) = @_;
458 1 50       5 if (defined($nv)) {
459 1         3 $self->{'sourceEntityIdent'} = $nv;
460             }
461 1         6 return $self->{'sourceEntityIdent'};
462             }
463              
464             #==============================================================================
465              
466             =item sub source_latitude([$newValue])
467              
468             $value = $loss_rqst->source_latitude($newValue);
469              
470             Source Latitude.
471              
472             If Source Point Coordinate System is set to Geodetic (0), this attribute
473             specifies the latitude of the source endpoint of the LOS test segment.
474              
475             =cut
476              
477             sub source_latitude() {
478 1     1 1 7 my ($self,$nv) = @_;
479 1 50       6 if (defined($nv)) {
480 1         3 $self->{'sourceLatitude_xOffset'} = $nv;
481             }
482 1         5 return $self->{'sourceLatitude_xOffset'};
483             }
484              
485             #==============================================================================
486              
487             =item sub source_xoffset([$newValue])
488              
489             $value = $loss_rqst->source_xoffset($newValue);
490              
491             Source X Offset.
492              
493             If Source Point Coordinate System is set to Entity (1), this attribute
494             specifies the X offset of the source endpoint of the LOS test segment.
495              
496             =cut
497              
498             sub source_xoffset() {
499 1     1 1 9 my ($self,$nv) = @_;
500 1 50       17 if (defined($nv)) {
501 1         12 $self->{'sourceLatitude_xOffset'} = $nv;
502             }
503 1         3 return $self->{'sourceLatitude_xOffset'};
504             }
505              
506             #==============================================================================
507              
508             =item sub source_longitude([$newValue])
509              
510             $value = $loss_rqst->source_longitude($newValue);
511              
512             Source Longitude.
513              
514             If Source Point Coordinate System is set to Geodetic (0), this attribute
515             specifies the longitude of the source endpoint of the LOS test segment.
516              
517             =cut
518              
519             sub source_longitude() {
520 1     1 1 5 my ($self,$nv) = @_;
521 1 50       5 if (defined($nv)) {
522 1         19 $self->{'sourceLongitude_yOffset'} = $nv;
523             }
524 1         5 return $self->{'sourceLongitude_yOffset'};
525             }
526              
527             #==============================================================================
528              
529             =item sub source_yoffset([$newValue])
530              
531             $value = $loss_rqst->source_yoffset($newValue);
532              
533             Source Y Offset.
534              
535             If Source Point Coordinate System is set to Entity (1), this attribute
536             specifies the Y offset of the source endpoint of the LOS test segment.
537              
538             =cut
539              
540             sub source_yoffset() {
541 1     1 1 5 my ($self,$nv) = @_;
542 1 50       4 if (defined($nv)) {
543 1         2 $self->{'sourceLongitude_yOffset'} = $nv;
544             }
545 1         3 return $self->{'sourceLongitude_yOffset'};
546             }
547              
548             #==============================================================================
549              
550             =item sub source_altitude([$newValue])
551              
552             $value = $loss_rqst->source_altitude($newValue);
553              
554             Source Altitude.
555              
556             If Source Point Coordinate System is set to Geodetic (0), this attribute
557             specifies the altitude of the source endpoint of the LOS test segment.
558              
559             =cut
560              
561             sub source_altitude() {
562 1     1 1 5 my ($self,$nv) = @_;
563 1 50       4 if (defined($nv)) {
564 1         3 $self->{'sourceAltitude_zOffset'} = $nv;
565             }
566 1         3 return $self->{'sourceAltitude_zOffset'};
567             }
568              
569             #==============================================================================
570              
571             =item sub source_zoffset([$newValue])
572              
573             $value = $loss_rqst->source_zoffset($newValue);
574              
575             Source Z Offset.
576              
577             If Source Point Coordinate System is set to Entity (1), this attribute
578             specifies the Z offset of the source endpoint of the LOS test segment.
579              
580             =cut
581              
582             sub source_zoffset() {
583 1     1 1 5 my ($self,$nv) = @_;
584 1 50       4 if (defined($nv)) {
585 1         2 $self->{'sourceAltitude_zOffset'} = $nv;
586             }
587 1         16 return $self->{'sourceAltitude_zOffset'};
588             }
589              
590             #==============================================================================
591              
592             =item sub destination_latitude([$newValue])
593              
594             $value = $loss_rqst->destination_latitude($newValue);
595              
596             Destination Latitude.
597              
598             If Destination Point Coordinate System is set to Geodetic (0), this attribute
599             specifies the latitude of the destination endpoint of the LOS test segment.
600              
601             =cut
602              
603             sub destination_latitude() {
604 1     1 1 5 my ($self,$nv) = @_;
605 1 50       5 if (defined($nv)) {
606 1         76 $self->{'destinationLatitude_xOffset'} = $nv;
607             }
608 1         10 return $self->{'destinationLatitude_xOffset'};
609             }
610              
611             #==============================================================================
612              
613             =item sub destination_xoffset([$newValue])
614              
615             $value = $loss_rqst->destination_xoffset($newValue);
616              
617             Destination X Offset.
618              
619             If Destination Point Coordinate System is set to Entity (1), this attribute
620             specifies the X offset of the destination endpoint of the LOS test segment.
621             This offset may be relative to either the source entity or destination entity,
622             depending upon the value of the Destination Entity ID Valid flag.
623              
624             =cut
625              
626             sub destination_xoffset() {
627 1     1 1 5 my ($self,$nv) = @_;
628 1 50       4 if (defined($nv)) {
629 1         3 $self->{'destinationLatitude_xOffset'} = $nv;
630             }
631 1         3 return $self->{'destinationLatitude_xOffset'};
632             }
633              
634             #==============================================================================
635              
636             =item sub destination_longitude([$newValue])
637              
638             $value = $loss_rqst->destination_longitude($newValue);
639              
640             Destination Longitude.
641              
642             If Destination Point Coordinate System is set to Geodetic (0), this attribute
643             specifies the longitude of the destination endpoint of the LOS test segment.
644              
645             =cut
646              
647             sub destination_longitude() {
648 1     1 1 5 my ($self,$nv) = @_;
649 1 50       4 if (defined($nv)) {
650 1         2 $self->{'destinationLongitude_yOffset'} = $nv;
651             }
652 1         3 return $self->{'destinationLongitude_yOffset'};
653             }
654              
655             #==============================================================================
656              
657             =item sub destination_yoffset([$newValue])
658              
659             $value = $loss_rqst->destination_yoffset($newValue);
660              
661             Destination Y Offset.
662              
663             If Destination Point Coordinate System is set to Entity (1), this attribute
664             specifies the Y offset of the destination endpoint of the LOS test segment.
665             This offset may be relative to either the source entity or destination entity,
666             depending upon the value of the Destination Entity ID Valid flag.
667              
668             =cut
669              
670             sub destination_yoffset() {
671 1     1 1 5 my ($self,$nv) = @_;
672 1 50       4 if (defined($nv)) {
673 1         2 $self->{'destinationLongitude_yOffset'} = $nv;
674             }
675 1         4 return $self->{'destinationLongitude_yOffset'};
676             }
677              
678             #==============================================================================
679              
680             =item sub destination_altitude([$newValue])
681              
682             $value = $loss_rqst->destination_altitude($newValue);
683              
684             Destination Altitude. (Geodetic Coordinate System)
685              
686             If Destination Point Coordinate System is set to Geodetic (0), this attribute
687             specifies the altitude of the destination endpoint of the LOS test segment.
688              
689             =cut
690              
691             sub destination_altitude() {
692 1     1 1 5 my ($self,$nv) = @_;
693 1 50       8 if (defined($nv)) {
694 1         3 $self->{'destinationAltitude_zOffset'} = $nv;
695             }
696 1         3 return $self->{'destinationAltitude_zOffset'};
697             }
698              
699             #==============================================================================
700              
701             =item sub destination_zoffset([$newValue])
702              
703             $value = $loss_rqst->destination_zoffset($newValue);
704              
705             Destination Z Offset.
706              
707             If Destination Point Coordinate System is set to Entity (1), this attribute
708             specifies the Z offset of the destination endpoint of the LOS test segment.
709             This offset may be relative to either the source entity or destination entity,
710             depending upon the value of the Destination Entity ID Valid flag.
711              
712             =cut
713              
714             sub destination_zoffset() {
715 1     1 1 4 my ($self,$nv) = @_;
716 1 50       4 if (defined($nv)) {
717 1         3 $self->{'destinationAltitude_zOffset'} = $nv;
718             }
719 1         4 return $self->{'destinationAltitude_zOffset'};
720             }
721              
722             #==============================================================================
723              
724             =item sub material_mask([$newValue])
725              
726             $value = $loss_rqst->material_mask($newValue);
727              
728             Material Mask.
729              
730             This attribute specifies the environmental and cultural features to be included
731             in or excluded from consideration for LOS segment testing. Each bit represents
732             a material code range; setting that bit to one (1) will cause the IG to
733             register intersections with polygons whose material codes are within that
734             range.
735             Material code ranges are IG-dependent. Refer to the appropriate IG
736             documentation for material code assignments.
737              
738             =cut
739              
740             sub material_mask() {
741 1     1 1 4 my ($self,$nv) = @_;
742 1 50       4 if (defined($nv)) {
743 1         4 $self->{'materialMask'} = $nv;
744             }
745 1         3 return $self->{'materialMask'};
746             }
747              
748             #==============================================================================
749              
750             =item sub update_period([$newValue])
751              
752             $value = $loss_rqst->update_period($newValue);
753              
754             Update Period.
755              
756             This attribute specifies the interval between successive responses to this
757             request. A value of zero (0) indicates that the IG should return a single
758             response. A value of n > 0 indicates that the IG should return a response
759             every nth frame.
760              
761             =cut
762              
763             sub update_period() {
764 1     1 1 5 my ($self,$nv) = @_;
765 1 50       4 if (defined($nv)) {
766 1         3 $self->{'updatePeriod'} = $nv;
767             }
768 1         4 return $self->{'updatePeriod'};
769             }
770              
771             #==============================================================================
772              
773             =item sub destination_entity_ident([$newValue])
774              
775             $value = $loss_rqst->destination_entity_ident($newValue);
776              
777             Destination Entity ID.
778              
779             This attribute indicates the entity with respect to which the Destination X
780             Offset, Destination Y Offset, and Destination Z Offset attributes are
781             specified.
782             This attribute is used only if the Destination Point Coordinate System
783             attribute is set to Entity (1) and the Destination Entity ID Valid flag is set
784             to Valid (1).
785              
786             =cut
787              
788             sub destination_entity_ident() {
789 1     1 1 5 my ($self,$nv) = @_;
790 1 50       11 if (defined($nv)) {
791 1         3 $self->{'destinationEntityIdent'} = $nv;
792             }
793 1         4 return $self->{'destinationEntityIdent'};
794             }
795              
796             #==========================================================================
797              
798             =item sub pack()
799              
800             $value = $loss_rqst->pack();
801              
802             Returns the packed data packet.
803              
804             =cut
805              
806             sub pack($) {
807 1     1 1 5 my $self = shift ;
808            
809 1         13 $self->{'_Buffer'} = CORE::pack($self->{'_Pack'},
810             $self->{'packetType'},
811             $self->{'packetSize'},
812             $self->{'requestIdent'},
813             $self->{'_bitfields1'}, # Includes bitfields unused42, destinationEntityValid, responseCoordinateSystem, destinationPointCoordinateSystem, sourcePointCoordinateSystem, and requestType.
814             $self->{'alphaThreshold'},
815             $self->{'sourceEntityIdent'},
816             $self->{'sourceLatitude_xOffset'},
817             $self->{'sourceLongitude_yOffset'},
818             $self->{'sourceAltitude_zOffset'},
819             $self->{'destinationLatitude_xOffset'},
820             $self->{'destinationLongitude_yOffset'},
821             $self->{'destinationAltitude_zOffset'},
822             $self->{'materialMask'},
823             $self->{'updatePeriod'},
824             $self->{'_unused43'},
825             $self->{'destinationEntityIdent'},
826             );
827              
828 1         4 return $self->{'_Buffer'};
829             }
830              
831             #==========================================================================
832              
833             =item sub unpack()
834              
835             $value = $loss_rqst->unpack();
836              
837             Unpacks the packed data packet.
838              
839             =cut
840              
841             sub unpack($) {
842 0     0 1   my $self = shift @_;
843            
844 0 0         if (@_) {
845 0           $self->{'_Buffer'} = shift @_;
846             }
847 0           my ($a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k,$l,$m,$n,$o,$p) = CORE::unpack($self->{'_Pack'},$self->{'_Buffer'});
848 0           $self->{'packetType'} = $a;
849 0           $self->{'packetSize'} = $b;
850 0           $self->{'requestIdent'} = $c;
851 0           $self->{'_bitfields1'} = $d; # Includes bitfields unused42, destinationEntityValid, responseCoordinateSystem, destinationPointCoordinateSystem, sourcePointCoordinateSystem, and requestType.
852 0           $self->{'alphaThreshold'} = $e;
853 0           $self->{'sourceEntityIdent'} = $f;
854 0           $self->{'sourceLatitude_xOffset'} = $g;
855 0           $self->{'sourceLongitude_yOffset'} = $h;
856 0           $self->{'sourceAltitude_zOffset'} = $i;
857 0           $self->{'destinationLatitude_xOffset'} = $j;
858 0           $self->{'destinationLongitude_yOffset'} = $k;
859 0           $self->{'destinationAltitude_zOffset'} = $l;
860 0           $self->{'materialMask'} = $m;
861 0           $self->{'updatePeriod'} = $n;
862 0           $self->{'_unused43'} = $o;
863 0           $self->{'destinationEntityIdent'} = $p;
864              
865 0           $self->{'destinationEntityValid'} = $self->destination_entity_valid();
866 0           $self->{'responseCoordinateSystem'} = $self->response_coordinate_system();
867 0           $self->{'destinationPointCoordinateSystem'} = $self->destination_point_coordinate_system();
868 0           $self->{'sourcePointCoordinateSystem'} = $self->source_point_coordinate_system();
869 0           $self->{'requestType'} = $self->request_type();
870              
871 0           return $self->{'_Buffer'};
872             }
873              
874             #==========================================================================
875              
876             =item sub byte_swap()
877              
878             $obj_name->byte_swap();
879              
880             Byte swaps the packed data packet.
881              
882             =cut
883              
884             sub byte_swap($) {
885 0     0 1   my $self = shift @_;
886            
887 0 0         if (@_) {
888 0           $self->{'_Buffer'} = shift @_;
889             } else {
890 0           $self->pack();
891             }
892 0           my ($a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k,$l,$m,$n,$o,$p,$q,$r,$s,$t,$u,$v) = CORE::unpack($self->{'_Swap1'},$self->{'_Buffer'});
893              
894 0           $self->{'_Buffer'} = CORE::pack($self->{'_Swap2'},$a,$b,$c,$d,$e,$f,$h,$g,$j,$i,$l,$k,$n,$m,$p,$o,$r,$q,$s,$t,$u,$v);
895 0           $self->unpack();
896              
897 0           return $self->{'_Buffer'};
898             }
899              
900             1;
901             __END__