文档章节

读取stl文件解析成mc op

开源中国首席问题男
 开源中国首席问题男
发布于 2015/09/10 17:41
字数 630
阅读 39
收藏 0
#include "stdafx.h"
#include <Windows.h>

double t[300000][3];
char temp[MAX_PATH];
double x1, y1, z1, x2, y2, z2, x3, y3, z3;
double maxx = 0, maxy = 0, maxz = 0;
bool redo[200][200][200];
typedef struct {
	int x, y, z;
} point_int;
void fill(point_int a, point_int b, point_int c) {
	point_int center;
	center.x = (a.x+b.x+c.x) / 3;
	center.y = (a.y + b.y + c.y) / 3;
	center.z = (a.z + b.z + c.z) / 3;
	redo[a.x + 100][a.y + 100][a.z + 100] = 1;//避免越界 +100
	redo[b.x + 100][b.y + 100][b.z + 100] = 1;
	redo[c.x + 100][c.y + 100][c.z + 100] = 1;
	if (center.x==a.x && center.y == a.y && center.z==a.z) return;
	if (center.x ==b.x && center.y == b.y && center.z == b.z) return;
	if (center.x == c.x && center.y == c.y && center.z == c.z) return;
	fill(a,b,center);
	fill(b,c,center);
	fill(a,c,center);
}


int main(int argc, char ** argv)
{
	printf("%d", argc);
	if (argc != 2) return 0;
	FILE *f;
	f = fopen(argv[1], "r");
	fscanf(f, "%s %s", temp, temp);
	int i = 0;
	for (i = 0;; i++) {
		fscanf(f, "%s %s", temp, temp);
		if (strcmp(temp, "normal") != 0)break;
		fscanf(f, "%lf %lf %lf\n", &x1, &y1, &z1);

		fscanf(f, "%s %s\n%s", temp, temp, temp);
		fscanf(f, "%lf %lf %lf\n", &x1, &y1, &z1);
		fscanf(f, "%s", temp);
		fscanf(f, "%lf %lf %lf\n", &x2, &y2, &z2);
		fscanf(f, "%s", temp);
		fscanf(f, "%lf %lf %lf\n", &x3, &y3, &z3);
		fscanf(f, "%s %s", temp, temp);
		t[i][0] = x1;
		t[i][1] = y1;
		t[i][2] = z1;
		maxx = maxx > t[i][0] ? maxx : t[i][0];
		maxy = maxy > t[i][1] ? maxy : t[i][1];
		maxz = maxz > t[i][2] ? maxz : t[i][2];
		i++;
		t[i][0] = x2;
		t[i][1] = y2;
		t[i][2] = z2;
		maxx = maxx > t[i][0] ? maxx : t[i][0];
		maxy = maxy > t[i][1] ? maxy : t[i][1];
		maxz = maxz > t[i][2] ? maxz : t[i][2];
		i++;
		t[i][0] = x3;
		t[i][1] = y3;
		t[i][2] = z3;
		maxx = maxx > t[i][0] ? maxx : t[i][0];
		maxy = maxy > t[i][1] ? maxy : t[i][1];
		maxz = maxz > t[i][2] ? maxz : t[i][2];
	}
	double r = 0;
	r = r < maxx ? maxx : r;
	r = r < maxy ? maxy : r;
	r = r < maxz ? maxz : r;
	int dx, dy, dz, size = 100;
	printf("input [dx dy dz](0 0 100):");
	scanf("%d %d %d", &dx, &dy, &dz);
	printf("input size scale(max size):");
	scanf("%d", &size);

	printf("input the block name:");
	scanf("%s", temp);
	freopen("d:\\out.txt", "w", stdout);

	memset(redo, 0, sizeof(redo));

	//scale
	for (int j = 0; j < i; j++) {
		for (int k = 0; k < 3; k++) {
			t[j + k][0] = t[j+k][0] / r * size;
			t[j + k][1] = t[j+k][1] / r * size;
			t[j + k][2] = t[j+k][2] / r * size;
			//printf("setblock  %.0lf %.0lf %.0lf %s\n", t[j][0], t[j][1], t[j][2],temp);
		}
		point_int a, b, c;
		a.x = t[j][0];
		a.y = t[j][1];
		a.z = t[j][2];

		b.x = t[j+1][0];
		b.y = t[j+1][1];
		b.z = t[j+1][2];

		c.x = t[j+2][0];
		c.y = t[j+2][1];
		c.z = t[j+2][2];

		fill(a, b, c);

	}

	//for (int j = 0; j < i; j++)
	//	redo[(int)t[j][0] + 100][(int)t[j][1] + 100][(int)t[j][2] + 100] = 1;
	for (int a = 0; a < 200; a++)
		for (int b = 0; b< 200; b++)
			for (int c = 0; c < 200; c++)
				if (redo[a][b][c])
					printf("setblock %d %d %d %s\n", a - 100 + dx, c - 100 + dz, b - 100 + dy, temp);
	return 0;
}


