您现在的位置:网站首页 > 经验分享 > 鞋业CAD软件柔性内核技术:源码[2]
设计师介绍:

昵称:烦夫子
类别:界面/平面设计师
年龄:37
现所在地:北京

查看该设计师的主页>>

关注好友

统计中心

主页浏览总数:24096
总积分:89
文章数:88
作品数:70

鞋业CAD软件柔性内核技术:源码[2]

作者:烦夫子  更新时间: 2007-11-19   浏览人数:17645  评论:0  
分享到:
VC源码工程:
 
                            柔性图形内核之二
                              VectorRun
 
//应用于鞋业CAD/CAM图形类程序设计
//我将逐步开放数以十万记的自主版权软件源码,谢谢大家的支持!

// VectorRun.h: interface for the VectorRun class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_VECTORRUN_H__E16E8F1D_2BAB_4C43_B16F_CEE4A0B65B66__INCLUDED_)
#define AFX_VECTORRUN_H__E16E8F1D_2BAB_4C43_B16F_CEE4A0B65B66__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

    /******************矢 量 计 算 类 *****************/

#include
#include "vector.h"

#define  MINI 1e-10
#undef   PI
#define  PI  3.14159265358979323846
#define  PI2  (2 * PI)
#define  DEGREES_TO_RADIANS (PI / 180)
#define  UNSET_VALUE  -1.23432101234321e+308

typedef long HRESULT;
#define  DEF_EXPORT _declspec(dllexport)

//变换函数
typedef Vector (* TransformFunc) (const Vector&);

class DEF_EXPORT VectorRun 
{
public:
 Vector    DotOrg;                  //文档的原点
 long      XOrgOffset;
    long      YOrgOffset;              //绘图的原点的平移量
    float     fPrintSx;                //for printer
    float     fPrintSy;                //for printer
    Vector   OffsetP;                //变换参数
    Vector    CenterP;
    Vector   RotateP;

public:
 VectorRun();
 virtual ~VectorRun();

public:

 float  Length (const Vector& v);

 //计算行列式
 // | v1.x v2.x |
 // | v1.y v2.y |
 float  Det (const Vector& v1, const Vector& v2);
 
 //计算角度和
 //a = (cos(a1), sin(a1)), b = (cos(a2), sin(a2))
 //return (cos(a1+b1), sin(a1+b1))
 Vector  AngleAdd (const Vector& a, const Vector& b);
 
 //计算角度差
 //a = (cos(a1), sin(a1)), b = (cos(a2), sin(a2))
 //return (cos(a1-b1), sin(a1-b1))
 Vector  AngleSub (const Vector& a, const Vector& b);
 
 //旋转v, angle.x = cos, angle.y = sin
 Vector  Rotate (const Vector& v, const Vector& angle);
 
 //X轴镜像点
 Vector  MirrorVectorX(const Vector& v1);
 
 //Y轴镜像点
 Vector  MirrorVectorY(const Vector& v1);
 
 //移动矢量,水平移动
 Vector  MoveVectorX(const Vector& v1, float len);
 
 //移动矢量,垂直移动
 Vector  MoveVectorY(const Vector& v1, float len);
 
 //矢量按轴中心对称
 Vector  ReverseVector (const Vector& v1);
 
 //功能:判断向量c的幅角是不是在end和start所确定的幅角范围内
 bool  InAngleRange(const Vector& start,const Vector& end,const Vector& c);
 
 //矢量角度,返回余旋
 double  Vectorangle(const Vector& v1);
 
 //计算单位矢量
 Vector  UnitVector (const Vector& v);
 
 //计算点P1到点P2的距离
 float  Distance (const Vector& p1, const Vector& p2);
 
 // 计算两点的中点
 Vector  MidTwoVector(const Vector& p1, const Vector& p2);
 
 
 //计算出比例分割两点之间的  比分点
 //    |______ l1 _________|______________ l2 ____________|
 //    |...................|..............................|
 //    p1                v(返回的点)                      p2
 
 Vector  ProrateTwoVector(const Vector& p1, const Vector& p2,float l1,float l2);
 
 
 //计算出比例分割两点之间的  比分点
 //    |______ u _________ |______________ 1-u ____________|
 //    |...................|..............................|
 //    p1                v(返回的点)                      p2
 Vector  ProrateTwoVector(const Vector& p1, const Vector& p2,float u);
 
 //求最小点
 Vector  VMin (const Vector& p1, const Vector& p2);
 
 //求最大点
 Vector  VMax (const Vector& p1, const Vector& p2);
  
