From 4debde66355040a20cd5858dd68d00038ea29e35 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Sun, 24 Jul 2011 14:14:39 +0200 Subject: [PATCH 01/12] Simba: Update ISS Install files. --- Install/windows/Setup.iss | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Install/windows/Setup.iss b/Install/windows/Setup.iss index 105338a..3318fa5 100644 --- a/Install/windows/Setup.iss +++ b/Install/windows/Setup.iss @@ -8,9 +8,9 @@ AppId={{524C9B9A-B57F-4FEC-89BE-292202EBA44D} AppName=Simba AppVerName=Simba 0.97 -AppPublisherURL=http://simba.villavu.com/ -AppSupportURL=http://simba.villavu.com/ -AppUpdatesURL=http://simba.villavu.com/ +AppPublisherURL=http://wizzup.org/simba +AppSupportURL=http://wizzup.org/simba +AppUpdatesURL=http://wizzup.org/simba DefaultDirName={sd}\Simba DefaultGroupName=Simba OutputDir=C:\simba\Install\windows\ @@ -43,8 +43,8 @@ Source: "C:\Simba\Extensions\paster.sex"; DestDir: "{app}\Extensions"; Flags: ig Source: "C:\Simba\Extensions\CRov.sex"; DestDir: "{app}\Extensions"; Flags: ignoreversion Source: "C:\Simba\Extensions\Updater.sei"; DestDir: "{app}\Extensions"; Flags: ignoreversion Source: "C:\Simba\Includes\mml.simba"; DestDir: "{app}\Includes"; Flags: ignoreversion -Source: "C:\Simba\Fonts\*"; DestDir: "{app}\Fonts"; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "C:\Simba\Tests\PS\*"; DestDir:"{app}\Scripts\Tests"; Flags: ignoreversion +; Source: "C:\Simba\Fonts\*"; DestDir: "{app}\Fonts"; Flags: ignoreversion recursesubdirs createallsubdirs +; Source: "C:\Simba\Tests\PS\*"; DestDir:"{app}\Scripts\Tests"; Flags: ignoreversion ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] From a8cdf77d878cccfeed2ca6f9102b89f1bd54c9fb Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Sun, 24 Jul 2011 18:30:58 +0200 Subject: [PATCH 02/12] Documentation: New Makefile + conf.py. Allows for more targets, like manpages. :-) --- Doc/sphinx/Makefile | 67 +++++++++++++++++++++++------ Doc/sphinx/conf.py | 100 +++++++++++++++++++++++++++++++++++--------- 2 files changed, 135 insertions(+), 32 deletions(-) diff --git a/Doc/sphinx/Makefile b/Doc/sphinx/Makefile index ebf4804..c3d02a7 100644 --- a/Doc/sphinx/Makefile +++ b/Doc/sphinx/Makefile @@ -12,20 +12,26 @@ PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest help: @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: -rm -rf $(BUILDDIR)/* @@ -40,6 +46,11 @@ dirhtml: @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @@ -65,12 +76,42 @@ qthelp: @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Simba.qhc" +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/Simba" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Simba" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ - "run these through (pdf)latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + make -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes diff --git a/Doc/sphinx/conf.py b/Doc/sphinx/conf.py index a19d61b..08ed666 100644 --- a/Doc/sphinx/conf.py +++ b/Doc/sphinx/conf.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # Simba documentation build configuration file, created by -# sphinx-quickstart on Wed Jun 9 23:55:23 2010. +# sphinx-quickstart on Sun Jul 24 18:24:27 2011. # # This file is execfile()d with the current directory set to its containing dir. # @@ -16,16 +16,19 @@ import sys, os # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.append(os.path.abspath('.')) - +#sys.path.insert(0, os.path.abspath('.')) sys.path.append(os.path.abspath('../../Projects/libmml/pymml/mml')) sys.path.append(os.path.abspath('../../Projects/libmml/pymml')) + # -- General configuration ----------------------------------------------------- +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.autodoc'] +extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -34,14 +37,14 @@ templates_path = ['_templates'] source_suffix = '.rst' # The encoding of source files. -#source_encoding = 'utf-8' +#source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'Simba' -copyright = u'2010, Merlijn Wajer, Raymond van Venetie' +copyright = u'2011, Merlijn Wajer, Raymond van Venetie' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -62,12 +65,9 @@ release = '0.97' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' -# List of documents that shouldn't be included in the build. -#unused_docs = [] - -# List of directories, relative to source directory, that shouldn't be searched -# for source files. -exclude_trees = ['_build'] +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None @@ -92,8 +92,8 @@ pygments_style = 'sphinx' # -- Options for HTML output --------------------------------------------------- -# The theme to use for HTML and HTML Help pages. Major themes that come with -# Sphinx are currently 'default' and 'sphinxdoc'. +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. html_theme = 'nature' # Theme options are theme-specific and customize the look and feel of a theme @@ -141,7 +141,7 @@ html_static_path = ['_static'] #html_additional_pages = {} # If false, no module index is generated. -#html_use_modindex = True +#html_domain_indices = True # If false, no index is generated. #html_use_index = True @@ -152,13 +152,19 @@ html_static_path = ['_static'] # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' -# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = '' +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'Simbadoc' @@ -176,7 +182,7 @@ htmlhelp_basename = 'Simbadoc' # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'Simba.tex', u'Simba Documentation', - u'Merlijn Wajer, Raymond van Venetiƫ, Nielsie95', 'manual'), + u'Merlijn Wajer, Raymond van Venetie', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of @@ -187,6 +193,12 @@ latex_documents = [ # not chapters. #latex_use_parts = False +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + # Additional stuff for the LaTeX preamble. #latex_preamble = '' @@ -194,4 +206,54 @@ latex_documents = [ #latex_appendices = [] # If false, no module index is generated. -#latex_use_modindex = True +#latex_domain_indices = True + + +# -- Options for manual page output -------------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'simba', u'Simba Documentation', + [u'Merlijn Wajer, Raymond van Venetie'], 1) +] + + +# -- Options for Epub output --------------------------------------------------- + +# Bibliographic Dublin Core info. +epub_title = u'Simba' +epub_author = u'Merlijn Wajer, Raymond van Venetie' +epub_publisher = u'Merlijn Wajer, Raymond van Venetie' +epub_copyright = u'2011, Merlijn Wajer, Raymond van Venetie' + +# The language of the text. It defaults to the language option +# or en if the language is not set. +#epub_language = '' + +# The scheme of the identifier. Typical schemes are ISBN or URL. +#epub_scheme = '' + +# The unique identifier of the text. This can be a ISBN number +# or the project homepage. +#epub_identifier = '' + +# A unique identification for the text. +#epub_uid = '' + +# HTML files that should be inserted before the pages created by sphinx. +# The format is a list of tuples containing the path and title. +#epub_pre_files = [] + +# HTML files shat should be inserted after the pages created by sphinx. +# The format is a list of tuples containing the path and title. +#epub_post_files = [] + +# A list of files that should not be packed into the epub file. +#epub_exclude_files = [] + +# The depth of the table of contents in toc.ncx. +#epub_tocdepth = 3 + +# Allow duplicate toc entries. +#epub_tocdup = True From 31df8c695ac8e7e330ca8374b6a933cb4e7620a7 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Tue, 26 Jul 2011 19:30:41 +0200 Subject: [PATCH 03/12] Extensions/paster: Fix bug introduced by StrToInt. It now raises an exception, so use StrToIntDef instead. --- Extensions/paster.sex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Extensions/paster.sex b/Extensions/paster.sex index 8410032..54057dd 100644 --- a/Extensions/paster.sex +++ b/Extensions/paster.sex @@ -87,7 +87,7 @@ begin HOST := HOSTDef; if (InputQuery(GetName + ' ' + GetVersion + ' Extension', 'Which ID would you like to grab?', Data)) then begin - if IntToStr(StrToInt(Data)) = Data then + if IntToStr(StrToIntDef(Data, -1)) = Data then Data := '{"paste_id": ' + Data + '}' else Data := '{"paste_id": "' + Data + '"}'; From 303253aeed2f07bde7ff8a13ee3339fad279584d Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Tue, 26 Jul 2011 21:44:01 +0200 Subject: [PATCH 04/12] Simba: Attempt to fix include_once behaviour. --- Projects/Simba/Simba.inc | 2 ++ Units/MMLAddon/mmlpsthread.pas | 10 +++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Projects/Simba/Simba.inc b/Projects/Simba/Simba.inc index d8ec62b..ee530c9 100644 --- a/Projects/Simba/Simba.inc +++ b/Projects/Simba/Simba.inc @@ -26,6 +26,8 @@ // See Units/Linux/keybinder.pas {$ENDIF} +//{$DEFINE SIMBA_VERBOSE} // For more verbosity. + //{$DEFINE USE_RUTIS} //{$DEFINE USE_CPASCAL} // TODO diff --git a/Units/MMLAddon/mmlpsthread.pas b/Units/MMLAddon/mmlpsthread.pas index 0079dbd..292444c 100644 --- a/Units/MMLAddon/mmlpsthread.pas +++ b/Units/MMLAddon/mmlpsthread.pas @@ -746,11 +746,15 @@ begin if (path <> '') then if Includes.Find(path,i) then begin - psWriteln('Include_Once file already included'); - Result := False; + {$IFDEF SIMBA_VERBOSE} + psWriteln('Include_Once file already included:' + Path); + {$ENDIF} + Result := True; + Exit; end; + Includes.Add(path); - Result := True; + Result := False; end; procedure SIRegister_Mufasa(cl: TPSPascalCompiler); From 1fd51ff6b1fbb5ec73340e25195b47f57da277f3 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Tue, 26 Jul 2011 22:04:48 +0200 Subject: [PATCH 05/12] Simba: Define USE_EXTENSIONS by default. --- Projects/Simba/Simba.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Projects/Simba/Simba.inc b/Projects/Simba/Simba.inc index ee530c9..9273f5c 100644 --- a/Projects/Simba/Simba.inc +++ b/Projects/Simba/Simba.inc @@ -32,7 +32,7 @@ //{$DEFINE USE_CPASCAL} // TODO //{$DEFINE USE_LAPE} // TODO -//{$DEFINE USE_EXTENSIONS} +{$DEFINE USE_EXTENSIONS} //{$DEFINE USE_CODECOMPLETION} // TODO //{$DEFINE TERMINALWRITELN} // Only used once. Remove from SimbaUnit? From d199d11e68aa54afdf405c229220c8e7f8c2f84e Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Fri, 29 Jul 2011 12:36:39 +0200 Subject: [PATCH 06/12] Documentation: Small additions. --- Doc/sphinx/features/exten.rst | 12 ++++++++++-- Doc/sphinx/features/scriptmanager.rst | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Doc/sphinx/features/exten.rst b/Doc/sphinx/features/exten.rst index 861594f..8b2b18a 100644 --- a/Doc/sphinx/features/exten.rst +++ b/Doc/sphinx/features/exten.rst @@ -14,9 +14,17 @@ Recommended Simba Extensions ---------------------------- Recommended: - * SRL Updater (and Downloader) - * DTM Editor + + * Extension Updater (highly recommended) + * SRL Updater (and Installer/Download) * Associate Files + * Security extension. (Implements a File and Fire wall) + +For developers: + + * DTM Editor + * Paster Extension + * CRov, Crash Recovery. .. note:: You can also use the Reflection Updater (and Downloader) for updating diff --git a/Doc/sphinx/features/scriptmanager.rst b/Doc/sphinx/features/scriptmanager.rst index 774bacb..e574b01 100644 --- a/Doc/sphinx/features/scriptmanager.rst +++ b/Doc/sphinx/features/scriptmanager.rst @@ -1,5 +1,5 @@ Simba Script Manager ==================== -Community-created scripts will be available for download from the +Community-created scripts will be available for download from the Script Manager. The script manager will appear in release 1.0. From 73b2b9635d579605b59739f81dcdb54743d4f50c Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Thu, 28 Jul 2011 20:52:13 +0200 Subject: [PATCH 07/12] Lape: Update head. --- Units/lape | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Units/lape b/Units/lape index 1b8211d..940053e 160000 --- a/Units/lape +++ b/Units/lape @@ -1 +1 @@ -Subproject commit 1b8211db373428cd2916905980ad51be8fab1f83 +Subproject commit 940053e16d79c3d76b6b70d6a1bf56507ad0e627 From b7c8fa9fb684ef42d819fd2a954aef196a4673d1 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Fri, 29 Jul 2011 20:38:04 +0200 Subject: [PATCH 08/12] Simba: Try to fix dependency hell. --- Projects/Simba/Simba.lpi | 1 - 1 file changed, 1 deletion(-) diff --git a/Projects/Simba/Simba.lpi b/Projects/Simba/Simba.lpi index 44c4dc8..9b88949 100644 --- a/Projects/Simba/Simba.lpi +++ b/Projects/Simba/Simba.lpi @@ -38,7 +38,6 @@ - From 32a6db47c6518f0c7e0a770a27780ad22a5a8da4 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Fri, 29 Jul 2011 20:41:36 +0200 Subject: [PATCH 09/12] Simba: Fix LCLBase requirement. --- Projects/Simba/Simba.lpi | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/Projects/Simba/Simba.lpi b/Projects/Simba/Simba.lpi index 9b88949..af46d9c 100644 --- a/Projects/Simba/Simba.lpi +++ b/Projects/Simba/Simba.lpi @@ -35,17 +35,14 @@ - + - - - - - + + - + @@ -310,7 +307,7 @@ - + From c4215bc2e51c1f8f03fec5f50fe9d0bf1e562fb0 Mon Sep 17 00:00:00 2001 From: Cohen Adair Date: Fri, 29 Jul 2011 14:45:30 -0400 Subject: [PATCH 10/12] MML: Added FilterTPACustom, FilterTPADistEx, and FilterTPADist --- Units/MMLAddon/PSInc/Wrappers/tpa.inc | 15 +++++ Units/MMLAddon/PSInc/psexportedmethods.inc | 3 + Units/MMLCore/tpa.pas | 75 ++++++++++++++++++++++ 3 files changed, 93 insertions(+) diff --git a/Units/MMLAddon/PSInc/Wrappers/tpa.inc b/Units/MMLAddon/PSInc/Wrappers/tpa.inc index 0c7c547..f8ef974 100644 --- a/Units/MMLAddon/PSInc/Wrappers/tpa.inc +++ b/Units/MMLAddon/PSInc/Wrappers/tpa.inc @@ -143,6 +143,21 @@ begin FilterPointsLine(points,radial,radius,mx,my); end; +procedure ps_FilterTPACustom(TPA: TPointArray; compare: function(a, b: integer): boolean); +begin + FilterTPACustom(TPA, @compare); +end; + +procedure ps_FilterTPADistEx(var TPA: TPointArray; maxL, maxW: integer); +begin + FilterTPADistEx(TPA, maxL, maxW); +end; + +procedure ps_FilterTPADist(var TPA: TPointArray; maxDist: integer); +begin + FilterTPADist(TPA, maxDist); +end; + function ps_GetATPABounds(const ATPA: T2DPointArray): TBox;extdecl; begin result := GetATPABounds(ATPA); diff --git a/Units/MMLAddon/PSInc/psexportedmethods.inc b/Units/MMLAddon/PSInc/psexportedmethods.inc index 4dad21c..3c82ba0 100644 --- a/Units/MMLAddon/PSInc/psexportedmethods.inc +++ b/Units/MMLAddon/PSInc/psexportedmethods.inc @@ -458,6 +458,9 @@ AddFunction(@ps_FloodFillTPA,'function FloodFillTPA(const TPA : TPointArray) : T AddFunction(@ps_FilterPointsPie,'procedure FilterPointsPie(var Points: TPointArray; const SD, ED, MinR, MaxR: Extended; Mx, My: Integer);'); AddFunction(@ps_FilterPointsLine,'procedure FilterPointsLine(var Points: TPointArray; Radial: Extended; Radius, MX, MY: Integer);'); AddFunction(@ps_filterpointsdist,'procedure FilterPointsDist(var Points: TPointArray; const MinDist, MaxDist: Extended; Mx, My: Integer);'); +AddFunction(@ps_filterTPACustom, 'procedure FilterTPACustom(var TPA: TPointArray; compare: function(a, b: integer): boolean);'); +AddFunction(@ps_filterTPADistEx, 'procedure FilterTPADistEx(var TPA: TPointArray; maxL, maxW: integer);'); +AddFunction(@ps_filterTPADist, 'procedure FilterTPADist(var TPA: TPointArray; maxDist: integer);'); AddFunction(@ps_GetATPABounds,'function GetATPABounds(const ATPA: T2DPointArray): TBox;'); AddFunction(@ps_GetTPABounds,'function GetTPABounds(const TPA: TPointArray): TBox;'); AddFunction(@ps_FindTPAinTPA,'function FindTPAinTPA(const SearchTPA, TotalTPA: TPointArray; var Matches: TPointArray): Boolean;'); diff --git a/Units/MMLCore/tpa.pas b/Units/MMLCore/tpa.pas index 9c0abae..bded283 100644 --- a/Units/MMLCore/tpa.pas +++ b/Units/MMLCore/tpa.pas @@ -67,6 +67,9 @@ function FloodFillTPA(const TPA : TPointArray) : T2DPointArray; procedure FilterPointsPie(var Points: TPointArray; const SD, ED, MinR, MaxR: Extended; Mx, My: Integer); procedure FilterPointsDist(var Points: TPointArray; const MinDist,MaxDist: Extended; Mx, My: Integer); procedure FilterPointsLine(var Points: TPointArray; Radial: Extended; Radius, MX, MY: Integer); +procedure FilterTPACustom(var TPA: TPointArray; compare: function(a, b: integer): boolean); +procedure FilterTPADistEx(var TPA: TPointArray; maxL, maxW: integer); +procedure FilterTPADist(var TPA: TPointArray; maxDist: integer); function RemoveDistTPointArray(x, y, dist: Integer;const ThePoints: TPointArray; RemoveHigher: Boolean): TPointArray; function GetATPABounds(const ATPA: T2DPointArray): TBox; function GetTPABounds(const TPA: TPointArray): TBox; @@ -1168,6 +1171,78 @@ begin Points:= P; end; +{/\ + Removes points in the TPA using the funciton 'compare'. If 'compare' returns + true, point b is removed from the TPA. +/\} +procedure FilterTPACustom(TPA: TPointArray; compare: function(a, b: integer): boolean); +var + c, i, j, l, h: integer; + newTPA: TPointArray; + inBadElements: TBooleanArray; +begin + h := high(TPA); + l := (h + 1); // i.e. length(TPA); + + setLength(inBadElements, l); + setLength(newTPA, l); + + for i := 0 to h do + inBadElements[i] := false; // just in case.. + + for i := 0 to (h - 1) do + begin + if (inBadElements[i]) then // increases speed significantly + continue; + + for j := (i + 1) to h do + begin + if (inBadElements[j]) then // increases speed significantly + continue; + + if (compare(TPA[i], TPA[j])) then + inBadElements[j] := true; + end; + end; + + c := 0; + + // set the new TPA + for i := 0 to h do + if (not inBadElements[i]) then + begin + newTPA[c] := TPA[i]; + inc(c); + end; + + setLength(newTPA, c); + TPA := newTPA; +end; + +{/\ + Removes points in the TPA that are within maxL or maxW of each other. +/\} +procedure FilterTPADistEx(var TPA: TPointArray; maxL, maxW: integer); +function lwComp(a,b: TPoint): Boolean; +begin + result := (abs(a.x-b.x) <= maxW) or (abs(a.y-b.y) <= maxL); // lambda would be nice.. +end; +begin + FilterTPACustom(TPA, @lwComp); +end; + +{/\ + Removes points in the TPA that are within 'maxDist' of each other. +/\} +procedure FilterTPADist(var TPA: TPointArray; maxDist: integer); +function distComp(a, b: TPoint): boolean; +begin + result := (((a.x-b.x)*(a.x-b.x)) + ((a.y-b.y)*(a.y-b.y)) <= (maxDist*maxDist)); +end; +begin + FilterTPACustom(TPA, @distComp); +end; + {/\ Removes the points that are inside or outside the distance Dist from the point (x, y) from the TPointArray ThePoints. /\} From c58268335abc23af51507db1e0e8c77f03feff4a Mon Sep 17 00:00:00 2001 From: Cohen Adair Date: Fri, 29 Jul 2011 16:32:13 -0400 Subject: [PATCH 11/12] TPA: Removed FilterTPACustom and FilterTPADistEx --- Units/MMLAddon/PSInc/Wrappers/tpa.inc | 10 ----- Units/MMLAddon/PSInc/psexportedmethods.inc | 2 - Units/MMLCore/tpa.pas | 47 +++++----------------- 3 files changed, 11 insertions(+), 48 deletions(-) diff --git a/Units/MMLAddon/PSInc/Wrappers/tpa.inc b/Units/MMLAddon/PSInc/Wrappers/tpa.inc index f8ef974..c35a0a3 100644 --- a/Units/MMLAddon/PSInc/Wrappers/tpa.inc +++ b/Units/MMLAddon/PSInc/Wrappers/tpa.inc @@ -143,16 +143,6 @@ begin FilterPointsLine(points,radial,radius,mx,my); end; -procedure ps_FilterTPACustom(TPA: TPointArray; compare: function(a, b: integer): boolean); -begin - FilterTPACustom(TPA, @compare); -end; - -procedure ps_FilterTPADistEx(var TPA: TPointArray; maxL, maxW: integer); -begin - FilterTPADistEx(TPA, maxL, maxW); -end; - procedure ps_FilterTPADist(var TPA: TPointArray; maxDist: integer); begin FilterTPADist(TPA, maxDist); diff --git a/Units/MMLAddon/PSInc/psexportedmethods.inc b/Units/MMLAddon/PSInc/psexportedmethods.inc index 3c82ba0..42b7b3c 100644 --- a/Units/MMLAddon/PSInc/psexportedmethods.inc +++ b/Units/MMLAddon/PSInc/psexportedmethods.inc @@ -458,8 +458,6 @@ AddFunction(@ps_FloodFillTPA,'function FloodFillTPA(const TPA : TPointArray) : T AddFunction(@ps_FilterPointsPie,'procedure FilterPointsPie(var Points: TPointArray; const SD, ED, MinR, MaxR: Extended; Mx, My: Integer);'); AddFunction(@ps_FilterPointsLine,'procedure FilterPointsLine(var Points: TPointArray; Radial: Extended; Radius, MX, MY: Integer);'); AddFunction(@ps_filterpointsdist,'procedure FilterPointsDist(var Points: TPointArray; const MinDist, MaxDist: Extended; Mx, My: Integer);'); -AddFunction(@ps_filterTPACustom, 'procedure FilterTPACustom(var TPA: TPointArray; compare: function(a, b: integer): boolean);'); -AddFunction(@ps_filterTPADistEx, 'procedure FilterTPADistEx(var TPA: TPointArray; maxL, maxW: integer);'); AddFunction(@ps_filterTPADist, 'procedure FilterTPADist(var TPA: TPointArray; maxDist: integer);'); AddFunction(@ps_GetATPABounds,'function GetATPABounds(const ATPA: T2DPointArray): TBox;'); AddFunction(@ps_GetTPABounds,'function GetTPABounds(const TPA: TPointArray): TBox;'); diff --git a/Units/MMLCore/tpa.pas b/Units/MMLCore/tpa.pas index bded283..ea6b6c9 100644 --- a/Units/MMLCore/tpa.pas +++ b/Units/MMLCore/tpa.pas @@ -67,8 +67,6 @@ function FloodFillTPA(const TPA : TPointArray) : T2DPointArray; procedure FilterPointsPie(var Points: TPointArray; const SD, ED, MinR, MaxR: Extended; Mx, My: Integer); procedure FilterPointsDist(var Points: TPointArray; const MinDist,MaxDist: Extended; Mx, My: Integer); procedure FilterPointsLine(var Points: TPointArray; Radial: Extended; Radius, MX, MY: Integer); -procedure FilterTPACustom(var TPA: TPointArray; compare: function(a, b: integer): boolean); -procedure FilterTPADistEx(var TPA: TPointArray; maxL, maxW: integer); procedure FilterTPADist(var TPA: TPointArray; maxDist: integer); function RemoveDistTPointArray(x, y, dist: Integer;const ThePoints: TPointArray; RemoveHigher: Boolean): TPointArray; function GetATPABounds(const ATPA: T2DPointArray): TBox; @@ -1172,36 +1170,37 @@ begin end; {/\ - Removes points in the TPA using the funciton 'compare'. If 'compare' returns - true, point b is removed from the TPA. + Removes points in the TPA that are within maxDist of each other. /\} -procedure FilterTPACustom(TPA: TPointArray; compare: function(a, b: integer): boolean); +procedure FilterTPADist(var TPA: TPointArray; maxDist: integer); var - c, i, j, l, h: integer; + c, i, j, l, h, maxDistSq: integer; newTPA: TPointArray; inBadElements: TBooleanArray; begin h := high(TPA); - l := (h + 1); // i.e. length(TPA); + l := (h + 1); + maxDistSq := (maxDist * maxDist); setLength(inBadElements, l); setLength(newTPA, l); for i := 0 to h do - inBadElements[i] := false; // just in case.. + inBadElements[i] := false; for i := 0 to (h - 1) do begin - if (inBadElements[i]) then // increases speed significantly + if (inBadElements[i]) then continue; for j := (i + 1) to h do begin - if (inBadElements[j]) then // increases speed significantly + if (inBadElements[j]) then continue; - if (compare(TPA[i], TPA[j])) then - inBadElements[j] := true; + // simplified -> a^2 + b^2 <= c^2 + if (((TPA[i].x - TPA[j].x) * (TPA[i].x - TPA[j].x)) + ((TPA[i].y - TPA[j].y) * (TPA[i].y - TPA[j].y)) <= maxDistSq) then + inBadElements[j] := true; end; end; @@ -1219,30 +1218,6 @@ begin TPA := newTPA; end; -{/\ - Removes points in the TPA that are within maxL or maxW of each other. -/\} -procedure FilterTPADistEx(var TPA: TPointArray; maxL, maxW: integer); -function lwComp(a,b: TPoint): Boolean; -begin - result := (abs(a.x-b.x) <= maxW) or (abs(a.y-b.y) <= maxL); // lambda would be nice.. -end; -begin - FilterTPACustom(TPA, @lwComp); -end; - -{/\ - Removes points in the TPA that are within 'maxDist' of each other. -/\} -procedure FilterTPADist(var TPA: TPointArray; maxDist: integer); -function distComp(a, b: TPoint): boolean; -begin - result := (((a.x-b.x)*(a.x-b.x)) + ((a.y-b.y)*(a.y-b.y)) <= (maxDist*maxDist)); -end; -begin - FilterTPACustom(TPA, @distComp); -end; - {/\ Removes the points that are inside or outside the distance Dist from the point (x, y) from the TPointArray ThePoints. /\} From bae2e027e29c66205e29cf100251db73e7764553 Mon Sep 17 00:00:00 2001 From: Cohen Adair Date: Fri, 29 Jul 2011 16:38:20 -0400 Subject: [PATCH 12/12] Laz: tpa.pas and psexportedmethods.inc added to project inspector --- Projects/Simba/Simba.lpi | 11 ++++++++++- Projects/Simba/Simba.lpr | 2 +- Projects/Simba/Simba.res | Bin 19212 -> 19864 bytes 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Projects/Simba/Simba.lpi b/Projects/Simba/Simba.lpi index af46d9c..889e59c 100644 --- a/Projects/Simba/Simba.lpi +++ b/Projects/Simba/Simba.lpi @@ -44,7 +44,7 @@ - + @@ -304,6 +304,15 @@ + + + + + + + + + diff --git a/Projects/Simba/Simba.lpr b/Projects/Simba/Simba.lpr index ac13155..26c37db 100644 --- a/Projects/Simba/Simba.lpr +++ b/Projects/Simba/Simba.lpr @@ -33,7 +33,7 @@ uses {$ENDIF}{$ENDIF} Interfaces, Forms, SimbaUnit, colourhistory, About, internets, debugimage, framefunctionlist, simpleanalyzer, updater, updateform, Simbasettings, - libloader, mufasabase, v_ideCodeInsight, + libloader, mufasabase, tpa, v_ideCodeInsight, PSDump, v_ideCodeParser, v_AutoCompleteForm, CastaliaPasLex, CastaliaPasLexTypes, CastaliaSimplePasPar, CastaliaSimplePasParTypes, dcpbase64, mPasLex, v_Constants, v_MiscFunctions, diff --git a/Projects/Simba/Simba.res b/Projects/Simba/Simba.res index 42c7633aefc517e477597f5189923c1d3ac6b5ad..0087bd7e4fbde483fac5db843263e4a80c76aec2 100644 GIT binary patch delta 672 zcmZXRO-=$q5QX2!XvDa{8?bO`fCW(@CMJp+He$pOb~+*g$uJOp{M*b0TpJTF;F3hQ z-oU$f1M%zTKhC79tGZsjdR_he;=H~&gK{MFm!!C);V{N>@T6GGZr1oqY4(zey2Kvo z951hePKoo_V|?>{xj(;>qbnOp-gw_1@2*_3i{H1Ski(*S>ZqYWHRu}hRfRgxtyi{d_be~6Xt+-Ng4rd zgfxH!mY|5=)HMWIO6uf#AhJsG-;;ad?{ku%qJ#7#Jd=tf40~FmQNc3T$OJI?)5a!3 zY6x)FD1n#@`5(3fOUDWtT_=UijCSnB(uz(e5LS8B zMW`V(;BBn&%&?_RN*wzvJ&PaRW?qt%1Lwf!(RwoA*+Uu*7sLfw^ITn~;cYC8Ji0n? JKgyBMlRuG=Wn};W delta 14 WcmbO+o3Upa