示例#1
0
bool XARGenerator::OutputPolygonEntity(const Style& style, const Transformation& trans, const PointDVector& coordVector)
{
	bool ok = true;
	CXaraFileRecord Rec(0);

	if (style.IsFillColourDefined() || style.IsFillGradientDefined()) {
		if (style.IsStrokeColourDefined())
			Rec.Reinit(TAG_PATH_FILLED_STROKED, TAG_PATH_SIZE);
		else
			Rec.Reinit(TAG_PATH_FILLED, TAG_PATH_SIZE);
	} else // if (style.IsStrokeColourDefined())
		Rec.Reinit(TAG_PATH_STROKED, TAG_PATH_SIZE);
	Rec.WriteUINT32(coordVector.GetCount());
	Rec.WriteBYTE(0x06); // moveto
	for (unsigned int i = 1; i < coordVector.GetCount() - 1; ++i)
		Rec.WriteBYTE(0x02); // lineto
	Rec.WriteBYTE(0x03); // lineto + closepath
	for (unsigned int i = 0; i < coordVector.GetCount(); ++i) {
		PointD p = coordVector[i];
		Rec.WriteCoord(DocCoord((INT32)p.x, m_docSize.y - (INT32)p.y));
	}
	ok = m_pExporter->WriteRecord(&Rec);

	RectD boundings = GetMaximumBoundings(coordVector);
	/***/ ok = m_pExporter->WriteZeroSizedRecord(TAG_DOWN);
	OutputStyles(style, trans, boundings, STYLE_FILL_ALL|STYLE_STROKE_ALL|STYLE_OPACITY);
	/***/ ok = m_pExporter->WriteZeroSizedRecord(TAG_UP);

	return ok;
}
示例#2
0
bool XARGenerator::OutputPathEntity(const Style& style, const Transformation& trans, PathDataVector& pathVector)
{
	bool ok = true;
	CXaraFileRecord Rec(0);

	if (style.IsFillColourDefined() || style.IsFillGradientDefined()) {
		if (style.IsStrokeColourDefined())
			Rec.Reinit(TAG_PATH_FILLED_STROKED, TAG_PATH_SIZE);
		else
			Rec.Reinit(TAG_PATH_FILLED, TAG_PATH_SIZE);
	} else // if (style.IsStrokeColourDefined())
		Rec.Reinit(TAG_PATH_STROKED, TAG_PATH_SIZE);

	Rec.WriteUINT32(pathVector.GetCount());
	for (unsigned int i = 0; i < pathVector.GetCount(); ++i)
		Rec.WriteBYTE(pathVector[i].m_verb);
	for (unsigned int i = 0; i < pathVector.GetCount(); ++i) {
		PointD p = pathVector[i].m_coord;
		Rec.WriteCoord(DocCoord((INT32)p.x, m_docSize.y - (INT32)p.y));
	}
	ok = m_pExporter->WriteRecord(&Rec);

	RectD boundings = GetMaximumBoundings(pathVector);
	/***/ ok = m_pExporter->WriteZeroSizedRecord(TAG_DOWN);
	OutputStyles(style, trans, boundings, STYLE_FILL_ALL|STYLE_STROKE_ALL|STYLE_OPACITY);
	/***/ ok = m_pExporter->WriteZeroSizedRecord(TAG_UP);

	return ok;
}
示例#3
0
bool XARGenerator::OutputLineEntity(const Style& style, const Transformation& trans, const PointD& p1, const PointD& p2)
{
	// truncate floating point values to INT32
	DocCoord dcPos1((INT32)p1.x, m_docSize.y - (INT32)p1.y);
	DocCoord dcPos2((INT32)p2.x, m_docSize.y - (INT32)p2.y);

#if SVGDEBUG
	svgtrace(DBGTRACE_SHAPES, "line: x1=%d y1=%d x2=%d y2=%d\n", dcPos1.x, dcPos1.y, dcPos2.x, dcPos2.y);
#endif

	bool ok = true;
	CXaraFileRecord Rec(0);
	Rec.Reinit(TAG_PATH_STROKED, TAG_PATH_SIZE);
	Rec.WriteUINT32(2);	 // two coordinates
	Rec.WriteBYTE(0x06); // moveto
	Rec.WriteBYTE(0x02); // lineno
	Rec.WriteCoord(dcPos1);
	Rec.WriteCoord(dcPos2);
	ok = m_pExporter->WriteRecord(&Rec);

	RectD boundings = RectD(p1, p2);
	/***/ ok = m_pExporter->WriteZeroSizedRecord(TAG_DOWN);
	OutputStyles(style, trans, boundings, STYLE_STROKE_ALL|STYLE_OPACITY);
	/***/ ok = m_pExporter->WriteZeroSizedRecord(TAG_UP);

	return ok;
}
示例#4
0
bool XARGenerator::OutputUprightEllipse(const RectD& r)
{
	// no rotation or skew was applied
	double fX = r.p11.x;
	double fY = r.p11.y;
	double fWidth = r.p12.x - r.p11.x;
	double fHeight = r.p21.y - r.p11.y;

	// adjust coordinates
	fX += fWidth/2.0;
	fY = m_docSize.y - fY - fHeight/2.0;

	// truncate floating point values to INT32
	DocCoord dcPos((INT32)fX, (INT32)fY);
	DocCoord dcSize((INT32)fWidth, (INT32)fHeight);

	bool ok = true;
	CXaraFileRecord Rec(0);
#if SVGDEBUG
	svgtrace(DBGTRACE_SHAPES, "translated upright ellipse: x=%d y=%d w=%d h=%d\n", dcPos.x, dcPos.y, dcSize.x, dcSize.y);
#endif
 	Rec.Reinit(TAG_ELLIPSE_SIMPLE, TAG_ELLIPSE_SIMPLE_SIZE);
 	ok = Rec.WriteCoord(dcPos);
 	ok = Rec.WriteINT32(dcSize.x);
 	ok = Rec.WriteINT32(dcSize.y);
 	ok = m_pExporter->WriteRecord(&Rec);

	return ok;
}
示例#5
0
bool XARGenerator::OutputComplexRect(const RectD& r, double fRoundAxis)
{
	// complex (non-upright) rectangle
	double fX = (r.p12.x + r.p21.x)*0.5;
	double fY = (r.p12.y + r.p21.y)*0.5;
	double fMaX = (r.p12.x + r.p22.x)*0.5;
	double fMaY = (r.p12.y + r.p22.y)*0.5;
	double fMiX = (r.p12.x + r.p11.x)*0.5;
	double fMiY = (r.p12.y + r.p11.y)*0.5;

	// adjust coordinates
	fY = m_docSize.y - fY;
	fMaY = m_docSize.y - fMaY;
	fMiY = m_docSize.y - fMiY;
	// axes are relative to center
	fMaX -= fX;
	fMaY -= fY;
	fMiX -= fX;
	fMiY -= fY;
	// determine circumscribed ellipse axes
	fMaX *= M_SQRT2;
	fMaY *= M_SQRT2;
	fMiX *= M_SQRT2;
	fMiY *= M_SQRT2;

	// truncate floating point values to INT32
	DocCoord dcPos((INT32)fX, (INT32)fY);
	DocCoord dcMaj((INT32)fMaX, (INT32)fMaY);
	DocCoord dcMin((INT32)fMiX, (INT32)fMiY);

	bool ok = true;
	CXaraFileRecord Rec(0);
	if (fRoundAxis == 0.0) {
		// non-rounded rectangle
#if SVGDEBUG
		svgtrace(DBGTRACE_SHAPES, "translated complex rect: x=%d y=%d M=%d,%d m=%d,%d\n", dcPos.x, dcPos.y, dcMaj.x, dcMaj.y, dcMin.x, dcMin.y);
#endif
		Rec.Reinit(TAG_RECTANGLE_COMPLEX, TAG_RECTANGLE_COMPLEX_SIZE);
		ok = Rec.WriteCoord(dcPos);
		ok = Rec.WriteCoord(dcMaj);
		ok = Rec.WriteCoord(dcMin);
		ok = m_pExporter->WriteRecord(&Rec);
	} else {
		// rounded rectangle
		double fRound = fRoundAxis / dcMaj.x;
#if SVGDEBUG
		svgtrace(DBGTRACE_SHAPES, "translated complex rounded rect: x=%d y=%d M=%d,%d m=%d,%d f=%.2f\n", dcPos.x, dcPos.y, dcMaj.x, dcMaj.y, dcMin.x, dcMin.y, fRound);
#endif
		Rec.Reinit(TAG_RECTANGLE_COMPLEX_ROUNDED, TAG_RECTANGLE_COMPLEX_ROUNDED_SIZE);
		ok = Rec.WriteCoord(dcPos);
		ok = Rec.WriteCoord(dcMaj);
		ok = Rec.WriteCoord(dcMin);
		ok = Rec.WriteDOUBLE(fRound);
		ok = m_pExporter->WriteRecord(&Rec);
	}

	return ok;
}
示例#6
0
SkPDFObject*  SkPDFDict::append(SkPDFName* key, SkPDFObject* value) {
    SkASSERT(key);
    SkASSERT(value);
    SkAutoMutexAcquire lock(fMutex); // If the SkTDArray resizes while
                                     // two threads access array, one
                                     // is left with a bad pointer.
    *(fValue.append()) = Rec(key, value);
    return value;
}
示例#7
0
int64_t Euler_51()
{
    int n;
    for (n = 0; n < 8; n++)
        Number[n] = 0;
    Primes = primeIndexListE(1000000);
    Rec(2);
	free(Primes);
    return g_min;
}
示例#8
0
void SkPDFDict::mergeFrom(const SkPDFDict& other) {
    SkAutoMutexAcquire lockOther(other.fMutex);
    SkTDArray<Rec> copy(other.fValue);
    lockOther.release();  // Do not hold both mutexes at once.

    SkAutoMutexAcquire lock(fMutex);
    for (int i = 0; i < copy.count(); i++) {
        *(fValue.append()) = Rec(SkRef(copy[i].key), SkRef(copy[i].value));
    }
}
void WeeklyDD(const std::vector<double> &TargetedEffort, const std::vector<double> &NontargetedEffort,  std::vector<double> &Biomass, const std::vector<double> &par){

  // Global variables
  extern int NIPY;
  extern double CatchabilityScalingFactor, BiomassScalingFactor,RecruitmentScalingFactor;
  extern double rho, wk, wk_1;//, M;

  assert(TargetedEffort.size() == Biomass.size());

  unsigned int max_timestep = TargetedEffort.size();

  // Define necessary containers
  std::vector< double > Rec(max_timestep, 0.0), survival(max_timestep, 0.0);

  // Remember that the optimizer work on parameters of the same order of magnitude
  double M = par[0];
  double Targeted_catchability = par[1] * CatchabilityScalingFactor;
  double Nontargeted_catchability = par[2] * CatchabilityScalingFactor;

  // Initialise the vector of biomass
  Biomass[0] = par[4] *  BiomassScalingFactor;
  Biomass[1] = par[5] *  BiomassScalingFactor;

  // von mises parameters
  double vm_mean = par[6]; // make sure it varies between -M_PI and +M_PI
  double vm_sigma = par[7]; // should be positive

  // Calculate survival given the vector of effort
  for(unsigned int i=0; i < max_timestep; i += 1) {
    survival[i] = exp(-(M + Targeted_catchability * TargetedEffort[i] + Nontargeted_catchability * NontargetedEffort[i]));
  }

  // Calculate the proportion of recruitment in each week 
  std::vector<double> RecDist(NIPY, 0.0);
  RecDist = vonMisesRecDist(vm_mean, vm_sigma);
  
  // Create the vector of recruitment
    for(unsigned int counter = 0; counter < max_timestep; counter++){
      Rec[counter] = par[8 + counter / NIPY] * RecruitmentScalingFactor * RecDist[counter % NIPY];
    }

  // Example how to print the vector of parameters
  //std::cout << "This is par[0] " << par[0] << "\n";
  //std::cout << "This is par[1] " << par[1] << "\n";
  //std::cout << "Number of parameters " << par.size() << "\n";

  // Recursive calculation of biomass
  for(unsigned int counter = 2; counter < max_timestep; counter++){

    // calculate biomass
    Biomass[counter] = survival[counter-1] * Biomass[counter-1] + rho * survival[counter-1] * Biomass[counter-1] - rho * survival[counter-1] *survival[counter -2] * Biomass[counter-2] - rho * survival[counter-1] * wk_1 *  Rec[counter-1] + wk * Rec[counter]; 

    if(Biomass[counter] < 0){Biomass[counter] = 0;} 
  }
}
示例#10
0
BOOL PrintComponent::ExportImagesetting(BaseCamelotFilter *pFilter)
{
	BOOL ok = TRUE;

#if !defined(EXCLUDE_FROM_RALPH)

	TypesetInfo *TInfo = GetPrintControl()->GetTypesetInfo();
	if (TInfo == NULL)
		return(TRUE);		// If we can't find imagesetting info, don't sweat it

	CXaraFileRecord Rec(TAG_IMAGESETTING, TAG_IMAGESETTING_SIZE);
	if (ok)  ok = Rec.Init();

	if (ok)  ok = Rec.WriteINT32(TInfo->GetPrintResolution());
	if (ok)  ok = Rec.WriteDOUBLE(TInfo->GetDefaultScreenFrequency());

	if (ok)
	{
		UINT16 Func = 0;
		switch(TInfo->GetScreenFunction())
		{
			case SCRTYPE_SPOT1:			Func = 1;	break;
			case SCRTYPE_SPOT2:			Func = 2;	break;
			case SCRTYPE_TRIPLESPOT1:	Func = 3;	break;
			case SCRTYPE_TRIPLESPOT2:	Func = 4;	break;
			case SCRTYPE_ELLIPTICAL:	Func = 5;	break;
			case SCRTYPE_LINE:			Func = 6;	break;
			case SCRTYPE_CROSSHATCH:	Func = 7;	break;
			case SCRTYPE_MEZZOTINT:		Func = 8;	break;
			case SCRTYPE_SQUARE:		Func = 9;	break;
			case SCRTYPE_DITHER:		Func = 10;	break;
			default:
				break;
		}
		ok = Rec.WriteUINT16(Func);
	}

	if (ok)
	{
	  	BYTE Flags = 0x00;
		if (TInfo->AreSeparating())			Flags |= 0x01;
		if (TInfo->AreScreening())			Flags |= 0x02;
		if (TInfo->PrintEmulsionDown())		Flags |= 0x04;
		if (TInfo->PrintPhotoNegative())	Flags |= 0x08;
		if (TInfo->AlwaysOverprintBlack())	Flags |= 0x10;

		ok = Rec.WriteBYTE(Flags);
	}

	if (ok)
		pFilter->Write(&Rec);

#endif // EXCLUDE_FROM_RALPH
	return(ok);
}
示例#11
0
bool XARGenerator::OutputHeader()
{
	bool ok = true;

	// Create a CXaraFileRecord object for the document header record
	CXaraFileRecord Rec(TAG_FILEHEADER);
	ok = Rec.Init();
	if (ok) ok = Rec.WriteBuffer((BYTE*)"CXN", 3);
	if (ok) ok = Rec.WriteUINT32(123);				// File size
	if (ok) ok = Rec.WriteUINT32(0);				// Native/Web link ID
	if (ok) ok = Rec.WriteUINT32(0);				// Precompression flags
	if (ok) ok = Rec.WriteASCII(_T("SVGFilter"));	// Producer
	if (ok) ok = Rec.WriteASCII(VERSION_TSTRING);	// Producer version
	if (ok) ok = Rec.WriteASCII(_T(""));			// Producer build
	if (ok) ok = m_pExporter->WriteRecord(&Rec);

	// If any part of the header writing fails then return our own specific error
	if (!ok)
	{
		// XXX Set an appropriate error here
		return false;
	}

	// XXX From this point on the error handling becomes a bit thin

	ok = m_pExporter->WriteZeroSizedRecord(TAG_SPREAD);
	/***/ ok = m_pExporter->WriteZeroSizedRecord(TAG_DOWN);

	if (m_docSize != DocCoord(0, 0)) {
		ok = Rec.Reinit(TAG_SPREADINFORMATION, TAG_SPREADINFORMATION_SIZE);
		ok = Rec.WriteUINT32(m_docSize.x);		// width
		ok = Rec.WriteUINT32(m_docSize.y);		// height
		ok = Rec.WriteUINT32(10000);			// margin
		ok = Rec.WriteUINT32(0);				// bleed
		ok = Rec.WriteBYTE(2);					// flags (1:shadow)
		ok = m_pExporter->WriteRecord(&Rec);
	}

	ok = Rec.Reinit(TAG_VIEWPORT, TAG_VIEWPORT_SIZE);
	ok = Rec.WriteCoord(DocCoord(0, 0));		// bottom-left
	ok = Rec.WriteCoord(DocCoord(m_docSize.x, m_docSize.y));// top-right
	ok = m_pExporter->WriteRecord(&Rec);

	// Write a layer
	ok = m_pExporter->WriteZeroSizedRecord(TAG_LAYER);
	/***/ ok = m_pExporter->WriteZeroSizedRecord(TAG_DOWN);

	ok = Rec.Reinit(TAG_LAYERDETAILS, TAG_LAYERDETAILS_SIZE);
	ok = Rec.WriteBYTE(1|4|8);					// flags (0:visible, 2:printable, 3:active)
	ok = Rec.WriteUnicode(_T("Layer 1"));
	ok = m_pExporter->WriteRecord(&Rec);

	return ok;
}
示例#12
0
bool C4Record::Rec(C4PacketType eCtrlType, C4ControlPacket *pCtrl, int iFrame) {
  if (!fRecording) return false;
  // create copy
  C4IDPacket Pkt = C4IDPacket(eCtrlType, pCtrl, false);
  if (!Pkt.getPkt()) return false;
  C4ControlPacket *pCtrlCpy = static_cast<C4ControlPacket *>(Pkt.getPkt());
  // prepare for recording
  pCtrlCpy->PreRec(this);
  // record it
  return Rec(iFrame, DecompileToBuf<StdCompilerBinWrite>(Pkt), RCT_CtrlPkt);
}
示例#13
0
bool C4Record::Rec(const C4Control &Ctrl, int iFrame) {
  if (!fRecording) return false;
  // don't record empty control
  if (!Ctrl.firstPkt()) return true;
  // create copy
  C4Control Cpy;
  Cpy.Copy(Ctrl);
  // prepare it for record
  Cpy.PreRec(this);
  // record it
  return Rec(iFrame, DecompileToBuf<StdCompilerBinWrite>(Cpy), RCT_Ctrl);
}
示例#14
0
BOOL PrintComponent::ExportColourPlate(BaseCamelotFilter *pFilter, ColourPlate *pPlate)
{
	ERROR3IF(pPlate == NULL, "Illegal NULL params");

	BOOL ok = TRUE;
#if !defined(EXCLUDE_FROM_RALPH)

	// --- Save any referenced spot colour
	IndexedColour *pCol = pPlate->GetSpotColour();
	INT32 SpotRecordNumber = 0;
	if (pCol != NULL)
	{
		DocColour Fred;
		Fred.MakeRefToIndexedColour(pCol);
		SpotRecordNumber = pFilter->WriteRecord(&Fred);
		ok = (SpotRecordNumber > 0);
	}

	// -- Now save the ColourPlate
	CXaraFileRecord Rec(TAG_COLOURPLATE, TAG_COLOURPLATE_SIZE);
	if (ok)  ok = Rec.Init();

	BYTE Type = 0;
	switch(pPlate->GetType())
	{
		case COLOURPLATE_CYAN:		Type = 1; break;
		case COLOURPLATE_MAGENTA:	Type = 2; break;
		case COLOURPLATE_YELLOW:	Type = 3; break;
		case COLOURPLATE_KEY:		Type = 4; break;
		case COLOURPLATE_SPOT:		Type = 5; break;
		default:
			break;
	}
																	//	Size	Total
	if (ok)  ok = Rec.WriteBYTE(Type);								//	1		1
	if (ok)  ok = Rec.WriteReference(SpotRecordNumber);				//	4		5

	double temp = pPlate->GetScreenAngle();
	if (ok)  ok = Rec.WriteDOUBLE(temp);							//	8		13
	temp = pPlate->GetScreenFrequency();
	if (ok)  ok = Rec.WriteDOUBLE(temp);							//	8		21
																	//
	BYTE Flags = 0x00;												//	1		22
	if (!pPlate->IsDisabled())		Flags |= 0x01;
	if (pPlate->Overprints())		Flags |= 0x02;
	if (ok)  ok = Rec.WriteBYTE(Flags);

	if (ok)
		pFilter->Write(&Rec);

#endif // EXCLUDE_FROM_RALPH
	return(ok);
}
示例#15
0
BOOL CXaraFileRectangle::WriteRectangleSimple(BaseCamelotFilter * pFilter, NodeRegularShape * pShape)
{
	BOOL ok;

	CamelotFileRecord Rec(pFilter,TAG_RECTANGLE_SIMPLE, TAG_RECTANGLE_SIMPLE_SIZE);

	ok = Rec.Init();
	if (ok) ok = Rec.WriteCoord(GetCentrePoint(pShape));
	if (ok) ok = Rec.WriteINT32(GetWidth(pShape));
	if (ok) ok = Rec.WriteINT32(GetHeight(pShape));
	if (ok) ok = pFilter->Write(&Rec);

	return ok;
}
示例#16
0
BOOL CXaraFileRectangle::WriteRectangleComplex(BaseCamelotFilter * pFilter, NodeRegularShape * pShape)
{
	BOOL ok;

	CamelotFileRecord Rec(pFilter,TAG_RECTANGLE_COMPLEX, TAG_RECTANGLE_COMPLEX_SIZE);

	ok = Rec.Init();
	if (ok) ok = Rec.WriteCoord(GetCentrePoint(pShape));
	if (ok) ok = Rec.WriteCoordTrans(GetMajorAxis(pShape),0,0);
	if (ok) ok = Rec.WriteCoordTrans(GetMinorAxis(pShape),0,0);
	if (ok) ok = pFilter->Write(&Rec);

	return ok;
}
示例#17
0
/********************************************************************************************

>	virtual BOOL TemplateAttribute::WritePreChildrenWeb(BaseCamelotFilter* pFilter)

 	Author:		Colin_Barfoot (Xara Group Ltd) <*****@*****.**>
	Created:	27/06/97

	Purpose:	Writes the TemplateAttribute to the filter

	Inputs:		pFilter = ptr to the filter
	Returns:	TRUE if record is written, FALSE if not

********************************************************************************************/
BOOL TemplateAttribute::WritePreChildrenWeb(BaseCamelotFilter* pFilter)
{
#ifdef DO_EXPORT
	ERROR2IF(pFilter == NULL,FALSE,"NULL filter param");

	// Add a description of the TAG_WIZOP record for older importers
	pFilter->AddTagDescription(TAG_WIZOP, _R(IDS_TAG_WIZOP));

	CamelotFileRecord Rec(pFilter, TAG_WIZOP, CXF_UNKNOWN_SIZE);

	BOOL ok = Rec.Init();

	if (ok)
	{
		String_64 InternalName = GetInternalName();
		ok = Rec.WriteUnicode((TCHAR*)InternalName);
	}
	if (ok)
	{
		String_256 Question = GetQuestion();
		ok = Rec.WriteUnicode((TCHAR*)Question);
	}
	if (ok)
	{
		String_64 Param = GetParam();
		ok = Rec.WriteUnicode((TCHAR*)Param);
	}
	if (ok)
	{
		// Write out some patch space
		String_8 NonConstNullString = NullString;
		ok = Rec.WriteUnicode((TCHAR*)NonConstNullString);
	}

	if (ok)
	{
		ok = pFilter->Write(&Rec);
	}

	if (!ok)
	{
		pFilter->GotError(_R(IDE_FILE_WRITE_ERROR));
	}

	return ok;
#else
	return FALSE;
#endif
}
示例#18
0
BOOL CXaraFileRectangle::WriteRectangleComplexReformed(BaseCamelotFilter * pFilter, NodeRegularShape * pShape)
{
	BOOL ok;

	CamelotFileRecord Rec(pFilter,TAG_RECTANGLE_COMPLEX_REFORMED, TAG_RECTANGLE_COMPLEX_REFORMED_SIZE);

	ok = Rec.Init();
	if (ok) ok = Rec.WriteCoordTrans(GetUTMajorAxis(pShape),0,0);
	if (ok) ok = Rec.WriteCoordTrans(GetUTMinorAxis(pShape),0,0);
	if (ok) ok = Rec.WriteMatrix(GetTransformMatrix(pShape));
	if (ok) ok = Rec.WritePath(GetEdgePath(pShape));
	if (ok) ok = pFilter->Write(&Rec);

	return ok;
}
示例#19
0
BOOL CXaraFilePolygon::WritePolygonComplex(BaseCamelotFilter * pFilter, NodeRegularShape * pShape)
{
	BOOL ok;

	CamelotFileRecord Rec(pFilter,TAG_POLYGON_COMPLEX, TAG_POLYGON_COMPLEX_SIZE);

	ok = Rec.Init();
	if (ok) ok = Rec.WriteUINT16(GetNumberOfSides(pShape));
	if (ok) ok = Rec.WriteCoord(GetCentrePoint(pShape));
	if (ok) ok = Rec.WriteCoordTrans(GetMajorAxis(pShape),0,0);
	if (ok) ok = Rec.WriteCoordTrans(GetMinorAxis(pShape),0,0);
	if (ok) ok = pFilter->Write(&Rec);

	return ok;
}
示例#20
0
bool XARGenerator::OutputUprightRect(const RectD& r, double fRoundAxis)
{
	// no rotation or skew was applied
	double fX = r.p11.x;
	double fY = r.p11.y;
	double fWidth = r.p12.x - r.p11.x;
	double fHeight = r.p21.y - r.p11.y;

	// adjust coordinates
	fX += fWidth/2.0;
	fY = m_docSize.y - fY - fHeight/2.0;

	// determine circumscribed ellipse axes
	fWidth *= M_SQRT2;
	fHeight *= M_SQRT2;

	// truncate floating point values to INT32
	DocCoord dcPos((INT32)fX, (INT32)fY);
	DocCoord dcSize((INT32)fWidth, (INT32)fHeight);

	bool ok = true;
	CXaraFileRecord Rec(0);
	if (fRoundAxis == 0.0) {
		// non-rounded rectangle
#if SVGDEBUG
		svgtrace(DBGTRACE_SHAPES, "translated upright rect: x=%d y=%d w=%d h=%d\n", dcPos.x, dcPos.y, dcSize.x, dcSize.y);
#endif
		Rec.Reinit(TAG_RECTANGLE_SIMPLE, TAG_RECTANGLE_SIMPLE_SIZE);
		ok = Rec.WriteCoord(dcPos);
		ok = Rec.WriteINT32(dcSize.x);
		ok = Rec.WriteINT32(dcSize.y);
		ok = m_pExporter->WriteRecord(&Rec);
	} else {
		// rounded rectangle
		double fRound = (fRoundAxis*2.0) / dcSize.x;
#if SVGDEBUG
		svgtrace(DBGTRACE_SHAPES, "translated upright rounded rect: x=%d y=%d w=%d h=%d f=%.2f\n", dcPos.x, dcPos.y, dcSize.x, dcSize.y, fRound);
#endif
		Rec.Reinit(TAG_RECTANGLE_SIMPLE_ROUNDED, TAG_RECTANGLE_SIMPLE_ROUNDED_SIZE);
		ok = Rec.WriteCoord(dcPos);
		ok = Rec.WriteINT32(dcSize.x);
		ok = Rec.WriteINT32(dcSize.y);
		ok = Rec.WriteDOUBLE(fRound);
		ok = m_pExporter->WriteRecord(&Rec);
	}

	return ok;
}
示例#21
0
bool XARGenerator::OutputOpacity(double fOpacity)
{
	bool ok = true;
	CXaraFileRecord Rec(0);

	if (fOpacity < 1.0) {
		BYTE bOpacity = (BYTE)((1.0-fOpacity)*255.0);

		Rec.Reinit(TAG_FLATTRANSPARENTFILL, TAG_FLATTRANSPARENTFILL_SIZE);
		ok = Rec.WriteBYTE(bOpacity);
		ok = Rec.WriteBYTE(0x01); // mix
		ok = m_pExporter->WriteRecord(&Rec);
	}

	return ok;
}
示例#22
0
BOOL CXaraFileRectangle::WriteRectangleComplexStellated(BaseCamelotFilter * pFilter, NodeRegularShape * pShape)
{
	BOOL ok;

	CamelotFileRecord Rec(pFilter,TAG_RECTANGLE_COMPLEX_STELLATED, TAG_RECTANGLE_COMPLEX_STELLATED_SIZE);

	ok = Rec.Init();
	if (ok) ok = Rec.WriteCoord(GetCentrePoint(pShape));
	if (ok) ok = Rec.WriteCoordTrans(GetMajorAxis(pShape),0,0);
	if (ok) ok = Rec.WriteCoordTrans(GetMinorAxis(pShape),0,0);
	if (ok) ok = Rec.WriteDOUBLE(GetStellationRadius(pShape));
	if (ok) ok = Rec.WriteDOUBLE(GetStellationOffset(pShape));
	if (ok) ok = pFilter->Write(&Rec);

	return ok;
}
示例#23
0
BOOL CXaraFileRectangle::WriteRectangleSimpleRoundedReformed(BaseCamelotFilter * pFilter, NodeRegularShape * pShape)
{
	BOOL ok;

	CamelotFileRecord Rec(pFilter,TAG_RECTANGLE_SIMPLE_ROUNDED_REFORMED, TAG_RECTANGLE_SIMPLE_ROUNDED_REFORMED_SIZE);

	ok = Rec.Init();
	if (ok) ok = Rec.WriteCoord(GetCentrePoint(pShape));
	if (ok) ok = Rec.WriteINT32(GetWidth(pShape));
	if (ok) ok = Rec.WriteINT32(GetHeight(pShape));
	if (ok) ok = Rec.WriteDOUBLE(GetCurvature(pShape));
	if (ok) ok = Rec.WritePath(GetEdgePath(pShape));
	if (ok) ok = pFilter->Write(&Rec);

	return ok;
}
示例#24
0
BOOL CXaraFileRectangle::WriteRectangleSimpleStellated(BaseCamelotFilter * pFilter, NodeRegularShape * pShape)
{
	BOOL ok;

	CamelotFileRecord Rec(pFilter,TAG_RECTANGLE_SIMPLE_STELLATED, TAG_RECTANGLE_SIMPLE_STELLATED_SIZE);

	ok = Rec.Init();
	if (ok) ok = Rec.WriteCoord(GetCentrePoint(pShape));
	if (ok) ok = Rec.WriteINT32(GetWidth(pShape));
	if (ok) ok = Rec.WriteINT32(GetHeight(pShape));
	if (ok) ok = Rec.WriteDOUBLE(GetStellationRadius(pShape));
	if (ok) ok = Rec.WriteDOUBLE(GetStellationOffset(pShape));
	if (ok) ok = pFilter->Write(&Rec);

	return ok;
}
示例#25
0
BOOL CXaraFilePolygon::WritePolygonComplexReformed(BaseCamelotFilter * pFilter, NodeRegularShape * pShape)
{
	BOOL ok;

	CamelotFileRecord Rec(pFilter,TAG_POLYGON_COMPLEX_REFORMED, TAG_POLYGON_COMPLEX_REFORMED_SIZE);

	ok = Rec.Init();
	if (ok) ok = Rec.WriteUINT16(GetNumberOfSides(pShape));
	if (ok) ok = Rec.WriteCoordTrans(GetUTMajorAxis(pShape),0,0);
	if (ok) ok = Rec.WriteCoordTrans(GetUTMinorAxis(pShape),0,0);
	if (ok) ok = Rec.WriteMatrix(GetTransformMatrix(pShape));
	if (ok) ok = Rec.WritePath(GetEdgePath(pShape));
	if (ok) ok = pFilter->Write(&Rec);

	return ok;
}
示例#26
0
BOOL Chapter::WritePreChildrenNative(BaseCamelotFilter* pFilter)
{
#ifdef DO_EXPORT
	BOOL RecordWritten = FALSE;

	// Always write out the spread record in native files
	CXaraFileRecord Rec(TAG_CHAPTER,TAG_CHAPTER_SIZE);
	if (pFilter->Write(&Rec) != 0)
		RecordWritten = TRUE;
	else
		pFilter->GotError(_R(IDE_FILE_WRITE_ERROR));

	return RecordWritten;
#else
	return FALSE;
#endif
}
示例#27
0
/********************************************************************************************

>	virtual BOOL StyleReferenceAttribute::WritePreChildrenWeb(BaseCamelotFilter* pFilter)

	Author:		Colin_Barfoot (Xara Group Ltd) <*****@*****.**>
	Created:	09/06/97

	Purpose:	Writes this StyleReferenceAttribute via the given filter.

	Inputs:		pFilter:   The filter to use

	Returns:	FALSE if it failed

	Notes:		this StyleReferenceAttribute attempts to write the referenced style out
				first.

********************************************************************************************/
BOOL StyleReferenceAttribute::WritePreChildrenWeb(BaseCamelotFilter* pFilter)
{
#ifdef DO_EXPORT
	ENSURE_NOT_NULL(Value.m_pStyle);

	ERROR2IF(pFilter == NULL,FALSE,"NULL filter param");

	// Must write out the style first
	ENSURE_KIND(Value.m_pStyle, WizOpStyle);
	const WizOpStyle& ActualStyle = (WizOpStyle&)*Value.m_pStyle;

	WizOpStyles* const pStyles = GetStylesForFilter(*pFilter);
	BOOL Ok = (pStyles != NULL);

	XFileRef RecordRef = 0;
	if (Ok)
	{
		RecordRef = pStyles->GetRecordRefForStyle(ActualStyle);

		// Is the style reference ok?
		Ok = (RecordRef != 0);
	}

	if (Ok)
	{
		// Add a description of the TAG_WIZOP_STYLEREF record for older importers
		pFilter->AddTagDescription(TAG_WIZOP_STYLEREF, _R(IDS_TAG_WIZOP_STYLEREF));
	}

	if (Ok)
	{
		CamelotFileRecord Rec(pFilter, TAG_WIZOP_STYLEREF, TAG_WIZOP_STYLEREF_SIZE);

		if (Ok) Ok = Rec.Init();
		if (Ok) Ok = Rec.WriteReference(RecordRef);
		if (Ok) Ok = pFilter->Write(&Rec);
	}

	if (!Ok)
		pFilter->GotError(_R(IDE_FILE_WRITE_ERROR));

	return Ok;
#else
	return FALSE;
#endif
}
示例#28
0
BOOL UnitListComponent::ExportDefaultDisplayUnits(BaseCamelotFilter *pFilter)
{
#ifdef DO_EXPORT
	ERROR2IF(pDocUnitList == NULL,FALSE,"UnitListComponent::ExportDisplayDefaultUnits called with no doc unit list pointer");

	// Get the current default settings
	UnitType PageUnits   = pDocUnitList->GetPageUnits();	// The units used to display page measurements
	//UnitType ScaledUnits = pDocUnitList->GetScaleUnits();	// The units to display scaled measurements
	UnitType FontUnits   = pDocUnitList->GetFontUnits();	// The units to display font measurements

	// Convert these into the export unit types
	//INT32 ExportPageUnits = GetExportUnitType(PageUnits);
	//INT32 ExportFontUnits = GetExportUnitType(FontUnits);
	INT32 ExportPageUnits = GetWriteUnitReference(PageUnits, pFilter);
	ERROR2IF(ExportPageUnits == 0,FALSE,"UnitListComponent::ExportDisplayDefaultUnits bad page units reference!");
	INT32 ExportFontUnits = GetWriteUnitReference(FontUnits, pFilter);
	ERROR2IF(ExportFontUnits == 0,FALSE,"UnitListComponent::ExportDisplayDefaultUnits bad font units reference!");

	BOOL ok = TRUE;

	if (ExportPageUnits !=0 && ExportFontUnits != 0)
	{
			CXaraFileRecord Rec(TAG_DEFINE_DEFAULTUNITS, TAG_DEFINE_DEFAULTUNITS_SIZE);
			ok = Rec.Init();

			if (ok) ok = Rec.WriteINT32(ExportPageUnits);
			if (ok) ok = Rec.WriteINT32(ExportFontUnits);

			// Finally, write the record out to file
			// In the process get the record number that this was written out as
			INT32 RecordNumber = 0L;
			if (ok) RecordNumber = pFilter->Write(&Rec);	// Get the document comment

			// If we have had a problem at any of the stages then return that to the caller
			if (RecordNumber <= 0)
				ok = FALSE;
	}
	else
		ERROR3("Bad conversion of default font or page units");

	return ok;
#else
	return TRUE;
#endif
}
示例#29
0
BOOL CXaraFileRectangle::WriteRectangleComplexStellatedReformed(BaseCamelotFilter * pFilter, NodeRegularShape * pShape)
{
	BOOL ok;

	CamelotFileRecord Rec(pFilter,TAG_RECTANGLE_COMPLEX_STELLATED_REFORMED, TAG_RECTANGLE_COMPLEX_STELLATED_REFORMED_SIZE);

	ok = Rec.Init();
	if (ok) ok = Rec.WriteCoordTrans(GetUTMajorAxis(pShape),0,0);
	if (ok) ok = Rec.WriteCoordTrans(GetUTMinorAxis(pShape),0,0);
	if (ok) ok = Rec.WriteMatrix(GetTransformMatrix(pShape));
	if (ok) ok = Rec.WriteDOUBLE(GetStellationRadius(pShape));
	if (ok) ok = Rec.WriteDOUBLE(GetStellationOffset(pShape));
	if (ok) ok = Rec.WritePath(GetPrimaryEdgePath(pShape));
	if (ok) ok = Rec.WritePath(GetSecondaryEdgePath(pShape));
	if (ok) ok = pFilter->Write(&Rec);

	return ok;
}
示例#30
0
BOOL CXaraFilePolygon::WritePolygonComplexRoundedStellated(BaseCamelotFilter * pFilter, NodeRegularShape * pShape)
{
	BOOL ok;

	CamelotFileRecord Rec(pFilter,TAG_POLYGON_COMPLEX_ROUNDED_STELLATED, TAG_POLYGON_COMPLEX_ROUNDED_STELLATED_SIZE);

	ok = Rec.Init();
	if (ok) ok = Rec.WriteUINT16(GetNumberOfSides(pShape));
	if (ok) ok = Rec.WriteCoord(GetCentrePoint(pShape));
	if (ok) ok = Rec.WriteCoordTrans(GetMajorAxis(pShape),0,0);
	if (ok) ok = Rec.WriteCoordTrans(GetMinorAxis(pShape),0,0);
	if (ok) ok = Rec.WriteDOUBLE(GetStellationRadius(pShape));
	if (ok) ok = Rec.WriteDOUBLE(GetStellationOffset(pShape));
	if (ok) ok = Rec.WriteDOUBLE(GetPrimaryCurvature(pShape));
	if (ok) ok = Rec.WriteDOUBLE(GetSecondaryCurvature(pShape));
	if (ok) ok = pFilter->Write(&Rec);

	return ok;
}