25!||--- called by ------------------------------------------------------
33#include
"implicit_f.inc"
37 my_real ,
intent(inout) :: v1(2),v2(2)
54!||--- called by ------------------------------------------------------
63#include "implicit_f.inc"
72 type(polygon) :: basePolygon, clipPolygon, resultPolygon
76 type(polygon) :: tmpPolygon
77 my_real :: edge_p1(2),edge_p2(2)
79 tmppolygon%NumNodes = clippolygon%NumNodes
80 IF(tmppolygon%NumNodes > 0)
THEN
81 tmppolygon%node(1:tmppolygon%NumNodes,:) = clippolygon%node(1:tmppolygon%NumNodes,:)
84 do i=1,basepolygon%NumNodes-1
85 edge_p1(:) = basepolygon%node(i,:)
86 edge_p2(:) = basepolygon%node(i+1,:)
88 call clipedge( tmppolygon, edge_p1, edge_p2, resultpolygon)
90 tmppolygon%NumNodes = resultpolygon%NumNodes
91 tmppolygon%node(1:tmppolygon%NumNodes,:) = resultpolygon%node(1:tmppolygon%NumNodes,:)
110#include "implicit_f.inc"
118 type(polygon) :: polyg, resultPolyg
119 my_real ,
intent(inout) :: p1(2), p2(2)
123 my_real :: x1(2), x2(2), intersecpoint(2)
127 my_real ,
intent(inout) :: a(2),b(2),c(2),d(2)
128 integer,
intent(in) :: iflg
132 my_real ,
intent(inout) :: a(2),b(2),c(2)
133 logical :: IS_ON_1ST_HALF_PLANE
140 do i=1,polyg%NumNodes-1
141 x1(:) = polyg%node(i,:)
142 x2(:) = polyg%node(i+1,:)
148 resultpolyg%node(k,:) = x2(:)
153 resultpolyg%node(k,:) = intersecpoint(:)
159 resultpolyg%node(k,:) = intersecpoint(:)
162 resultpolyg%node(k,:) = x2(:)
168 if ( (resultpolyg%node(1,1) /= resultpolyg%node(k,1)) .or. (resultpolyg%node(1,2) /= resultpolyg%node(k,2)))
then
170 resultpolyg%node(k,:) = resultpolyg%node(1,:)
174 resultpolyg%NumNodes = k
186!||
crossprod2d ../engine/source/interfaces/int22/i22clip_tools.f
192#include "implicit_f.inc"
196 my_real ,
intent(inout) :: seg_p1(2), seg_p2(2)
197 my_real ,
intent(inout) :: line_p1(2), line_p2(2)
198 INTEGER ,
intent(in) :: iflg
212 v1(:) = seg_p2(:) - seg_p1(:)
213 v2(:) = line_p2(:) - line_p1(:)
214 l=
max(sum(v1(:)*v1(:)),sum(v2(:)*v2(:)))
216 if (abs(tmp) <= tol*l)
then
219 seg_p1_line_p1(:) = line_p1(:) - seg_p1(:)
223 if(abs(tmp) <= tol*l)
then
229 seg_p1_line_p1(:) = line_p1(:) - seg_p1(:)
236 if ( (
alpha >= -em03) .and. (
alpha <= one+em03))
then
258#include "implicit_f.inc"
262 my_real ,
intent(inout) :: point(2), p1(2), p2(2)
274 v1(:) = p2(:) - p1(:)
275 v2(:) = point(:) - p1(:)
276 l=
max(sum(v1(:)*v1(:)),sum(v2(:)*v2(:)))
281 if ( crossp >= -em10*l)
then
298#include "implicit_f.inc"
306 type(polygon) ,
intent(inout) :: Polyg
321 x(i) = polyg%node(i,1)
322 y(i) = polyg%node(i,2)
326 total = total + (x(i+1)-x(i))*(y(i+1)+y(i))
329 area = half * abs(total)
332 IF (total < zero)
THEN
334 polyg%node(i,1) = x(n-i+1)
335 polyg%node(i,2) = y(n-i+1)
353#include "implicit_f.inc"
361 type(polygon) ,
intent(inout) :: Polyg
376 x(i) = polyg%node(i,1)
377 y(i) = polyg%node(i,2)
381 total = total + (x(i+1)-x(i))*(y(i+1)+y(i))
384 area = half * abs(total)
387 IF (total > zero)
THEN
389 polyg%node(i,1) = x(n-i+1)
390 polyg%node(i,2) = y(n-i+1)
subroutine area(d1, x, x2, y, y2, eint, stif0)