Starting out on a \p drawing editor

Originally committed to SVN as r525.
This commit is contained in:
Niels Martin Hansen 2006-08-23 22:34:37 +00:00
parent 3c1936cf49
commit da0da02ac0
3 changed files with 235 additions and 0 deletions

71
p-designer/ass_drawing.h Normal file
View File

@ -0,0 +1,71 @@
// Copyright (c) 2006, Niels Martin Hansen
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
// * Neither the name of the Aegisub Group nor the names of its contributors
// may be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
#pragma once
#ifndef _ASS_DRAWING_H
#define _ASS_DRAWING_H
#include <vector>
#include <pair>
#include <wx/string.h>
enum AssDrawingSegmentType {
SEGMENT_MOVE, // m <x> <y>
SEGMENT_MOVE_NOCLOSE, // n <x> <y>
SEGMENT_LINE, // l <x> <y>
SEGMENT_BEZIER, // b <x1> <y1> <x2> <y2> <x3> <y3>
SEGMENT_SPLINE, // s <x1> <y2> <x2> <y2> <x3> <y3> [... <xN> <yN>]
SEGMENT_SPLINE_EXTEND, // p <x> <y>
SEGMENT_SPLINE_CLOSE, // c
// thought: maybe join the three last into one?
};
struct AssDrawingPoint {
int x, y;
};
struct AssDrawingSegment {
AssDrawingSegmentType type;
std::vector<AssDrawingPoint> points;
};
struct AssDrawing {
int scale;
std::vector<AssDrawingSegment> data;
wxString ToString(); // stupid conversion to string, doesn't try to shorten things out
int FromString(wxString &src); // returns 0 on success, index+1 of offending character on fail
void Collapse(); // try to join as many segments together as possible, without affecting the actual shape (eg. join "l 1 2 l 3 4" into "l 1 2 3 4")
void Expand(); // split into as many segments as possible, without creating any meaningless ones, such as null-moves (ie. expand "l 1 2 3 4" into "l 1 2 l 3 4")
void Rescale(int new_scale); // change the scale value, stretching the drawing to match the new one
void Stretch(float factor); // up/down scale the drawing by a factor
};
#endif

View File

@ -0,0 +1,135 @@
<?xml version="1.0" encoding="shift_jis"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="p-designer"
ProjectGUID="{4FB7425E-8EDF-4107-87BE-3BB05A3B78B5}"
Keyword="Win32Proj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="Debug"
IntermediateDirectory="Debug"
ConfigurationType="1"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="TRUE"
BasicRuntimeChecks="3"
RuntimeLibrary="5"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)/p-designer.exe"
LinkIncremental="2"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile="$(OutDir)/p-designer.pdb"
SubSystem="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="Release"
IntermediateDirectory="Release"
ConfigurationType="1"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
RuntimeLibrary="4"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)/p-designer.exe"
LinkIncremental="1"
GenerateDebugInformation="TRUE"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
<File
RelativePath=".\ass_drawing.h">
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
</Filter>
<File
RelativePath=".\readme.txt">
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

29
p-designer/readme.txt Normal file
View File

@ -0,0 +1,29 @@
This is a drawing designer, or is intended to become one.
The name p-designer obviously comes from the tag, \p.
Intended roadmap:
1. Create datastructures to store drawing in
2. Write something to parse \p strings into those datastructures
3. Render some kind of basic outline of the figure in a way
(is easy in Win32 and probably also wx)
4. Generate \p strings from the datastructures
5. Add draggable handles to the preview display
6. Add something to add further segments to a drawing
7. ???
Other stuff / wishlist:
* It should be possible to somehow split a segment into two, eg. click
somewhere on a bezier and split it into two there. Same for lines etc.
* How about moves? ('m' command)
- Maybe render as a dotted or dashed line between points
* Zoom ability
* Feature to convert between scales (number after \p)
* Stretch?
* Integrate into Aegisub video preview
* Maybe import outlines of one or more characters from a font to modify?
(At least is possible with Win32 and Freetype2.)
* Convert segments between different types
Things to check:
* What happens when a drawing doesn't start with an 'm' command?