Compare commits
8 Commits
v0.17.1
...
achalmers/
| Author | SHA1 | Date | |
|---|---|---|---|
| 74b09f3ef6 | |||
| 76480f1a43 | |||
| f850f80de1 | |||
| 15ebbe6947 | |||
| 01beba42da | |||
| 509e372ed2 | |||
| b0417114af | |||
| 0360a4021b |
|
Before Width: | Height: | Size: 221 KiB After Width: | Height: | Size: 224 KiB |
|
Before Width: | Height: | Size: 221 KiB After Width: | Height: | Size: 224 KiB |
|
Before Width: | Height: | Size: 221 KiB After Width: | Height: | Size: 224 KiB |
|
Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 221 KiB After Width: | Height: | Size: 224 KiB |
|
Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 50 KiB |
@ -34,5 +34,28 @@ const bracket = startSketchOn('XY')
|
||||
|> fillet({
|
||||
radius: filletR + thickness,
|
||||
tags: [getNextAdjacentEdge('outerEdge', %)]
|
||||
}, %)
|
||||
`
|
||||
}, %)`
|
||||
|
||||
function findLineInExampleCode({
|
||||
searchText,
|
||||
example = bracket,
|
||||
}: {
|
||||
searchText: string
|
||||
example?: string
|
||||
}) {
|
||||
const lines = example.split('\n')
|
||||
const lineNumber = lines.findIndex((l) => l.includes(searchText)) + 1
|
||||
if (lineNumber === 0) {
|
||||
throw new Error(
|
||||
`Could not find the line with search text "${searchText}" in the example code. Was it removed?`
|
||||
)
|
||||
}
|
||||
return lineNumber
|
||||
}
|
||||
|
||||
export const bracketWidthConstantLine = findLineInExampleCode({
|
||||
searchText: 'const width',
|
||||
})
|
||||
export const bracketThicknessCalculationLine = findLineInExampleCode({
|
||||
searchText: 'const thickness',
|
||||
})
|
||||
|
||||
@ -21,7 +21,8 @@ export default function Export() {
|
||||
<section className="flex-1">
|
||||
<h2 className="text-2xl font-bold">Export</h2>
|
||||
<p className="my-4">
|
||||
Try opening the project menu and clicking "Export Part".
|
||||
Try opening the project menu and clicking the "Export Part" at the
|
||||
bottom of the pane.
|
||||
</p>
|
||||
<p className="my-4">
|
||||
{APP_NAME} uses{' '}
|
||||
|
||||
@ -2,6 +2,7 @@ import { OnboardingButtons, kbdClasses, useDismiss, useNextClick } from '.'
|
||||
import { onboardingPaths } from 'routes/Onboarding/paths'
|
||||
import { useStore } from '../../useStore'
|
||||
import { useBackdropHighlight } from 'hooks/useBackdropHighlight'
|
||||
import { bracketWidthConstantLine } from 'lib/exampleKcl'
|
||||
|
||||
export default function InteractiveNumbers() {
|
||||
const { buttonDownInStream } = useStore((s) => ({
|
||||
@ -26,11 +27,25 @@ export default function InteractiveNumbers() {
|
||||
<h2 className="text-3xl font-bold">Hybrid editing</h2>
|
||||
|
||||
<p className="my-4">
|
||||
Try changing the value of <code>width</code> on line 2 by holding
|
||||
the <kbd className={kbdClasses}>Alt</kbd> (or{' '}
|
||||
<kbd className={kbdClasses}>Option</kbd>) key and dragging the
|
||||
number left and right. You can hold down different modifier keys to
|
||||
change the value by different increments:
|
||||
We believe editing in Modeling App should feel fluid between code
|
||||
and point-and-click, so that you can work in the way that feels most
|
||||
natural to you. Let's try something out that demonstrates this
|
||||
principle, by editing numbers without typing.
|
||||
</p>
|
||||
<ol className="pl-6 my-4 list-decimal">
|
||||
<li className="list-decimal">
|
||||
Press and hold the <kbd className={kbdClasses}>Alt</kbd> (or{' '}
|
||||
<kbd className={kbdClasses}>Option</kbd>) key
|
||||
</li>
|
||||
<li>
|
||||
Hover over the number assigned to <code>width</code> on line{' '}
|
||||
{bracketWidthConstantLine}
|
||||
</li>
|
||||
<li>Drag the number left and right to change its value</li>
|
||||
</ol>
|
||||
<p className="my-4">
|
||||
You can hold down different modifier keys to change the value by
|
||||
different increments:
|
||||
</p>
|
||||
<ul className="flex flex-col text-sm my-4 mx-12 divide-y divide-chalkboard-20 dark:divide-chalkboard-70">
|
||||
<li className="flex justify-between m-0 px-0 py-2">
|
||||
@ -70,10 +85,8 @@ export default function InteractiveNumbers() {
|
||||
lets you interact with numbers in your code by dragging them around.
|
||||
</p>
|
||||
<p className="my-4">
|
||||
We believe editing in Modeling App should feel fluid between code
|
||||
and point-and-click, so that you can work in the way that feels most
|
||||
natural to you. We're going to keep extending the text editor, and
|
||||
we'd love to hear your ideas for how to make it better.
|
||||
We're going to keep extending the text editor, and we'd love to hear
|
||||
your ideas for how to make it better.
|
||||
</p>
|
||||
</section>
|
||||
<OnboardingButtons
|
||||
|
||||
@ -141,10 +141,11 @@ export default function Introduction() {
|
||||
<section className="my-12">
|
||||
<p className="my-4">
|
||||
Welcome to {APP_NAME}! This is a hardware design tool that lets you
|
||||
edit visually, with code, or both. It's powered by the first API
|
||||
created for anyone to build hardware design tools. The 3D view is
|
||||
not running on your computer, but is instead being streamed to you
|
||||
from a remote GPU as video.
|
||||
edit visually, with code, or both. It's powered by the KittyCAD
|
||||
Design API, the first API created for anyone to build hardware
|
||||
design tools. The 3D view is not running on your computer, but is
|
||||
instead being streamed to you from an instance of our Geometry
|
||||
Engine on a remote GPU as video.
|
||||
</p>
|
||||
<p className="my-4">
|
||||
This is an alpha release, so you will encounter bugs and missing
|
||||
@ -173,7 +174,7 @@ export default function Introduction() {
|
||||
className="mt-6"
|
||||
dismiss={dismiss}
|
||||
next={next}
|
||||
nextText="Camera"
|
||||
nextText="Mouse Controls"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -4,6 +4,7 @@ import { useStore } from '../../useStore'
|
||||
import { useBackdropHighlight } from 'hooks/useBackdropHighlight'
|
||||
import { Themes, getSystemTheme } from 'lib/theme'
|
||||
import { useSettingsAuthContext } from 'hooks/useSettingsAuthContext'
|
||||
import { bracketThicknessCalculationLine } from 'lib/exampleKcl'
|
||||
|
||||
export default function ParametricModeling() {
|
||||
const { buttonDownInStream } = useStore((s) => ({
|
||||
@ -61,7 +62,10 @@ export default function ParametricModeling() {
|
||||
<p className="my-4">
|
||||
We are able to easily calculate the thickness of the material based
|
||||
on the width of the bracket to meet a set safety factor on{' '}
|
||||
<em className="text-energy-60 dark:text-energy-20">line 14</em>.
|
||||
<em className="text-energy-60 dark:text-energy-20">
|
||||
line {bracketThicknessCalculationLine}
|
||||
</em>
|
||||
.
|
||||
</p>
|
||||
</section>
|
||||
<OnboardingButtons
|
||||
|
||||
@ -30,9 +30,15 @@ export default function Sketching() {
|
||||
<h1 className="text-2xl font-bold">Sketching</h1>
|
||||
<p className="my-4">
|
||||
Our 3D modeling tools are still very much a work in progress, but we
|
||||
want to show you some early features. Try creating a sketch by
|
||||
clicking Create Sketch in the top toolbar, then clicking the Line
|
||||
tool, and clicking in the 3D view.
|
||||
want to show you some early features. Try sketching by clicking Start
|
||||
Sketch in the top toolbar and selecting a plane to draw on. Now you
|
||||
can start clicking to draw lines and shapes.
|
||||
</p>
|
||||
<p className="my-4">
|
||||
The Line tool will be equipped by default, but you can switch it to as
|
||||
you go by clicking another tool in the toolbar, or unequip it by
|
||||
clicking the Line tool button. With no tool selected, you can move
|
||||
points and add constraints to your sketch.
|
||||
</p>
|
||||
<p className="my-4">
|
||||
Watch the code pane as you click. Point-and-click interactions are
|
||||
|
||||
@ -14,12 +14,12 @@ slow-timeout = { period = "30s", terminate-after = 5 }
|
||||
[[profile.default.overrides]]
|
||||
filter = "test(serial_test_)"
|
||||
test-group = "serial-integration"
|
||||
threads-required = 4
|
||||
threads-required = 2
|
||||
|
||||
[[profile.ci.overrides]]
|
||||
filter = "test(serial_test_)"
|
||||
test-group = "serial-integration"
|
||||
threads-required = 4
|
||||
threads-required = 2
|
||||
|
||||
[[profile.default.overrides]]
|
||||
filter = "test(parser::parser_impl::snapshot_tests)"
|
||||
|
||||
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 81 KiB |
@ -2649,8 +2649,8 @@ async fn execute_pipe_body(
|
||||
source_range: SourceRange,
|
||||
ctx: &ExecutorContext,
|
||||
) -> Result<MemoryItem, KclError> {
|
||||
let mut body_iter = body.iter();
|
||||
let first = body_iter.next().ok_or_else(|| {
|
||||
let mut body = body.iter();
|
||||
let first = body.next().ok_or_else(|| {
|
||||
KclError::Semantic(KclErrorDetails {
|
||||
message: "Pipe expressions cannot be empty".to_owned(),
|
||||
source_ranges: vec![source_range],
|
||||
|
||||
@ -93,6 +93,7 @@ pub trait EngineManager: std::fmt::Debug + Send + Sync + 'static {
|
||||
} else {
|
||||
batched_requests
|
||||
};
|
||||
// println!("Running batch: {final_req:#?}");
|
||||
|
||||
// Create the map of original command IDs to source range.
|
||||
// This is for the wasm side, kurt needs it for selections.
|
||||
|
||||
@ -994,9 +994,8 @@ impl ExecutorContext {
|
||||
}
|
||||
}
|
||||
|
||||
/// Execute a AST's program.
|
||||
#[async_recursion(?Send)]
|
||||
pub async fn execute(
|
||||
/// Execute an AST's program.
|
||||
pub async fn execute_outer(
|
||||
program: crate::ast::types::Program,
|
||||
memory: &mut ProgramMemory,
|
||||
_options: BodyType,
|
||||
@ -1013,7 +1012,17 @@ pub async fn execute(
|
||||
},
|
||||
)
|
||||
.await?;
|
||||
execute(program, memory, _options, ctx).await
|
||||
}
|
||||
|
||||
/// Execute an AST's program.
|
||||
#[async_recursion(?Send)]
|
||||
pub(crate) async fn execute(
|
||||
program: crate::ast::types::Program,
|
||||
memory: &mut ProgramMemory,
|
||||
_options: BodyType,
|
||||
ctx: &ExecutorContext,
|
||||
) -> Result<ProgramMemory, KclError> {
|
||||
let pipe_info = PipeInfo::default();
|
||||
|
||||
// Iterate over the body of the program.
|
||||
@ -1299,7 +1308,7 @@ mod tests {
|
||||
units: kittycad::types::UnitLength::Mm,
|
||||
is_mock: false,
|
||||
};
|
||||
let memory = execute(program, &mut mem, BodyType::Root, &ctx).await?;
|
||||
let memory = execute_outer(program, &mut mem, BodyType::Root, &ctx).await?;
|
||||
|
||||
Ok(memory)
|
||||
}
|
||||
|
||||
@ -41,7 +41,7 @@ pub async fn execute_wasm(
|
||||
is_mock,
|
||||
};
|
||||
|
||||
let memory = kcl_lib::executor::execute(program, &mut mem, kcl_lib::executor::BodyType::Root, &ctx)
|
||||
let memory = kcl_lib::executor::execute_outer(program, &mut mem, kcl_lib::executor::BodyType::Root, &ctx)
|
||||
.await
|
||||
.map_err(String::from)?;
|
||||
// The serde-wasm-bindgen does not work here because of weird HashMap issues so we use the
|
||||
|
||||
@ -0,0 +1,42 @@
|
||||
fn make_circle = (face, tag, pos, radius) => {
|
||||
const sg0 = startSketchOn(face, tag)
|
||||
const sg1 = startProfileAt([pos[0] + radius, pos[1]], sg0)
|
||||
const sg2 = arc({
|
||||
angle_end: 360,
|
||||
angle_start: 0,
|
||||
radius: radius
|
||||
}, sg1, 'arc-' + tag)
|
||||
return close(sg2)
|
||||
}
|
||||
|
||||
fn pentagon = (len) => {
|
||||
const sg3 = startSketchOn('XY')
|
||||
const sg4 = startProfileAt([-len / 2, -len / 2], sg3)
|
||||
const sg5 = angledLine({ angle: 0, length: len }, sg4, 'a')
|
||||
const sg6 = angledLine({
|
||||
angle: segAng('a', sg5) + 180 - 108,
|
||||
length: len
|
||||
},sg5, 'b')
|
||||
const sg7 = angledLine({
|
||||
angle: segAng('b', sg6) + 180 - 108,
|
||||
length: len
|
||||
}, sg6, 'c')
|
||||
const sg8 = angledLine({
|
||||
angle: segAng('c', sg7) + 180 - 108,
|
||||
length: len
|
||||
}, sg7, 'd')
|
||||
return angledLine({
|
||||
angle: segAng('d', sg8) + 180 - 108,
|
||||
length: len
|
||||
}, sg8)
|
||||
}
|
||||
|
||||
const p = pentagon(48)
|
||||
const pe = extrude(30, p)
|
||||
|
||||
const plumbus0 = make_circle(pe, 'a', [0, 0], 9)
|
||||
const plumbus1 = extrude(18, plumbus0)
|
||||
const plumbus2 = fillet({
|
||||
radius: 0.5,
|
||||
tags: ['arc-a', getOppositeEdge('arc-a', plumbus1)]
|
||||
}, plumbus1)
|
||||
46
src/wasm-lib/tests/executor/inputs/pentagon_fillet_sugar.kcl
Normal file
@ -0,0 +1,46 @@
|
||||
fn make_circle = (face, tag, pos, radius) => {
|
||||
const sg = startSketchOn(face, tag)
|
||||
|> startProfileAt([pos[0] + radius, pos[1]], %)
|
||||
|> arc({
|
||||
angle_end: 360,
|
||||
angle_start: 0,
|
||||
radius: radius
|
||||
}, %, 'arc-' + tag)
|
||||
|> close(%)
|
||||
|
||||
return sg
|
||||
}
|
||||
|
||||
fn pentagon = (len) => {
|
||||
const sg = startSketchOn('XY')
|
||||
|> startProfileAt([-len / 2, -len / 2], %)
|
||||
|> angledLine({ angle: 0, length: len }, %, 'a')
|
||||
|> angledLine({
|
||||
angle: segAng('a', %) + 180 - 108,
|
||||
length: len
|
||||
}, %, 'b')
|
||||
|> angledLine({
|
||||
angle: segAng('b', %) + 180 - 108,
|
||||
length: len
|
||||
}, %, 'c')
|
||||
|> angledLine({
|
||||
angle: segAng('c', %) + 180 - 108,
|
||||
length: len
|
||||
}, %, 'd')
|
||||
|> angledLine({
|
||||
angle: segAng('d', %) + 180 - 108,
|
||||
length: len
|
||||
}, %)
|
||||
|
||||
return sg
|
||||
}
|
||||
|
||||
const p = pentagon(48)
|
||||
|> extrude(30, %)
|
||||
|
||||
const plumbus0 = make_circle(p, 'a', [0, 0], 9)
|
||||
|> extrude(18, %)
|
||||
|> fillet({
|
||||
radius: 0.5,
|
||||
tags: ['arc-a', getOppositeEdge('arc-a', %)]
|
||||
}, %)
|
||||
17
src/wasm-lib/tests/executor/inputs/riddle_small.kcl
Normal file
@ -0,0 +1,17 @@
|
||||
const ANSWER = 41803
|
||||
|
||||
fn m = (s) => {
|
||||
return (ANSWER * s + 12345) % 214748
|
||||
}
|
||||
|
||||
let xs = 205804
|
||||
let ys = 71816
|
||||
let ox = 35 - (m(xs) % 70)
|
||||
let oy = 35 - (m(ys) % 70)
|
||||
const r = startSketchOn('XZ')
|
||||
|> startProfileAt([ox, oy], %)
|
||||
|> line([1, 0], %)
|
||||
|> line([0, -1], %)
|
||||
|> line([-1, 0], %)
|
||||
|> close(%)
|
||||
|> extrude(1, %)
|
||||
@ -41,7 +41,7 @@ async fn execute_and_snapshot(code: &str, units: kittycad::types::UnitLength) ->
|
||||
let mut mem: kcl_lib::executor::ProgramMemory = Default::default();
|
||||
let ctx = kcl_lib::executor::ExecutorContext::new(ws, units.clone()).await?;
|
||||
|
||||
let _ = kcl_lib::executor::execute(program, &mut mem, kcl_lib::executor::BodyType::Root, &ctx).await?;
|
||||
let _ = kcl_lib::executor::execute_outer(program, &mut mem, kcl_lib::executor::BodyType::Root, &ctx).await?;
|
||||
|
||||
let (x, y) = kcl_lib::std::utils::get_camera_zoom_magnitude_per_unit_length(units);
|
||||
|
||||
@ -112,6 +112,33 @@ const part002 = startSketchOn(part001, "here")
|
||||
twenty_twenty::assert_image("tests/executor/outputs/sketch_on_face.png", &result, 0.999);
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn serial_test_riddle_small() {
|
||||
let code = include_str!("inputs/riddle_small.kcl");
|
||||
let result = execute_and_snapshot(code, kittycad::types::UnitLength::Mm)
|
||||
.await
|
||||
.unwrap();
|
||||
twenty_twenty::assert_image("tests/executor/outputs/riddle_small.png", &result, 0.999);
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn serial_test_pentagon_fillet_desugar() {
|
||||
let code = include_str!("inputs/pentagon_fillet_desugar.kcl");
|
||||
let result = execute_and_snapshot(code, kittycad::types::UnitLength::Cm)
|
||||
.await
|
||||
.unwrap();
|
||||
twenty_twenty::assert_image("tests/executor/outputs/pentagon_fillet_desugar.png", &result, 0.999);
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn serial_test_pentagon_fillet_sugar() {
|
||||
let code = include_str!("inputs/pentagon_fillet_sugar.kcl");
|
||||
let result = execute_and_snapshot(code, kittycad::types::UnitLength::Cm)
|
||||
.await
|
||||
.unwrap();
|
||||
twenty_twenty::assert_image("tests/executor/outputs/pentagon_fillet_sugar.png", &result, 0.999);
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn serial_test_sketch_on_face_start() {
|
||||
let code = r#"fn cube = (pos, scale) => {
|
||||
@ -1839,3 +1866,66 @@ const part002 = startSketchOn(part001, 'end')
|
||||
.unwrap();
|
||||
twenty_twenty::assert_image("tests/executor/outputs/simple_revolve_sketch_on_edge.png", &result, 1.0);
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn serial_test_plumbus_fillets() {
|
||||
let code = r#"fn make_circle = (face, tag, pos, radius) => {
|
||||
const sg = startSketchOn(face, tag)
|
||||
|> startProfileAt([pos[0] + radius, pos[1]], %)
|
||||
|> arc({
|
||||
angle_end: 360,
|
||||
angle_start: 0,
|
||||
radius: radius
|
||||
}, %, 'arc-' + tag)
|
||||
|> close(%)
|
||||
|
||||
return sg
|
||||
}
|
||||
|
||||
fn pentagon = (len) => {
|
||||
const sg = startSketchOn('XY')
|
||||
|> startProfileAt([-len / 2, -len / 2], %)
|
||||
|> angledLine({ angle: 0, length: len }, %, 'a')
|
||||
|> angledLine({
|
||||
angle: segAng('a', %) + 180 - 108,
|
||||
length: len
|
||||
}, %, 'b')
|
||||
|> angledLine({
|
||||
angle: segAng('b', %) + 180 - 108,
|
||||
length: len
|
||||
}, %, 'c')
|
||||
|> angledLine({
|
||||
angle: segAng('c', %) + 180 - 108,
|
||||
length: len
|
||||
}, %, 'd')
|
||||
|> angledLine({
|
||||
angle: segAng('d', %) + 180 - 108,
|
||||
length: len
|
||||
}, %)
|
||||
|
||||
return sg
|
||||
}
|
||||
|
||||
const p = pentagon(8)
|
||||
|> extrude(5, %)
|
||||
|
||||
const plumbus0 = make_circle(p, 'a', [0, 0], 1.5)
|
||||
|> extrude(3, %)
|
||||
|> fillet({
|
||||
radius: 0.5,
|
||||
tags: ['arc-a', getOppositeEdge('arc-a', %)]
|
||||
}, %)
|
||||
|
||||
// const plumbus1 = make_circle(p, 'b', [0, 0], 1.5)
|
||||
// |> extrude(3, %)
|
||||
// |> fillet({
|
||||
// radius: 0.5,
|
||||
// tags: ['arc-b', getOppositeEdge('arc-b', %)]
|
||||
// }, %)
|
||||
"#;
|
||||
|
||||
let result = execute_and_snapshot(code, kittycad::types::UnitLength::Mm)
|
||||
.await
|
||||
.unwrap();
|
||||
twenty_twenty::assert_image("tests/executor/outputs/plumbus_fillets.png", &result, 1.0);
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 149 KiB After Width: | Height: | Size: 145 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 127 KiB After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 127 KiB After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 125 KiB |
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 102 KiB |
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 119 KiB |
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 109 KiB |
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 96 KiB |
BIN
src/wasm-lib/tests/executor/outputs/pentagon_fillet_desugar.png
Normal file
|
After Width: | Height: | Size: 159 KiB |
BIN
src/wasm-lib/tests/executor/outputs/pentagon_fillet_sugar.png
Normal file
|
After Width: | Height: | Size: 159 KiB |
BIN
src/wasm-lib/tests/executor/outputs/plumbus_fillets.png
Normal file
|
After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 102 KiB |
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 114 KiB |
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 112 KiB |
BIN
src/wasm-lib/tests/executor/outputs/riddle_small.png
Normal file
|
After Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 127 KiB |