SDK:Intersecting Surfaces

From Vectorworks Developer
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

.SDK|SDK ..SDK:Types|SDK Types ..SDK:Using the SDK|Using the SDK ..VCOM:VCOM (Vectorworks Component Object Model)|VCOM Basics ..VCOM:Class Reference|VCOM Class Reference

What's that

This article will explain how to create the surface objects that are the intersection of the two referenced surface objects.

Creating

There are different ways to accomplish this. Here are two ways of doing this:

IPoly2DOperations

See example below.

Kludge

	gSDK->Kludge( kIntersectSurfaceKludge, &surfaceInformation, nil );
  • kIntersectSurfaceKludge is a const CBSignedShort with 5571 as value.
  • doubleParams is a struct with 3 MCObjectHandles parameters (object1, object2 and the result of the intersection between the two objects).

BE AWARE, this will give an undo warning!

Example

IPoly2DOperations

void DEExtWD::Helpers::IntersectTwoObjects(Handle& h1, Handle h2, TVWArray_MCObjectHandle & hResultArray)
{
	if(VERIFYN(kAbdel, h1 != nil && h2 != nil)) {

		VWFC::IPoly2DMathPtr intersectionOp( VWFC::IID_Poly2DMath );
		VWFC::IPoly2DOperationsPtr boolPtr( VWFC::IID_Poly2DOperations );

		VWFC::IPolyDefPtr h1DefPoly;
		VWFC::IPolyDefPtr h2DefPoly;
		VWFC::IPolyDefArrayPtr intersectionH;
		Uint32 len;

		intersectionOp->CreatePoly(h1, &h1DefPoly);
		intersectionOp->CreatePoly(h2, &h2DefPoly);

		if(h1DefPoly != nil && h2DefPoly != nil) {

			boolPtr->IntersectSurface(h1DefPoly, h2DefPoly, &intersectionH);

			if(intersectionH != nil) 
			{
				intersectionH->Size(len);
				VWFC::IPolyDefPtr poly;
				for(Uint32 i=0; i<len; i++) {
					intersectionH->Get(i, &poly);
					Handle h = nil;
					intersectionOp->CreateHandle(poly, h);
					if (h != nil)
						hResultArray.Append(h);
				}
			}
		}
	}
}

Kludge

MCObjectHandle IntersectSurface(MCObjectHandle obj1, MCObjectHandle obj2)
{
	const CBSignedShort kIntersectSurfaceKludge = 5571;
	struct IntersectSurfaceInformation
	{
		MCObjectHandle h1;
		MCObjectHandle h2;
		MCObjectHandle result;
	};

	IntersectSurfaceInformation surfaceInformation;
	surfaceInformation.h1 = listObj1[i];
	surfaceInformation.h2 = listObj2[j];
	gSDK->Kludge(kIntersectSurfaceKludge, &surfaceInformation, nil);
	
	return surfaceInformation.result;
}

See also

VCOM:VectorWorks:ISDK::Kludge