1
0
mirror of https://github.com/ToxicCrack/PrintABrick.git synced 2025-05-15 20:00:08 -07:00

Cover commands with tests

This commit is contained in:
Unknown 2017-06-24 11:46:46 +02:00
parent 709e069f02
commit d94f15d1d3
21 changed files with 458 additions and 22 deletions

View File

@ -25,6 +25,7 @@
<directory>src/*Bundle/Resources</directory> <directory>src/*Bundle/Resources</directory>
<directory>src/*Bundle/Api/Client</directory> <directory>src/*Bundle/Api/Client</directory>
<directory>src/*Bundle/DataFixtures</directory> <directory>src/*Bundle/DataFixtures</directory>
<directory>src/*/Exception</directory>
<directory>src/*/*Bundle/Resources</directory> <directory>src/*/*Bundle/Resources</directory>
<directory>src/*/Bundle/*Bundle/Resources</directory> <directory>src/*/Bundle/*Bundle/Resources</directory>
</exclude> </exclude>

View File

@ -15,7 +15,7 @@ class FormatTransformer
public function bytesToSize($bytes, $precision = 2) public function bytesToSize($bytes, $precision = 2)
{ {
if ($bytes == 0) { if ($bytes == 0) {
return '0.00 B'; return round(0, $precision).' B';
} }
$suffix = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']; $suffix = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];

View File

@ -9,6 +9,9 @@ use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
/**
* @codeCoverageIgnore
*/
class InitDataCommand extends ContainerAwareCommand class InitDataCommand extends ContainerAwareCommand
{ {
protected function configure() protected function configure()

View File

@ -48,12 +48,6 @@ class LoadLdrawCommand extends ContainerAwareCommand
protected function execute(InputInterface $input, OutputInterface $output) protected function execute(InputInterface $input, OutputInterface $output)
{ {
if (!$this->lock()) {
$output->writeln('The command is already running in another process.');
return 1;
}
$this->modelLoader->setOutput($output); $this->modelLoader->setOutput($output);
$this->modelLoader->setRewrite($input->getOption('update')); $this->modelLoader->setRewrite($input->getOption('update'));
@ -97,8 +91,6 @@ class LoadLdrawCommand extends ContainerAwareCommand
$output->writeln(['Done with "'.$errors.'" errors.']); $output->writeln(['Done with "'.$errors.'" errors.']);
} }
$this->release();
return 0; return 0;
} }
} }

View File

