找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1288|回复: 4

[讨论]:类型转换:点->VARIANT(或一个2维数组->VARIANT )类型转换的方法?

[复制链接]
发表于 2005-6-13 01:13:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我在探索ads_point(或AcGePoint3d)(或者一个二维数组变量)怎样转换到VARIANT类型的方法,不知道有哪位朋友做过类似的方法,能不能给小弟点提示,谢谢了
祝你们开心。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-6-13 11:08:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
自己很早写的一段,参照MSDN里的说明,在VC里用COM的方法创建对象,感觉很繁琐,现在不用这种方法了。如果不清楚或又疑问,看MSDN。
void PointsToVariant(VARIANT* va,double* pt)
{
   SAFEARRAYBOUND rgsaBound;
   rgsaBound.lLbound=0L;
   rgsaBound.cElements=3;

   SAFEARRAY* psa=NULL;
   psa=SafeArrayCreate(VT_R8,1,&rgsaBound);
   for(long i=0;i<3;i++) SafeArrayPutElement(psa,&i,&pt);

   V_VT(va)=VT_ARRAY | VT_R8;
   V_ARRAY(va)=psa;
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-6-13 19:26:47 | 显示全部楼层

Re: [讨论]:类型转换:点->VARIANT(或一个2维数组->VARIANT )类型转换的方法?

最初由 梦幻神话 发布
[B]我在探索ads_point(或AcGePoint3d)(或者一个二维数组变量)怎样转换到VARIANT类型的方法,不知道有哪位朋友做过类似的方法,能不能给小弟点提示,谢谢了
祝你们开心。 [/B]


我昨天才会的!
把ads_point start_pt 转换到 VARIANT pt1;

        ads_point start_pt

        SAFEARRAYBOUND rgsaBound;
        rgsaBound.lLbound = 0L;
        rgsaBound.cElements = 3;
        SAFEARRAY* pStartPoint = NULL;
        pStartPoint = SafeArrayCreate(VT_R8, 1, &rgsaBound);

        // X value.
        //
        long i = 0;
        double value = start_pt[0];
        SafeArrayPutElement(pStartPoint, &i, &value);

        // Y value.
        //
        i++;
        value = start_pt[1];
        SafeArrayPutElement(pStartPoint, &i, &value);

        // Z value.
        //
        i++;
        value = start_pt[2];
        SafeArrayPutElement(pStartPoint, &i, &value);

        VARIANT pt1;
        VariantInit(&pt1);
        V_VT(&pt1) = VT_ARRAY | VT_R8;
        V_ARRAY(&pt1) = pStartPoint;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-6-13 21:10:13 | 显示全部楼层
不用那么麻烦,ARX开发包带了:
AcAxPoint2d/AcAxPoint3d可直接用.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-14 00:43:42 | 显示全部楼层
最初由 Hellow 发布
[B]不用那么麻烦,ARX开发包带了:
AcAxPoint2d/AcAxPoint3d可直接用. [/B]


能够用AcAxPoint2d/AcAxPoint3d那是最好不过的了.


我MSDN学到的..................

void Double2VARIANT()
{
VARIANT LowerLeft,UpperRight;
double point1[3],point2[3];
SAFEARRAYBOUND bound;
try
{
point1[0] = 100;
point1[1] = 100;
point1[2] = 0;

point2[0] = 200;
point2[1] = 200;
point2[2] = 0;

LowerLeft.vt=VT_ARRAY|VT_VARIANT;
UpperRight.vt=VT_ARRAY|VT_VARIANT;

bound.lLbound=0;
bound.cElements=3;

LowerLeft.parray=::SafeArrayCreate(VT_VARIANT,1,&bound);
if(LowerLeft.parray==NULL)
{
AfxThrowMemoryException();
}

UpperRight.parray=::SafeArrayCreate(VT_VARIANT,1,&bound);
if(UpperRight.parray==NULL)
{
AfxThrowMemoryException();
}

for(long i=0; i<3; i++)
{
::SafeArrayPutElement(LowerLeft.parray,&i,&point1);
::SafeArrayPutElement(UpperRight.parray,&i,&point2);
}
}

谢谢以上朋友的指点.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-21 23:58 , Processed in 0.230401 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表