全球FlexSim系统仿真中文论坛

标题: 【官网翻译】有没有办法在视图缩放的时候,保持对象的大小固定不变? [打印本页]

作者: 小太阳sun    时间: 2017-11-5 19:53
标题: 【官网翻译】有没有办法在视图缩放的时候,保持对象的大小固定不变?
原帖地址https://answers.flexsim.com/questions/44223/is-there-a-way-to-maintain-object-size-regardless.html原作者:Enrique Elizaga phil.bobo

Enrique Elizaga:
你好,
我想在视图缩放中保持保持一个对象大小(总是2 x 2 x 2)固定。这可能实现吗?

phil.bobo:
您可以通过添加以下代码使用自定义绘制触发器来获得此功能:
double size = 5.0;
int shapeIndex =getshapeindex("fs3d\\Processor\\Processor.3ds");
double scaleFactor = size *viewpointradius(view).value / 100.0;
if (viewprojectiontype(view).value == 1)// orthographic projection
         scaleFactor= size * 10.0 / viewmagnification(view).value;
fglScale(scaleFactor, scaleFactor,scaleFactor);
drawobject(view, shapeIndex, 0);

该示例代码绘制了一个处理器形状。您可以调整getshapeindex()的调用来绘制不同的形状。例如,使用“fs3d \\ General \\ Plane.3ds”绘制一个平面。
您可以调整大小变量以使其变大或变小。
附件是一个示例模型,展示了这一点。

Enrique Elizaga:
它好像将三维物体(球体)的基准点画在实体的中心(比如红色的)。我尝试了中心基准点的选择,但它不会起作用,它总是在一个角上。
phil.bobo:
添加fglTranslate()调用来翻译图形的位置:
double size = 5.0;
int shapeIndex =getshapeindex("fs3d\\General\\Sphere.3ds");
double scaleFactor =size*viewpointradius(view).value/100.0;
if (viewprojectiontype(view).value == 1)
         scaleFactor= size*10.0/viewmagnification(view).value;
fglTranslate(0.5, 0.5, 0.5);
fglScale(scaleFactor, scaleFactor, scaleFactor);
fglTranslate(-0.5, -0.5, -0.5);
drawobject(view, shapeIndex, 0);
或者在三维建模程序(如AC3D)中修改形状,使形状以原点为中心。一般的球体形状的位置是在它的原点,而不是它的中心。


作者: 李锋    时间: 2022-3-4 19:34
谢谢




欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/) Powered by Discuz! X3.3