@ -37,7 +37,6 @@ class LoadRebrickableDataCommand extends ContainerAwareCommand
protected function execute(InputInterface $input, OutputInterface $output) protected function execute(InputInterface $input, OutputInterface $output)
{ {
$this->rebrickableLoader = $this->getContainer()->get('service.loader.rebrickable');
$this->rebrickableLoader->setOutput($output); $this->rebrickableLoader->setOutput($output);
try { try {

View File

@ -0,0 +1,16 @@
<?php
namespace LoaderBundle\Exception\Loader;
use Symfony\Component\Form\Exception\LogicException;
use Throwable;
class LoadingModelFailedException extends LogicException
{
public function __construct($file, $message = '', $code = 0, Throwable $previous = null)
{
$message = sprintf('Loading "%s" failed.', $file);
parent::__construct($message, $code, $previous);
}
}

View File

@ -75,6 +75,9 @@ abstract class BaseLoader
$this->progressBar->start(); $this->progressBar->start();
} }
/**
* @codeCoverageIgnore
*/
protected function progressCallback($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) protected function progressCallback($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max)
{ {
switch ($notification_code) { switch ($notification_code) {

View File

@ -15,6 +15,8 @@ use League\Flysystem\Exception;
use League\Flysystem\Filesystem; use League\Flysystem\Filesystem;
use LoaderBundle\Exception\ConvertingFailedException; use LoaderBundle\Exception\ConvertingFailedException;
use LoaderBundle\Exception\FileException; use LoaderBundle\Exception\FileException;
use LoaderBundle\Exception\Loader\LoadingModelFailedException;
use LoaderBundle\Exception\Loader\LoadingRebrickableFailedException;
use LoaderBundle\Exception\Loader\MissingContextException; use LoaderBundle\Exception\Loader\MissingContextException;
use LoaderBundle\Exception\ParseErrorException; use LoaderBundle\Exception\ParseErrorException;
use LoaderBundle\Service\Stl\StlConverterService; use LoaderBundle\Service\Stl\StlConverterService;
@ -78,13 +80,14 @@ class ModelLoader extends BaseLoader
*/ */
public function setLDrawLibraryContext($ldrawLibrary) public function setLDrawLibraryContext($ldrawLibrary)
{ {
try { if(!file_exists($ldrawLibrary)) {
$adapter = new Local($ldrawLibrary); $this->logger->error('Wrong library context');
$this->ldrawLibraryContext = new Filesystem($adapter); throw new MissingContextException($ldrawLibrary);
$this->stlConverter->setLDrawLibraryContext($this->ldrawLibraryContext);
} catch (Exception $exception) {
$this->logger->error($exception->getMessage());
} }
$adapter = new Local($ldrawLibrary);
$this->ldrawLibraryContext = new Filesystem($adapter);
$this->stlConverter->setLDrawLibraryContext($this->ldrawLibraryContext);
} }
/** /**
@ -152,6 +155,7 @@ class ModelLoader extends BaseLoader
} catch (\Exception $e) { } catch (\Exception $e) {
$connection->rollBack(); $connection->rollBack();
$this->logger->error($e->getMessage()); $this->logger->error($e->getMessage());
throw new LoadingModelFailedException($file);
} }
} }
@ -374,12 +378,8 @@ class ModelLoader extends BaseLoader
*/ */
private function loadFileContext($file) private function loadFileContext($file)
{ {
try { $adapter = new Local(dirname($file));
$adapter = new Local(dirname($file)); $this->fileContext = new Filesystem($adapter);
$this->fileContext = new Filesystem($adapter);
} catch (Exception $exception) {
$this->logger->error($exception->getMessage());
}
} }
/** /**

View File

@ -19,6 +19,7 @@ class FormatTransformerTest extends TestCase
public function testBytesToSize() public function testBytesToSize()
{ {
$this->assertEquals('0 B', $this->transformer->bytesToSize(0, 2));
$this->assertEquals('1.5 MB', $this->transformer->bytesToSize(512 * 1024 + 1024 * 1024, 2)); $this->assertEquals('1.5 MB', $this->transformer->bytesToSize(512 * 1024 + 1024 * 1024, 2));
$this->assertEquals('512 B', $this->transformer->bytesToSize(512, 2)); $this->assertEquals('512 B', $this->transformer->bytesToSize(512, 2));
$this->assertEquals('1 KB', $this->transformer->bytesToSize(1024, 2)); $this->assertEquals('1 KB', $this->transformer->bytesToSize(1024, 2));

View File

@ -0,0 +1,40 @@
<?php
namespace Tests\LoaderBundle\Command;
use LoaderBundle\Command\LoadImagesCommand;
use LoaderBundle\Command\LoadLdrawCommand;
use LoaderBundle\Service\ImageLoader;
use LoaderBundle\Service\ModelLoader;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\Console\Tester\CommandTester;
class loadImagesCommandTest extends KernelTestCase
{
public function testLoadRebrickable()
{
self::bootKernel();
$application = new Application(self::$kernel);
$imageLoader = $this->createMock(ImageLoader::class);
$imageLoader->expects($this->once())->method('loadColorFromRebrickable')->with(-1);
$imageLoader->expects($this->once())->method('loadMissingModelImages');
$application->add(new LoadImagesCommand(null,$imageLoader));
$command = $application->find('app:load:images');
$tester = new CommandTester($command);
$tester->execute(
[
'--rebrickable' => true,
'--color' => -1,
'--missing' => true
]
);
}
}

View File

@ -0,0 +1,107 @@
<?php
namespace Tests\LoaderBundle\Command;
use LoaderBundle\Command\LoadLdrawCommand;
use LoaderBundle\Service\ModelLoader;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\Console\Tester\CommandTester;
class loadLdrawCommandTest extends KernelTestCase
{
public function testMissingArgument()
{
self::bootKernel();
$application = new Application(self::$kernel);
$modelLoader = $this->createMock(ModelLoader::class);
$application->add(new LoadLdrawCommand(null,$modelLoader));
$command = $application->find('app:load:ldraw');
$tester = new CommandTester($command);
$tester->execute(
['--ldraw' => 'path2']
);
$this->assertEquals('Either the --all or --file option is required'."\n",$tester->getDisplay());
}
public function testDownload()
{
self::bootKernel();
$application = new Application(self::$kernel);
$modelLoader = $this->createMock(ModelLoader::class);
$modelLoader->expects($this->once())->method('downloadLibrary');
$application->add(new LoadLdrawCommand(null , $modelLoader));
$command = $application->find('app:load:ldraw');
$tester = new CommandTester($command);
$tester->execute([
'--all' => true
]);
}
public function testLoadAll()
{
self::bootKernel();
$application = new Application(self::$kernel);
$modelLoader = $this->createMock(ModelLoader::class);
$modelLoader->expects($this->once())->method('loadAll');
$application->add(new LoadLdrawCommand(null,$modelLoader));
$command = $application->find('app:load:ldraw');
$tester = new CommandTester($command);
$tester->execute(
['--ldraw' => 'path', '--all' => true]
);
}
public function testLoadFile()
{
self::bootKernel();
$application = new Application(self::$kernel);
$modelLoader = $this->createMock(ModelLoader::class);
$modelLoader->expects($this->once())->method('loadOne');
$application->add(new LoadLdrawCommand(null,$modelLoader));
$command = $application->find('app:load:ldraw');
$tester = new CommandTester($command);
$tester->execute(
['--ldraw' => 'path', '--file' => __DIR__.'/fixtures/file.dat']
);
}
public function testFileNotFound()
{
self::bootKernel();
$application = new Application(self::$kernel);
$modelLoader = $this->createMock(ModelLoader::class);
$application->add(new LoadLdrawCommand(null,$modelLoader));
$command = $application->find('app:load:ldraw');
$file = __DIR__.'/fixtures/.dat';
$tester = new CommandTester($command);
$tester->execute(
['--ldraw' => 'path', '--file' => $file]
);
$this->assertEquals('File '. $file.' not found'."\n",$tester->getDisplay());
}
}

View File

@ -0,0 +1,52 @@
<?php
namespace Tests\LoaderBundle\Command;
use LoaderBundle\Command\LoadLdrawCommand;
use LoaderBundle\Command\LoadRelationCommand;
use LoaderBundle\Service\ModelLoader;
use LoaderBundle\Service\RelationLoader;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\Console\Tester\CommandTester;
class loadRelationCommandTest extends KernelTestCase
{
public function testLoadAll()
{
self::bootKernel();
$application = new Application(self::$kernel);
$relationLoader = $this->createMock(RelationLoader::class);
$relationLoader->expects($this->once())->method('loadAll');
$application->add(new LoadRelationCommand(null,$relationLoader));
$command = $application->find('app:load:relations');
$tester = new CommandTester($command);
$tester->execute(
['--rewrite' => true]
);
}
public function testLoadMissing()
{
self::bootKernel();
$application = new Application(self::$kernel);
$relationLoader = $this->createMock(RelationLoader::class);
$relationLoader->expects($this->once())->method('loadNotPaired');
$application->add(new LoadRelationCommand(null,$relationLoader));
$command = $application->find('app:load:relations');
$tester = new CommandTester($command);
$tester->execute(
['--rewrite' => false]
);
}
}

View File

@ -8,6 +8,7 @@ use AppBundle\Entity\LDraw\Model;
use AppBundle\Repository\LDraw\AliasRepository; use AppBundle\Repository\LDraw\AliasRepository;
use AppBundle\Repository\LDraw\ModelRepository; use AppBundle\Repository\LDraw\ModelRepository;
use League\Flysystem\File; use League\Flysystem\File;
use LoaderBundle\Exception\Loader\MissingContextException;
use LoaderBundle\Service\ModelLoader; use LoaderBundle\Service\ModelLoader;
use LoaderBundle\Service\Stl\StlConverterService; use LoaderBundle\Service\Stl\StlConverterService;
use LoaderBundle\Util\RelationMapper; use LoaderBundle\Util\RelationMapper;
@ -65,6 +66,14 @@ class ModelLoaderTest extends BaseTest
$this->assertEquals('path', $models[0]->getPath()); $this->assertEquals('path', $models[0]->getPath());
} }
/**
* @expectedException LoaderBundle\Exception\Loader\MissingContextException
*/
public function testFileNonExistingContext()
{
$this->modelLoader->setLDrawLibraryContext(__DIR__.'/fixtures/nonexisting/');
}
public function testFileContext() public function testFileContext()
{ {
$this->modelLoader->setLDrawLibraryContext(__DIR__.'/fixtures/librarycontext/'); $this->modelLoader->setLDrawLibraryContext(__DIR__.'/fixtures/librarycontext/');
@ -102,6 +111,27 @@ class ModelLoaderTest extends BaseTest
$this->assertEquals('licensed', $models[0]->getId()); $this->assertEquals('licensed', $models[0]->getId());
} }
public function testLoadSubpart()
{
$this->modelLoader->setLDrawLibraryContext(__DIR__.'/fixtures/subparts/');
$this->modelLoader->loadOne(__DIR__.'/fixtures/subparts/parts/3815c01.dat');
$models = $this->modelRepository->findAll();
$this->assertEquals(4, count($models));
}
/**
* @expectedException LoaderBundle\Exception\Loader\LoadingModelFailedException
*/
public function testOneMissing()
{
$this->modelLoader->setLDrawLibraryContext(__DIR__.'/fixtures/subparts/');
$this->modelLoader->loadOne(__DIR__.'/fixtures/subparts/parts/381c01.dat');
$models = $this->modelRepository->findAll();
}
public function testIsIncluded() public function testIsIncluded()
{ {
$this->modelLoader->setLDrawLibraryContext(__DIR__.'/fixtures/included/'); $this->modelLoader->setLDrawLibraryContext(__DIR__.'/fixtures/included/');
@ -185,6 +215,10 @@ class ModelLoaderTest extends BaseTest
$library = $this->modelLoader->downloadLibrary(__DIR__.'/fixtures/ldraw.zip'); $library = $this->modelLoader->downloadLibrary(__DIR__.'/fixtures/ldraw.zip');
$this->assertDirectoryExists($library); $this->assertDirectoryExists($library);
$library = $this->modelLoader->downloadLibrary(__DIR__.'/fixtures/completeCA.zip');
$this->assertDirectoryExists($library);
} }
/** /**

View File

@ -0,0 +1,49 @@
0 Cylinder 1.0
0 Name: 4-4cyli.dat
0 Author: James Jessiman
0 !LDRAW_ORG Primitive UPDATE 2005-01
0 !LICENSE Redistributable under CCAL version 2.0 : see CAreadme.txt
0 BFC CERTIFY CCW
0 !HISTORY 1998-12-15 [PTadmin] Official Update 1998-10
0 !HISTORY 2002-03-23 [sbliss] Added BFC statement; merged headers from files in distributions LDraw 0.27 and Complete.
0 !HISTORY 2002-04-25 [PTadmin] Official Update 2002-02
0 !HISTORY 2004-12-14 [guyvivan] BFC CCW
0 !HISTORY 2005-12-28 [PTadmin] Official Update 2005-01
0 !HISTORY 2007-06-24 [PTadmin] Header formatted for Contributor Agreement
0 !HISTORY 2008-07-01 [PTadmin] Official Update 2008-01
4 16 1 1 0 0.9239 1 0.3827 0.9239 0 0.3827 1 0 0
5 24 1 0 0 1 1 0 0.9239 0 0.3827 0.9239 0 -0.3827
4 16 0.9239 1 0.3827 0.7071 1 0.7071 0.7071 0 0.7071 0.9239 0 0.3827
5 24 0.9239 0 0.3827 0.9239 1 0.3827 0.7071 0 0.7071 1 0 0
4 16 0.7071 1 0.7071 0.3827 1 0.9239 0.3827 0 0.9239 0.7071 0 0.7071
5 24 0.7071 0 0.7071 0.7071 1 0.7071 0.3827 0 0.9239 0.9239 0 0.3827
4 16 0.3827 1 0.9239 0 1 1 0 0 1 0.3827 0 0.9239
5 24 0.3827 0 0.9239 0.3827 1 0.9239 0 0 1 0.7071 0 0.7071
4 16 0 1 1 -0.3827 1 0.9239 -0.3827 0 0.9239 0 0 1
5 24 0 0 1 0 1 1 -0.3827 0 0.9239 0.3827 0 0.9239
4 16 -0.3827 1 0.9239 -0.7071 1 0.7071 -0.7071 0 0.7071 -0.3827 0 0.9239
5 24 -0.3827 0 0.9239 -0.3827 1 0.9239 -0.7071 0 0.7071 0 0 1
4 16 -0.7071 1 0.7071 -0.9239 1 0.3827 -0.9239 0 0.3827 -0.7071 0 0.7071
5 24 -0.7071 0 0.7071 -0.7071 1 0.7071 -0.9239 0 0.3827 -0.3827 0 0.9239
4 16 -0.9239 1 0.3827 -1 1 0 -1 0 0 -0.9239 0 0.3827
5 24 -0.9239 0 0.3827 -0.9239 1 0.3827 -1 0 0 -0.7071 0 0.7071
4 16 -1 1 0 -0.9239 1 -0.3827 -0.9239 0 -0.3827 -1 0 0
5 24 -1 0 0 -1 1 0 -0.9239 0 -0.3827 -0.9239 0 0.3827
4 16 -0.9239 1 -0.3827 -0.7071 1 -0.7071 -0.7071 0 -0.7071 -0.9239 0 -0.3827
5 24 -0.9239 0 -0.3827 -0.9239 1 -0.3827 -0.7071 0 -0.7071 -1 0 0
4 16 -0.7071 1 -0.7071 -0.3827 1 -0.9239 -0.3827 0 -0.9239 -0.7071 0 -0.7071
5 24 -0.7071 0 -0.7071 -0.7071 1 -0.7071 -0.3827 0 -0.9239 -0.9239 0 -0.3827
4 16 -0.3827 1 -0.9239 0 1 -1 0 0 -1 -0.3827 0 -0.9239
5 24 -0.3827 0 -0.9239 -0.3827 1 -0.9239 0 0 -1 -0.7071 0 -0.7071
4 16 0 1 -1 0.3827 1 -0.9239 0.3827 0 -0.9239 0 0 -1
5 24 0 0 -1 0 1 -1 0.3827 0 -0.9239 -0.3827 0 -0.9239
4 16 0.3827 1 -0.9239 0.7071 1 -0.7071 0.7071 0 -0.7071 0.3827 0 -0.9239
5 24 0.3827 0 -0.9239 0.3827 1 -0.9239 0.7071 0 -0.7071 0 0 -1
4 16 0.7071 1 -0.7071 0.9239 1 -0.3827 0.9239 0 -0.3827 0.7071 0 -0.7071
5 24 0.7071 0 -0.7071 0.7071 1 -0.7071 0.9239 0 -0.3827 0.3827 0 -0.9239
4 16 0.9239 1 -0.3827 1 1 0 1 0 0 0.9239 0 -0.3827
5 24 0.9239 0 -0.3827 0.9239 1 -0.3827 1 0 0 0.7071 0 -0.7071
0

View File

@ -0,0 +1,28 @@
0 ~Cylinder 2 x 2 with Dome Top with Blocked Stud
0 Name: s\30367as01.dat
0 Author: Magnus Forsberg [MagFors]
0 !LDRAW_ORG Subpart UPDATE 2012-03
0 !LICENSE Redistributable under CCAL version 2.0 : see CAreadme.txt
0 BFC CERTIFY CCW
0 !HISTORY 2012-12-28 [PTadmin] Official Update 2012-03
1 16 0 20 0 -1 0 0 0 -1 0 0 0 1 STUD4A.dat
0 BFC INVERTNEXT
1 16 0 4 0 6 0 0 0 16 0 0 0 6 4-4cyli.dat
1 16 0 4 0 6 0 0 0 1 0 0 0 6 4-4edge.dat
1 16 0 4 0 0 0 2 0 -1 0 2 0 0 4-4ring2.dat
1 16 0 16 0 8 0 0 0 4 0 0 0 8 4-4cyli.dat
0 BFC INVERTNEXT
1 16 0 16 0 16 0 0 0 4 0 0 0 16 4-4cyli.dat
1 16 0 0 0 1 0 0 0 1 0 0 0 1 s\30367s01.dat
1 16 0 0 0 0 0 -1 0 1 0 1 0 0 s\30367s01.dat
1 16 0 0 0 -1 0 0 0 1 0 0 0 -1 s\30367s01.dat
1 16 0 0 0 0 0 1 0 1 0 -1 0 0 s\30367s01.dat
0 // stud
1 16 0 0 0 1 0 0 0 1 0 0 0 1 filstud3.dat
1 16 0 0 0 6 0 0 0 1 0 0 0 6 4-4edge.dat
1 16 0 0 0 2 0 0 0 1 0 0 0 2 4-4ring3.dat
1 16 0 0 0 1 0 0 0 1 0 0 0 1 stud2a.dat

View File

@ -0,0 +1,23 @@
0 Minifig Hips
0 Name: 3815.dat
0 Author: Steve Bliss [sbliss]
0 !LDRAW_ORG Part UPDATE 2010-02
0 !LICENSE Redistributable under CCAL version 2.0 : see CAreadme.txt
0 BFC CERTIFY CW
0 !HISTORY 1997-10-29 [PTadmin] Official Update 1997-16
0 !HISTORY 1999-01-01 [cwdee] Modifications
0 !HISTORY 1999-02-01 [PTadmin] Official Update 1999-01
0 !HISTORY 2004-06-15 [nielsk] BFC'd
0 !HISTORY 2004-11-06 [PTadmin] Official Update 2004-04
0 !HISTORY 2007-07-27 [PTadmin] Header formatted for Contributor Agreement
0 !HISTORY 2008-07-01 [PTadmin] Official Update 2008-01
0 !HISTORY 2009-01-28 [Philo] Moved crotch to main part
0 !HISTORY 2009-08-24 [PTadmin] Renamed from 970
0 !HISTORY 2010-07-05 [PTadmin] Official Update 2010-02
4 16 18 0 -10 18 6 -10 -18 6 -10 -18 0 -10
1 16 -2 12 0 0 4 0 -6.364 0 6.364 -6.364 0 -6.364 5-16cyli.dat
1 16 0 0 0 1 0 0 0 1 0 0 0 1 s\3815s01.dat
0 //

View File

@ -0,0 +1,21 @@
0 Minifig Hips and Legs
0 Name: 3815c01.dat
0 Author: Steve Bliss [sbliss]
0 !LDRAW_ORG Shortcut UPDATE 2016-01
0 !LICENSE Redistributable under CCAL version 2.0 : see CAreadme.txt
0 BFC CERTIFY CCW
0 !HISTORY 2002-02-18 [PTadmin] Official Update 2002-01
0 !HISTORY 2007-07-27 [PTadmin] Header formatted for Contributor Agreement
0 !HISTORY 2008-07-01 [PTadmin] Official Update 2008-01
0 !HISTORY 2009-08-24 [PTadmin] Renamed from 970c00
0 !HISTORY 2010-07-05 [PTadmin] Official Update 2010-02
0 !HISTORY 2015-12-30 [cwdee] Updated description
0 !HISTORY 2015-12-30 [PTadmin] Official Update 2015-02
0 !HISTORY 2015-12-31 [Steffen] Add BFC statement
0 !HISTORY 2016-12-31 [PTadmin] Official Update 2016-01
1 16 0 0 0 1 0 0 0 1 0 0 0 1 3815.dat
1 16 0 12 0 1 0 0 0 1 0 0 0 1 3816.dat
1 16 0 12 0 1 0 0 0 1 0 0 0 1 3817.dat

View File

@ -0,0 +1,34 @@
0 Minifig Leg Right
0 Name: 3816.dat
0 Author: Steve Bliss [sbliss]
0 !LDRAW_ORG Part UPDATE 2009-03
0 !LICENSE Redistributable under CCAL version 2.0 : see CAreadme.txt
0 BFC CERTIFY CCW
0 !HELP Move down 12 units to align with hips
0 !HISTORY 1997-10-29 [PTadmin] Official Update 1997-16
0 !HISTORY 1999-02-01 [PTadmin] Official Update 1999-01
0 !HISTORY 2000-05-07 [PTadmin] Official Update 2000-01
0 !HISTORY 2002-04-10 [fwcain] Fixed overlapping quad...
0 !HISTORY 2002-04-25 [PTadmin] Official Update 2002-02
0 !HISTORY 2002-05-29 [fwcain] Moved all front surfaces to "main" file (from subfile)...
0 !HISTORY 2002-08-18 [PTadmin] Official Update 2002-04
0 !HISTORY 2007-07-27 [PTadmin] Header formatted for Contributor Agreement
0 !HISTORY 2008-07-01 [PTadmin] Official Update 2008-01
0 !HISTORY 2008-12-31 [tchang] Add BFC
0 !HISTORY 2009-08-24 [PTadmin] Moved from 971
0 !HISTORY 2009-12-29 [PTadmin] Official Update 2009-03
1 16 0 0 0 1 0 0 0 1 0 0 0 1 s\3816s01.dat
0
4 16 -19.18 20 -6 -19.18 20 -11 -1.5 20 -11 -1.5 20 -6
4 16 -19.18 20 -11 -19.5 28 -11 -1.5 28 -11 -1.5 20 -11
4 16 -19.18 20 -6 -1.5 20 -6 -1.5 7.7 -6 -18.68 7.7 -6
4 16 -18.68 7.7 -6 -2 7.7 -6 -2 6.74 -6 -18.64 6.74 -6
4 16 -18.5 3.42 -8.28 -18.64 6.74 -6 -2 6.74 -6 -2 3.42 -8.28
4 16 -18.36 0 -9 -18.5 3.42 -8.28 -2 3.42 -8.28 -2 0 -9
4 16 -18.36 0 -9 -2 0 -9 -2 -3.42 -8.28 -18.23 -3.42 -8.28
4 16 -18.11 -6.3 -6.3 -18.23 -3.42 -8.28 -2 -3.42 -8.28 -2 -6.3 -6.3
0

View File

@ -0,0 +1,33 @@
0 Minifig Leg Left
0 Name: 3817.dat
0 Author: Steve Bliss [sbliss]
0 !LDRAW_ORG Part UPDATE 2009-03
0 !LICENSE Redistributable under CCAL version 2.0 : see CAreadme.txt
0 BFC CERTIFY CCW
0 !HELP Move down 12 units to align with hips
0 !HISTORY 1997-10-29 [PTadmin] Official Update 1997-16
0 !HISTORY 1999-02-01 [PTadmin] Official Update 1999-01
0 !HISTORY 2002-04-10 [fwcain] Fixed overlapping quad...
0 !HISTORY 2002-04-25 [PTadmin] Official Update 2002-02
0 !HISTORY 2002-05-29 [fwcain] Moved all front surfaces to "main" file (from subfile)...
0 !HISTORY 2002-08-18 [PTadmin] Official Update 2002-04
0 !HISTORY 2007-07-27 [PTadmin] Header formatted for Contributor Agreement
0 !HISTORY 2008-07-01 [PTadmin] Official Update 2008-01
0 !HISTORY 2008-12-31 [tchang] Add BFC
0 !HISTORY 2009-08-24 [PTadmin] Moved from 972
0 !HISTORY 2009-12-29 [PTadmin] Official Update 2009-03
1 16 0 0 0 1 0 0 0 1 0 0 0 1 s\3817s01.dat
0
4 16 1.5 20 -6 1.5 20 -11 19.18 20 -11 19.18 20 -6
4 16 1.5 20 -11 1.5 28 -11 19.5 28 -11 19.18 20 -11
4 16 18.68 7.7 -6 1.5 7.7 -6 1.5 20 -6 19.18 20 -6
4 16 18.64 6.74 -6 2 6.74 -6 2 7.7 -6 18.68 7.7 -6
4 16 2 3.42 -8.28 2 6.74 -6 18.64 6.74 -6 18.5 3.42 -8.28
4 16 2 0 -9 2 3.42 -8.28 18.5 3.42 -8.28 18.36 0 -9
4 16 18.23 -3.42 -8.28 2 -3.42 -8.28 2 0 -9 18.36 0 -9
4 16 2 -6.3 -6.3 2 -3.42 -8.28 18.23 -3.42 -8.28 18.11 -6.3 -6.3
0