 //函数功能:求取两个向量的夹角(0-180或0-PI)
 //入口参数:a,b 分别为向量a和向量b IsRadian:输出是否为弧度
 //输出参数:两向量的夹角
 double  AngleTwoVectors(const Vector& a,const Vector& b,BOOL IsRadian=TRUE);
 
    Vector WorldToDc( const Vector& v);
 
    Vector NullTrans (const Vector& v);
 
    Vector PrintTrans (const Vector& v);
 
 //数据变换
 void TransformData (TransformFunc f);
 
 Vector Transform1 (const Vector& v);
 
 Vector Transform1D (const Vector& v);
 
 // For rotate
 Vector Transform2 (const Vector& v);
 
 // For rotate Display
 Vector Transform2D (const Vector& v);
 
 // For mirror
 Vector Transform3 (const Vector& v);
 
 // For mirror display
 Vector Transform3D (const Vector& v);
 
 // For enlarge
 Vector Transform4 (const Vector& v);
 
 // For enlarge display
 Vector Transform4D (const Vector& v);
 
 // For scale
 Vector Transform5 (const Vector& v);
 
 // For scale
 Vector Transform5D (const Vector& v);
 
 // For scale different in x and y along baseline
 Vector Transform6 (const Vector& v);
 
 // For scale different in x and y along baseline
 Vector Transform6D (const Vector& v);
 
 // 对称点
 Vector Transform7 (const Vector& v);
 
 // 对称点
 Vector Transform7D (const Vector& v);
 
 // 重新设置点
 void ResetParam ();
 
 
 // 简化角度
 void SimplifyAngle (float& angle);
 
 // 对象复制
 //Object* Duplicate (Object* aObject);
 
 
 int Intersection (Vector& inter, const Vector& p1, const Vector& p2, const Vector& l1, const Vector& l2);
 //计算两条线段(p1-p2, l1-l2)的交点
 //返回: 0 -- 延长相交, 1 -- 相交, -1 -- 平行
 
 
 float PointToLine2(const Vector& pa, const Vector& pb, const Vector& pp);
 //计算点P到线段(L1,L2)的距离
 //总是返回正数
 
 float  PointToLine(const Vector& p, const Vector& l1, const Vector& l2,Vector& vDest);
 //计算点P到线段(L1,L2)的距离
 //以笛卡儿坐标横轴为标准
 //返回负数表示垂足不在线段上
 
 float PointToLine (const Vector& p, const Vector& l1, const Vector& l2);
 //计算点P到线段(L1,L2)的距离
 //返回负数表示垂足不在线段上
 
 
 float Delta (Vector& p0, Vector& n0, Vector& p1, Vector& n1);
 //功能: 计算对于曲线段i从p0点到p1点用直线段逼近的误差值, //采用近似圆弧拟合
 //参数: p0, p1 -- 曲线上两点, n0, n1 -- 曲线上两点的法矢
 //返回: 误差值
 
 
 float Det (float det[3][3]);
 //功能: 计算三阶行列式的值
 //参数: det -- 行列式的元素
 //返回: 行列式的值
 
 //tap 得到线段的法向量
 Vector GetVerVector(Vector v1,Vector v2,double r);
 
 double CalAngel(Vector &v);
 
 //tap  比较角度的大小
 int CompareAngle(Vector sv,Vector ev);
 
 //tap 在线段v1v2求一点,使它与p的连线垂直与v1v2
 Vector GetVerPoint(Vector v1, Vector v2,Vector p);
 
 Vector InterPoint (const Vector& p1, const Vector& p2, const Vector& l1, const Vector& l2);
 //计算两条线段(p1-p2, l1-l2)的交点
 //返回: interpoint 交点
 
 //tap 得到两条交线角平分线线上的一点
 Vector  GetCirclePoint(Vector v1,Vector v2,Vector v3,Vector v4,float r);
 
 //tap 得到圆弧的型值点,返回型值点个数
 int GetArcOrgPoint(Vector ctv,Vector stv,Vector edv,Vector org[] );
 
 //功能: 判断点p是否在v2-v1-v3的区域内
 BOOL PointInAngle(Vector v1, Vector v2,Vector v3,Vector p);
 
 //功能,得到形值点
 int GetCircleOrgPoint(Vector ctv,float r,Vector org[] );

};

#endif // !defined(AFX_VECTORRUN_H__E16E8F1D_2BAB_4C43_B16F_CEE4A0B65B66__INCLUDED_)

(目前有0人发表看法,  我要发表评论
我要评论:
  只有登录后才能评论!
评论者: 匿名游客    (立即登录 或 注册)