© 著作权归作者所有

上一篇: DCS
下一篇: nodejs 正向代理
开源中国首席问题男
粉丝 1
博文 3
码字总数 818
作品 0
郑州
私信 提问
架构编译器框架系统 LLVM 使用简介

LLVM 是什么 LLVM 是 low level virtual machine(底层虚拟机)的简称,它是一个开源的编译器架构,已经被成功应用到多个应用领域。LLVM 的主要作用是它可以作为多种语言的后端,它可以提供可...

Konghy
2015/08/20
1K
0
[CLI/C++].NET托管代码和非托管代码的相互调用

场景三:现有C++原代码,包装后供C#调用。 C++的原代码,实际上可以直接编译成托管代码。MFC也好ATL也好……这样看起来在.NET中最强大的编程语言就是C++了:它不仅可以编写托管 程序,甚至可...

Yong_Luo
2010/10/01
2.6K
0
开源库TinyXML2简介及使用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/fengbingchun/article/details/99689509 TinyXML2是一个开源、简单、...

fengbingchun
08/17
0
0
如何实现自动控制MFC单文档程序界面截图批量化输出到word???

请问,如何实现自动控制MFC单文档程序界面截图,要截取的是如下图所示,批量化输出到word? 现在已经实现了点击打开按钮读取任意的txt格式数据解析到MFC界面功能,现在要实现的是如何批量读取...

gl8787
03/08
50
2
TinyXML:一个优秀的C++ XML解析器

读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。 TinyXML是一个开源的解析XML的解...

zmldndx
2013/10/10
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

堆”和“栈

C++作为一款C语言的升级版本,具有非常强大的功能。它不但能够支持各种程序设计风格,而且还具有C语言的所有功能。我们在这里为大家介绍的是其中一个比较重要的内容,C++内存区域的基本介绍。...

SibylY
35分钟前
3
0
总结:Https

一、介绍 简单理解,https即在http协议的基础上,增加了SSL协议,保障数据传输的安全性。 它由以前的http—–>tcp,改为http——>SSL—–>tcp;https采用了共享密钥加密+公开密钥加密的方式 ...

浮躁的码农
37分钟前
4
0
数据库表与表之间的一对一、一对多、多对多关系

表1 foreign key 表2 多对一:表 1 的多条记录对应表 2 的一条记录 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 表2的多条记...

Garphy
今天
7
0
MySQL 表崩溃修复

MySQL日志报错 2019-10-19 13:41:51 19916 [ERROR] /usr/local/mysql/bin/mysqld: Table './initread_hss/user_info' is marked as crashed and should be repaired2019-10-19 13:41:51 1......

雁南飞丶
今天
6
0
Error和Exception

1.Error类和Exception类都是继承Throwable类 2.Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问...

大瑞清_liurq
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部