00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #include <stdio.h>
00042 #include "mensagem.h"
00043 #include "memvirtu.h"
00044 #include "lowparam.h"
00045 #include "lowmacro.h"
00046 #include "lowsolid.h"
00047 #include "eulerops.h"
00048 #include "mancommd.h"
00049
00050 #ifdef __Extended_Version
00051 void MSD_execNewVertexLocation(void)
00052 {
00053 int sn, vn;
00054 float x, y, z;
00055
00056 while (sscanf(restbuf, "%d %d %f %f %f", &sn, &vn, &x, &y, &z) != 5)
00057 {
00058 printf("newloc: Sid vn x y z");
00059 if (!lineins("? "))
00060 {
00061 return;
00062 }
00063 }
00064 MSD_highNewVertexLocation(sn, vn, x, y, z);
00065 }
00066
00067 #endif
00068
00069
00070 int MSD_highNewVertexLocation(Id sn, Id vn, real x, real y, real z)
00071 {
00072 SPTYPE s;
00073 DPTYPE d;
00074 VPTYPE v;
00075
00076 if ((s = MSD_getSolid(sn)) == SNIL)
00077 {
00078 fprintf(stderr, MEN_NaoEncontrouSolido, NAM_NewLocation, sn);
00079 return(ERROR);
00080 }
00081 for (AllShellsSolid(s, d))
00082 {
00083 for (AllVerticesShell(d, v))
00084 {
00085 if (VerVertexNo(v) == vn)
00086 {
00087 MSD_lowNewVertexLocation(s, v, x, y, z);
00088 return(SUCCESS);
00089 }
00090 }
00091 }
00092 fprintf(stderr, MEN_NaoEncontrouVertice, NAM_NewLocation, vn);
00093 return(ERROR);
00094 }
00095
00096 void MSD_lowNewVertexLocation(SPTYPE s, VPTYPE v, real x, real y, real z)
00097 {
00098 if (Gdoinversion)
00099 {
00100 MSD_lowAddEulerOp(s, NEWLOC, VerVertexNo(v), 0, 0, 0, 0, 0, 0, 0,
00101 VerVCoord(v)[0],
00102 VerVCoord(v)[1],
00103 VerVCoord(v)[2], 0.0);
00104 }
00105 if (Gdodirect)
00106 {
00107 MSD_lowAddEulerOpRedo(s, NEWLOC, VerVertexNo(v), 0, 0, 0, 0, 0, 0, 0,
00108 x, y, z, 0.0);
00109 }
00110
00111 VerVCoord(v)[0] = x;
00112 VerVCoord(v)[1] = y;
00113 VerVCoord(v)[2] = z;
00114 VerVCoord(v)[3] = 1.0;
00115 }
00116
00117 int MSD_execStructNewVertexLocation(EulerOp *op)
00118 {
00119 Id sid, id1;
00120 real fd1, fd2, fd3;
00121
00122 sid = op->solidno;
00123 id1 = op->ip1;
00124 fd1 = op->fp1;
00125 fd2 = op->fp2;
00126 fd3 = op->fp3;
00127 return(MSD_highNewVertexLocation(sid, id1, fd1, fd2, fd3));
00128 }
00129
00130 void MSD_printStructNewVertexLocation(FILE *f, EulerOp *op)
00131 {
00132 Id sid, id1;
00133 real fd1, fd2, fd3;
00134 int com;
00135
00136 sid = op->solidno;
00137 id1 = op->ip1;
00138 fd1 = op->fp1;
00139 fd2 = op->fp2;
00140 fd3 = op->fp3;
00141 com = op->CommandCount;
00142 fprintf(f, "newloc %d %d %d %f %f %f\n", sid, com, id1, fd1, fd2, fd3);
00143 }
00144
00145 int MSD_readStructNewVertexLocation(FILE *f, EulerOp *op)
00146 {
00147 int solidno, ip1, com;
00148 float fp1, fp2, fp3;
00149
00150 if (fscanf(f, "%d %d %d %f %f %f\n", &solidno, &com, &ip1, &fp1, &fp2, &fp3) != 7)
00151 {
00152 return(ERROR);
00153 }
00154 op->solidno = solidno;
00155 op->CommandCount = com;
00156 op->ip1 = ip1;
00157 op->ip2 = 0;
00158 op->ip3 = 0;
00159 op->ip4 = 0;
00160 op->ip5 = 0;
00161 op->ip6 = 0;
00162 op->ip7 = 0;
00163 op->ip8 = 0;
00164 op->fp1 = fp1;
00165 op->fp2 = fp2;
00166 op->fp3 = fp3;
00167 op->fp4 = 0.0;
00168 return(SUCCESS);
00169 }
00170
00171 int MSD_modifyStructNewVertexLocation(EulerOp *op)
00172 {
00173 int solidno;
00174
00175 solidno = MSD_lowCheckTranslatorTable(op->solidno, SOLID);
00176 op->solidno = solidno;
00177 return(SUCCESS);
00178 }