# Copyright (c) 2025-2026 Gigasoft, Inc. All rights reserved. === ProEssentials AI Resources (knowledge rev 5.1) -- Tool & Workflow Instructions === You have access to pe_query.py which queries the full ProEssentials API from three data sources plus a semantic feature index: PRIMARY: net-complete-enriched.json -- 1,104 properties, 1,260 methods, 40 events, 167 enums, 15 structs (extracted from DLL binary) DESCRIPTIONS: ProEssentials_unified-docs.json -- rich descriptions, comments, seeAlso, keywords for all 1,097 documented properties EXAMPLES: ProEssentials_allExamples.json -- 116 C# & C++ & VBA/OCX examples FEATURES: pe-feature-index.json -- 69 feature groups, 604 synonyms, maps natural language to examples (~75KB, enables features cmd) CRITICAL RULE: NEVER GUESS PROPERTY PATHS OR ENUM VALUES. The .NET API has abbreviated property names that don't match what you'd expect. Examples of WRONG --> RIGHT corrections: WRONG: PeColor.DeskColor --> RIGHT: PeColor.Desk WRONG: PeColor.TextColor --> RIGHT: PeColor.Text WRONG: "PointLabels" under PeData --> RIGHT: PeString.PointLabels (Pesgo) WRONG: "YAxisHotSpot" under Annot --> RIGHT: PeUserInterface.HotSpot.YAxisLineAnnotations[i] ALWAYS query the tool. ALWAYS validate before finalizing code OR answering any question that references a property path, enum value, or code snippet. This includes: reviewing user code for errors, confirming whether a line compiles, suggesting fixes, and any response containing .NET paths. If a property path or enum appears in your answer, it MUST be validated by pe_query.py first -- no exceptions, even for "simple" questions. WORKFLOW FOR ANY PROESSENTIALS CODING TASK: STEP 1 -- UNDERSTAND (use knowledge files, no tool needed) Read relevant pe-* knowledge files for conceptual understanding. NOTE: Any file starting with "pe-" and having a .txt extension should be treated as ProEssentials knowledge. Additional files beyond this list may exist and should be consulted when relevant. Architecture & Fundamentals: pe-core-knowledge --> which chart object, overall architecture pe-base-examples --> foundational code patterns and starter examples pe-data-handling --> data loading patterns pe-nulldata --> handling null/missing data Chart Object Patterns: pe-pego-patterns --> Pego: bar, line, area, OHLC, ribbon pe-pesgo-patterns --> Pesgo: scatter, line, spline, bubble, contour pe-pepco-patterns --> Pepco: pie and donut charts pe-pepso-patterns --> Pepso: polar, radar/spider, rose, smith pe-pe3do-patterns --> Pe3do: 3D surface, contour, bar Axes & Scaling: pe-multiaxis-architecture --> multi-axis setup pe-axis-formatting --> axis labels, gridlines, scale formatting pe-mixing-methods-xaxis --> mixed plots, Pego X-axis, custom scales pe-workingaxis-dependent-properties --> per-axis property list pe-datetime-handling --> date/time axes pe-specificplotmode --> specific plot mode overlays Annotations & Labels: pe-annotations --> reference lines, labels pe-graph-annotations --> graph-area annotations pe-3d-graph-annotations --> 3D graph annotations pe-table-annotations --> table annotations pe-quick-annotations --> quick/simple annotation shortcuts pe-pointlabelsII --> point label formatting pe-legends --> legend configuration Interaction & Events: pe-events-interaction --> event handling pe-hotspots --> clickable regions pe-cursor-tooltip --> cursor tracking and tooltips pe-zoom --> zoom and scroll Appearance & Output: pe-styling-appearance --> colors, fonts, themes pe-pointcolors --> per-point color control pe-printing --> printing and image export pe-realtime-patterns --> streaming/real-time tiers STEP 2 -- DISCOVER (use tool to find what you need) Find relevant properties: pe_query.py search "real-time circular" pe_query.py props --category data --object Pesgo --list pe_query.py related "CircularBuffers" Find relevant examples (synonym-enhanced): pe_query.py features "heatmap" -- understand feature scope & canonical API pe_query.py features "trend line" --object Pesgo pe_query.py example-features 126 -- see what an example uniquely teaches pe_query.py examples --feature "real-time" -- flat example list to pick from pe_query.py examples --prop "CircularBuffers" USE: "features" to understand what feature groups exist, their canonical paths/enums/methods, and which examples demonstrate them. "examples --feature" for a flat example list filtered by feature keyword. "example-features " to see what one example uniquely teaches. Get task-oriented patterns: pe_query.py recipe "real-time" pe_query.py recipe (lists all available recipes) STEP 3 -- LOOK UP (get exact paths, types, enum values) Property details (ALWAYS do this before writing code): pe_query.py props "Subsets,Points,Y,CircularBuffers,PrepareImages" Enum values (NEVER hardcode integers): pe_query.py enum "GraphPlottingMethod" pe_query.py enum "ManualScaleControl" Method signatures on property arrays: pe_query.py methods "PeData.Y" pe_query.py methods "PeString.PointLabels" Event details: pe_query.py event "PeDataHotSpot" pe_query.py events --object Pesgo Function signatures: pe_query.py function "PrintGraphEx" Example code for example: pe_query.py example 007 --lang csharp pe_query.py example 007 --lang vba -- VBA/OCX code for that example pe_query.py example 007 --lang cpp -- CPP code for that example STEP 4 -- VALIDATE (verify all paths before finalizing) Before delivering code, validate every .NET path you used: pe_query.py validate "PeColor.Desk,PeData.CircularBuffers,PeGrid.Zoom.MinX" The validate command checks each path against the DLL-extracted ground truth. INVALID paths get a suggestion for the correct path. This catches the most common AI error: hallucinated property names. COMMAND REFERENCE (pe_query.py): props -- Lookup by comma-separated names/paths/DLLs props --category --list -- Browse by category (data,color,plot,grid,etc.) props --object -- Browse by chart object search -- Full-text search across all items enum -- Get all values for an enum enum -- List all enum names events [--object ] -- List .NET events event -- Single event full detail functions [--type net|dll|ocx] -- List functions (ocx = ActiveX/VCL methods) function -- Single function full detail (searches net, dll, ocx) methods -- Methods on a property array (e.g., PeData.Y) validate -- Validate .NET paths against ground truth features -- Synonym search: paths, enums, methods, events, examples features --object -- Filter feature results by chart object features --list -- List all 69 feature groups example-features -- Show example's distinctive + shared features examples --feature -- Find examples by feature (synonym-enhanced) examples --prop -- Find examples using a property example [--lang csharp|cpp|vba] -- Get full example code related -- SeeAlso + same-group properties recipe -- Task-oriented pattern (or list all) structures [] -- List/show structures info -- Dataset statistics Output: compact text, never JSON. AppliesTo codes: Pg=Pego Sg=Pesgo 3D=Pe3do Po=Pepso Pi=Pepco Features output: * after example ID = feature is distinctive for that example COMMON TASKS -- QUICK REFERENCE: "Create a bar chart" --> Read pe-core-knowledge (choose Pego) --> pe_query.py recipe "bar-chart" --> pe_query.py props "Subsets,Points,Y,Method,SubsetLabels,PointLabels" --> pe_query.py enum "GraphPlottingMethod" "Add real-time streaming" --> Read pe-realtime-patterns --> pe_query.py recipe "real-time" --> pe_query.py methods "PeData.Y" (get AppendData signature) --> pe_query.py props "PrepareImages,CircularBuffers" "Configure multi-axis" --> Read pe-multiaxis-architecture + pe-workingaxis-dependent --> pe_query.py recipe "multi-axis" --> pe_query.py enum "MultiAxisStyle" "Add click interaction" --> Read pe-hotspots + pe-events-interaction --> pe_query.py search "hotspot" --> pe_query.py event "PeDataHotSpot" "I need a heatmap / contour chart" --> pe_query.py features "heatmap" --> pe_query.py example-features 120 --> pe_query.py example 120 --lang csharp "How do I add a trend line?" --> pe_query.py features "trend line" --> pe_query.py example 002 --lang csharp "Print or export image" --> Read pe-printing --> pe_query.py recipe "printing" --> pe_query.py function "PrintGraph" "Write VBA/OCX code for mouse tracking" --> pe_query.py function "GetLastMouseMove" (OCX method, scope=All) --> pe_query.py function "PEconvpixeltograph" (scope=Pego/Pesgo/Pepso only) --> pe_query.py function "GetHotSpotData" (OCX method, scope=All) --> pe_query.py example 007 --lang vba (full VBA mouse-tracking example) "Custom axis labels" --> pe_query.py recipe "custom-grid" --> pe_query.py event "PeCustomGridNumber" OCX/VBA LAYER (ActiveX/VCL): ProEssentials has a third API layer beyond .NET and DLL: OCX methods called directly on the control (iPego1.GetRectGraph, iPego1.PEconvpixeltograph, etc.) These appear in VBA examples and have their own help pages (_OCX_Method.htm). VBA property syntax uses OCX constants (not .NET enum names): VBA: iPego1.QuickStyle = PEQS_LIGHT_SHADOW .NET: Pego1.PeColor.QuickStyle = QuickStyle.LightShadow OCX constant prefixes: PEQS_, PECM_, PELT_, PEDS_, PEGAT_, PEPGS_, PELS_, PEGLC_, PEFS_, PEPT_, PETAB_, PETAL_ (same values as DLL PEP_ constants) SCOPE GOTCHA: Not all OCX methods work on all 5 chart objects. GetRectGraph, PEconvpixeltograph, PEpartialresetimage --> Pego, Pesgo, Pepso only GetExtraAxisX, GetFallDayLight, GetSpringDayLight --> Pego, Pesgo only DxSetLight, DxGetLight --> Pe3do only Most PEcopy*, PEreinitialize*, PEreset*, PElaunch* --> All objects Always check appliesTo when using pe_query.py function Look up OCX methods: pe_query.py functions --type ocx -- list all OCX methods pe_query.py function "GetRectGraph" -- signature, scope, description pe_query.py example 007 --lang vba -- VBA code for that example ANTI-PATTERNS (things that cause errors): -- Guessing paths from memory --> use props command -- Hardcoding enum integers (Method = 1) --> use enum names -- Using "Color" suffix (DeskColor, TextColor) --> query for short name (Desk, Text) -- Assuming PointLabels is under PeData --> query: it's PeString.PointLabels on Pesgo -- Forgetting ResetImage after print/export --> always reset -- Setting axis properties without WorkingAxis --> set WorkingAxis first -- Not calling ReinitializeResetImage after data changes --> always call