-+-+-+-+-+-+-+-+ START OF PART 269 -+-+-+-+-+-+-+-+ X str, &err, &rect, &offset); X /* make 2 matrices, one for character up vector X ** and text position, and one for direction vectors. X */ X ptk_unitmatrix3(charupmat); X angle = (Pfloat)atan2(tsl.charup.x, tsl.charup.y); X angle *= -180.0/3.1412; X ptk_rotate3(angle, PTKEZAXIS, PREPLACE, charupmat); X X /* lead line - annotation style, include ref_pt */ X#ifdef SUN X charupmat`5B0`5D`5B3`5D = elcont.eldata.atx.ref_pt.x +`20 X elcont.eldata.atx.anno.x; X charupmat`5B1`5D`5B3`5D = elcont.eldata.atx.ref_pt.y +`20 X elcont.eldata.atx.anno.y; X#endif X#ifdef VMS X charupmat`5B0`5D`5B3`5D = elcont.eldata.atext.ref_pt.x +`20 X elcont.eldata.atext.anno.x; X charupmat`5B1`5D`5B3`5D = elcont.eldata.atext.ref_pt.y +`20 X elcont.eldata.atext.anno.y; X#endif X charupmat`5B2`5D`5B3`5D = 0.0; X `20 X txpt = ptk_point3(rect.ll.x, rect.ll.y, 0.0); X txpt = ptk_transform3(charupmat, &txpt); X txpt = ptk_transform3(compxform, &txpt); X testpoint(&txpt, boundbox); X txpt = ptk_point3(rect.ur.x, rect.ur.y, 0.0); X txpt = ptk_transform3(charupmat, &txpt); X txpt = ptk_transform3(compxform, &txpt); X testpoint(&txpt, boundbox); X txpt = ptk_point3(rect.ll.x, rect.ur.y, 0.0); X txpt = ptk_transform3(charupmat, &txpt); X txpt = ptk_transform3(compxform, &txpt); X testpoint(&txpt, boundbox); X txpt = ptk_point3(rect.ur.x, rect.ll.y, 0.0); X txpt = ptk_transform3(charupmat, &txpt); X txpt = ptk_transform3(compxform, &txpt); X testpoint(&txpt, boundbox); X `7D `20 X`09break; X X case PEL_FILL_AREA_SET3: `20 X`09ptk_multiplymatrix3(tsl.globaltran, tsl.localtran, compxform); X#ifdef VMS X `7B X Pint pos; X X pos = 0; X for (j = 0; j < elcont.size; j++)`20 X `7B X for (k = 0; k < elcont.eldata.fillarea_set3.bounds`5Bj`5D; k++) X`09 `7B X pt = ptk_transform3(compxform,`20 X &elcont.eldata.fillarea_set3.pts`5Bk+pos`5D); X testpoint(&pt, boundbox); X `7D X pos += elcont.eldata.fillarea_set3.bounds`5Bj`5D; X `7D X`09`7D X#endif X#ifdef SUN X for (j = 0; j < elcont.eldata.fas3.n_sets; j++)`20 X `7B X for (k = 0; k < elcont.eldata.fas3.sets`5Bj`5D.number; k++) X`09 `7B X pt = ptk_transform3(compxform,`20 X &elcont.eldata.fas3.sets`5Bj`5D.points`5Bk`5 VD),`20 X testpoint(&pt, boundbox); X `7D X`09`7D X#endif X`09break; X X case PEL_FILL_AREA_SET: /* do nothing */ X`09ptk_multiplymatrix3(tsl.globaltran, tsl.localtran, compxform); X#ifdef VMS X `7B X Pint pos; X Ppoint fpt; X X pos = 0; X for (j = 0; j < elcont.size; j++)`20 X `7B X for (k = 0; k < elcont.eldata.fillarea_set.bounds`5Bj`5D; k++) X`09 `7B X fpt = elcont.eldata.fillarea_set.pts`5Bk+pos`5D; `20 X pt = ptk_point3(fpt.x, fpt.y, 0.0); X pt = ptk_transform3(compxform, &pt); X testpoint(&pt, boundbox); X `7D X pos += elcont.eldata.fillarea_set.bounds`5Bj`5D; X `7D X`09`7D X#endif X#ifdef SUN X`09`7B X Ppoint fpt; X X for (j = 0; j < elcont.eldata.fas.n_sets; j++)`20 X `7B `20 X for (k = 0; k < elcont.eldata.fas.sets`5Bj`5D.number; k++) X `7B X fpt = elcont.eldata.fas.sets`5Bj`5D.points`5Bk`5D; `20 X pt = ptk_point3(fpt.x, fpt.y, 0.0); X pt = ptk_transform3(compxform, &pt); X testpoint(&pt, boundbox); X `7D X `7D X`09`7D X#endif X`09break; X X case PEL_CELL_ARRAY3: `20 X`09ptk_multiplymatrix3(tsl.globaltran, tsl.localtran, compxform); X#ifdef VMS X for (j = 0; j < 3; j++)`20 X `7B X pt = ptk_transform3(compxform,`20 X &elcont.eldata.cell_array3.parallelogram`5Bj`5D); X testpoint(&pt, boundbox); X `7D X#endif X#ifdef SUN X for (j = 0; j < 3; j++)`20 X `7B X pt = ptk_transform3(compxform, &elcont.eldata.ca3.pgram`5Bj`5D); X testpoint(&pt, boundbox); X `7D X#endif X`09break; X X case PEL_CELL_ARRAY:`20 X`09`7B X Ppoint cellpt; X X ptk_multiplymatrix3(tsl.globaltran, tsl.localtran, compxform); X#ifdef VMS X cellpt = elcont.eldata.cell_array.rect.ll; X pt = ptk_point3(cellpt.x, cellpt.y, 0.0); X pt = ptk_transform3(compxform, &pt); X testpoint(&pt, boundbox); X cellpt = elcont.eldata.cell_array.rect.ur; X pt = ptk_point3(cellpt.x, cellpt.y, 0.0); X pt = ptk_transform3(compxform, &pt); X testpoint(&pt, boundbox); X#endif X#ifdef SUN X cellpt = elcont.eldata.ca.rect.ll; X pt = ptk_point3(cellpt.x, cellpt.y, 0.0); X pt = ptk_transform3(compxform, &pt); X testpoint(&pt, boundbox); X cellpt = elcont.eldata.ca.rect.ur; `20 X pt = ptk_point3(cellpt.x, cellpt.y, 0.0); X pt = ptk_transform3(compxform, &pt); X testpoint(&pt, boundbox); X#endif X `7D X`09break; X X case PEL_CHARACTER_EXPANSION_FACTOR: X tsl.txbundl.exp = elcont.eldata.fdata; X`09break; X X case PEL_CHARACTER_SPACING: X tsl.txbundl.space = elcont.eldata.fdata; X`09break; X X case PEL_CHARACTER_HEIGHT:`20 X tsl.charheight = elcont.eldata.fdata; X`09break; X X case PEL_CHARACTER_UP_VECTOR: /* do nothing */ X tsl.charup = ptk_point(elcont.eldata.char_up.x,`20 X elcont.eldata.char_up.y); X`09break; X X case PEL_TEXT_PATH: `20 X#ifdef VMS X tsl.textpath = elcont.eldata.text_path; X#endif X#ifdef SUN X tsl.textpath = elcont.eldata.tx_path; X#endif X break; X X case PEL_TEXT_ALIGNMENT: X#ifdef VMS X tsl.textalign = elcont.eldata.text_align; X#endif X#ifdef SUN X tsl.textalign = elcont.eldata.tx_align; X#endif X`09break; X X case PEL_ANNOTATION_TEXT_CHARACTER_HEIGHT: X tsl.charheight = elcont.eldata.fdata; X break; X X case PEL_ANNOTATION_TEXT_CHARACTER_UP_VECTOR: X tsl.annocharup = ptk_point(elcont.eldata.char_up.x,`20 X elcont.eldata.char_up.y); X break; X X case PEL_ANNOTATION_TEXT_PATH: X#ifdef VMS X tsl.annotextpath = elcont.eldata.text_path; X#endif X#ifdef SUN X tsl.annotextpath = elcont.eldata.tx_path; X#endif X break; X X case PEL_ANNOTATION_TEXT_ALIGNMENT: X#ifdef VMS X tsl.annotextalign = elcont.eldata.text_align; X#endif X#ifdef SUN X tsl.annotextalign = elcont.eldata.tx_align; X#endif X break; X X case PEL_LOCAL_MODELLING_TRANSFORMATION3: X#ifdef VMS X`09ptk_concatenatematrix3(elcont.eldata.local_xform_3.compose_type,`20 X elcont.eldata.local_xform_3.mat3,`20 X tsl.localtran, tsl.localtran); X#endif X#ifdef SUN X`09ptk_concatenatematrix3(elcont.eldata.mtran3.comp,`20 X elcont.eldata.mtran3.mat, tsl.localtran,`20 X tsl.localtran);`20 X#endif X`09break; X X case PEL_LOCAL_MODELLING_TRANSFORMATION: X`09`7B X Pmatrix3 local4x4; X /* convert 3x3 matrix to 4x4 matrix */ X X#ifdef VMS X ptk_matrixtomatrix3(elcont.eldata.local_xform.mat, local4x4); X`09 ptk_concatenatematrix3(elcont.eldata.local_xform.compose_type,`20 X local4x4, tsl.localtran, tsl.localtran); X#endif X#ifdef SUN X ptk_matrixtomatrix3(elcont.eldata.m_tran.mat, local4x4); X ptk_concatenatematrix3(elcont.eldata.m_tran.comp, local4x4,`20 X tsl.localtran, tsl.localtran);`20 X#endif X `7D X`09break; X X case PEL_GLOBAL_MODELLING_TRANSFORMATION3: X#ifdef VMS X`09memcpy(tsl.globaltran, elcont.eldata.mat3, sizeof(Pmatrix3)); X#endif X#ifdef SUN X`09memcpy(tsl.globaltran, elcont.eldata.gbl_tran3,`20 X sizeof(Pmatrix3)); X#endif X`09break; X X case PEL_GLOBAL_MODELLING_TRANSFORMATION: X`09`7B X Pmatrix3 global4x4; X X#ifdef VMS X ptk_matrixtomatrix3(elcont.eldata.mat, global4x4); X#endif X#ifdef SUN X ptk_matrixtomatrix3(elcont.eldata.gbl_tran, global4x4); X#endif X memcpy(tsl.globaltran, global4x4, sizeof(Pmatrix3)); X `7D X`09break; X X case PEL_EXECUTE_STRUCTURE: X result = TRUE; X *execid = elcont.eldata.idata; X`09break; X X case PEL_NIL: /* do nothing */ X`09break; X X case PEL_POLYLINE_INDEX: X tsl.lnattr.index = elcont.eldata.idata; X break; X X case PEL_POLYMARKER_INDEX: X tsl.mkattr.index = elcont.eldata.idata; X break; X X case PEL_TEXT_INDEX: X tsl.textindex = elcont.eldata.idata; X break; X X case PEL_INTERIOR_INDEX: X tsl.interattr.index = elcont.eldata.idata; X break; X X case PEL_EDGE_INDEX: X tsl.edgeattr.index = elcont.eldata.idata; X break; X X case PEL_LINETYPE: X tsl.lnattr.bundl.type = elcont.eldata.idata; X break; X X case PEL_LINEWIDTH_SCALE_FACTOR: X tsl.lnattr.bundl.width = elcont.eldata.fdata; X break; X X case PEL_POLYLINE_COLOUR_INDEX: X tsl.lnattr.bundl.colour = elcont.eldata.idata; X break; X X case PEL_MARKER_TYPE: X tsl.mkattr.bundl.type = elcont.eldata.idata; X break; X X case PEL_MARKER_SIZE_SCALE_FACTOR: X tsl.mkattr.bundl.size = elcont.eldata.fdata; X break; X X case PEL_MARKER_COLOUR_INDEX: X tsl.mkattr.bundl.colour = elcont.eldata.idata; X break; X X case PEL_TEXT_FONT: X tsl.txbundl.font = elcont.eldata.idata; X break; X X case PEL_TEXT_PRECISION: X#ifdef SUN X tsl.txbundl.precision = elcont.eldata.tx_prec; X#endif X#ifdef VMS X tsl.txbundl.precision = elcont.eldata.text_prec; X#endif X break; X X case PEL_TEXT_COLOUR_INDEX: X tsl.txbundl.colour = elcont.eldata.idata; X break; X X case PEL_ANNOTATION_STYLE: X tsl.annostyle = elcont.eldata.idata; X break; X X case PEL_INTERIOR_STYLE: X#ifdef SUN X tsl.interattr.bundl.style = elcont.eldata.int_style; X#endif X#ifdef VMS X tsl.interattr.bundl.style = elcont.eldata.interior_style; X#endif X break; X X case PEL_INTERIOR_STYLE_INDEX: X tsl.interattr.bundl.index = elcont.eldata.idata; X break; X X case PEL_INTERIOR_COLOUR_INDEX: X tsl.interattr.bundl.colour = elcont.eldata.idata; X break; X X case PEL_EDGE_FLAG: X tsl.edgeattr.bundl.flag = elcont.eldata.edge_flag; X break; X X case PEL_EDGETYPE: X tsl.edgeattr.bundl.type = elcont.eldata.idata; X break; X X case PEL_EDGEWIDTH_SCALE_FACTOR: X tsl.edgeattr.bundl.scale = elcont.eldata.fdata; X break; X X case PEL_EDGE_COLOUR_INDEX: X tsl.edgeattr.bundl.colour = elcont.eldata.idata; X break; X X case PEL_PATTERN_SIZE: X tsl.patsize = elcont.eldata.pt; X break; X X case PEL_PATTERN_REFERENCE_POINT_AND_VECTORS: X#ifdef SUN X tsl.patrefpt = elcont.eldata.pat.pt; X tsl.patvec`5B0`5D = ptk_vec3topt3(&elcont.eldata.pat.vec`5B0`5D); X tsl.patvec`5B1`5D = ptk_vec3topt3(&elcont.eldata.pat.vec`5B1`5D); X#endif X#ifdef VMS X tsl.patrefpt = elcont.eldata.pat_pt_vectors.pt; X tsl.patvec`5B0`5D =`20 X ptk_vec3topt3(&elcont.eldata.pat_pt_vectors.vectors`5B0`5D V); X tsl.patvec`5B1`5D =`20 X ptk_vec3topt3(&elcont.eldata.pat_pt_vectors.vectors`5B1`5D V); X#endif X break; X X case PEL_PATTERN_REFERENCE_POINT: X tsl.patrefpt = ptk_point3(elcont.eldata.pt.x, elcont.eldata.pt.y, X 0.0); X break; X X case PEL_ADD_NAMES_TO_SET: X addnameset(&elcont.eldata.name_set, &tsl.nameset); X break; X X case PEL_REMOVE_NAMES_FROM_SET: X removenameset(&elcont.eldata.name_set, &tsl.nameset); X break; X X case PEL_INDIVIDUAL_ASF: X#ifdef SUN X attrid = elcont.eldata.asf.id;`20 X asf = elcont.eldata.asf.asf; X#endif X#ifdef VMS X attrid = elcont.eldata.asf_info.attr_id;`20 X asf = elcont.eldata.asf_info.asf; X#endif X switch (attrid) X`09`7B X case PLINETYPE: X tsl.lnattr.type = asf; X break; X X case PLINEWIDTH_SCALE_FACTOR: X tsl.lnattr.width = asf; X break; X X case PPOLYLINE_COLOUR_INDEX: X tsl.lnattr.colour = asf; X break; X X case PMARKERTYPE: X tsl.mkattr.type = asf; X break; X X case PMARKERSIZE_SCALE_FACTOR: X#ifdef SUN X tsl.mkattr.style = asf; X#endif X#ifdef VMS X tsl.mkattr.size = asf; X#endif X break; X X case PPOLYMARKER_COLOUR_INDEX: X tsl.mkattr.colour = asf; X break; X X case PTEXT_FONT: X tsl.textfontasf = asf; `20 X break; X X case PTEXT_PRECISION: X tsl.textprecasf = asf; `20 X break; X X case PCHARACTER_EXPANSION_FACTOR: X tsl.charexpanasf = asf; `20 X break; X X case PCHARACTER_SPACING: X tsl.charspaceasf = asf; `20 X break; X X case PTEXT_COLOUR_INDEX: X tsl.textcolourasf = asf; `20 X break; X X case PINTERIOR_STYLE: X tsl.interattr.interior = asf; X break; X X case PINTERIOR_STYLE_INDEX: +-+-+-+-+-+-+-+- END OF PART 269 +-+-+-+-+-+-+-+-