找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 860|回复: 14

[求助]:如何用MDL得到microstation 当前文件的点、线、面、体的几何信息!

[复制链接]
发表于 2005-3-23 18:40:53 | 显示全部楼层 |阅读模式

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

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

×
如何用MDL得到microstation 当前文件的点、线、面、体的几何信息!比如圆的圆心,半径。线的端点!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-3-24 08:22:42 | 显示全部楼层
mdlParams_getActive, mdlParams_setActive


int mdlParams_getActive

(

void    *param,        /* <= parameter value */

int     paramName         /* => parameter name */

int mdlParams_setActive

(

void    *param,        /* => parameter value */

int     paramName         /* => parameter name */

)        ;

Description:
mdlParams_getActive returns the value of a MicroStation setting defined below. The parameter returned in param is determined by the value of paramName.

The mdlParams_setActive function is used to change the value of a setting. The new value is given in param. The setting to be changed is determined by the value of paramName as defined in the table below:

When passing values listed below to mdlParams_setActive, pay special attention to whether you should be passing a pointer or a value in param. mdlParams_getActive will always require a pointer for param.

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

使用道具 举报

发表于 2005-3-24 13:19:27 | 显示全部楼层
楼上得不对 那个是ms得基本设置
提取元素信息要用mdl×××_extract 函数
比如  mdlLinear_extract  mdlShape_extract
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-24 14:53:02 | 显示全部楼层
我已成功获得自己用MDL画的一个球,圆,线的数据!现在我面临的问题是如何分层读取已知文件的各元素信息!每一个mdl×××_extract函数均有一个入口。这个入口表示读取的对象。怎么确定这些对象!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-24 15:53:41 | 显示全部楼层
mdlElement_getProperties函数可获得元素的层信息。
当然,你在取元素时(用mdlScanCriteria_XXX类函数)也可按层来取,就不需要逐个元素提取其层信息了,两种方法都行。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-25 13:15:57 | 显示全部楼层
谢谢microstation指点,正在尝试!下面是我尝试使用的几个函数,对其中的参数设置能指点一下么。

scP = mdlScanCriteria_create ();
mdlScanCriteria_setReturnType();

mdlScanCriteria_setAttributeTest (scP, 0, 0, &extAttrBuf);
mdlScanCriteria_setModel (scP,MASTERFILE);
mdlScanCriteria_scan (scP,elemAddr,&scanWords,&filePos);
mdlScanCriteria_free (scP);
mdlElement_read
另外还问一个问题,如何把一个shell(如曲面,实体的面)打碎成一个个的(三角)面片输出?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-25 13:50:18 | 显示全部楼层
看不懂你的代码 搜索函数
v8本身有例子 直接修改不就行了
曲面是复杂元素 把里面得元素一个个读出就行了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-25 19:15:23 | 显示全部楼层
如何把一个shell(如曲面,实体的面)打碎成一个个的(三角)面片输出?不像gp341描述的那样简单。曲面中的一个个元素都是B-样条的一个个成员,单独提取出来是没有意义的。
仔细研究一下mdlBspline_XXX和mdlMesh_XXX类函数看有没有思路。三维复杂几何体编程我也没做过。
更复杂的专用三维操作函数是mdlKISolid_XXX类。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-25 20:27:07 | 显示全部楼层
他说得曲面 好像不是B样条曲面
曲面和实体得类型是18,19
B样条在21 24 25 26 27 28
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-26 11:06:25 | 显示全部楼层
多谢大家的指点!正在研究,还希望各位高手支招!这是我昨天尝试读取元素用的函数:mdlElement_read (parcel, MASTERFILE,scanPosition );
其中参数意思为:parcel:MSElement *
                               MASTERFILE:具体代表的含义我至今没有查到,几乎搜索了所有头文件也没找到其定义。     
                             scanPosition:文件位置。跟踪发现有值,其值为:4000017   之类的数值              。
当程序一执行到此函数是就crash了,为什么?
另外:我使用mdlScanCriteria_scan(pScanCriteria, (void *) scanBuffer, &acceptSize, &scanPosition)时,其返回值为10,表示END_OF_FILE
而 scanBuffer[0]=4000008
      scanBuffer[1]=40000015
scanBuffer[2]=40000016
scanBuffer[3]=40000017
scanBuffer[4]=40000018
scanBuffer[5]=40000020
scanBuffer[6]=40000024
scanBuffer[7]=40000026
为什么scanBuffer的值有的连续,有的不连续,microstation迷能解释一下么!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-26 16:10:20 | 显示全部楼层
MASTERFILE是指当前DGN文件

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

使用道具 举报

 楼主| 发表于 2005-3-26 19:51:14 | 显示全部楼层
这是我今天写的一段关于scan  file position 的代码。当使用mdlElement_read()读取元素的时候程序就crash了,请大家帮我分析分析:
void scan_file()
{
     ScanCriteria                * pSP = NULL;
     int                                scanStatus, acceptSize, status;
     UInt32                         scanBuffer[1024],scanPosition, *lp;
     MSElement                  * parcel = NULL;   
    pSP = mdlScanCriteria_create();
    status = mdlScanCriteria_addDingleElementTypeTest(pSP,LINE_ELM);
    mdlScanCriteria_setReturnType (   pSP,MSSCANCRIT_RTURN_FILEPOSITION,FALSE,TRUE);
   mdlScanCriteria_setElementCategory( pSP,ELEMENT_CATEGORY_GRAPHICS );
   mdlScanCriteria_serModel( pSP, MASTERFILE);
   AcceptSize = Sizeof(scanBuffer) /Sizeof(short);
   scanStatus =  mdlScanCriteria_scan( pSp, (void *)scanBuffer,&acceptSize,&ScanPosition );
   for( lp = scanBuffer; lp < ScanBuffer +acceptSize / 2; lp++)
    {
           //程序走到此处就crash掉了!为什么?
      status = mdlElement_read( parcel, MASTERFILE,*lp);
   
    }
    mdlScanCriteria_free( pSP);
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-27 10:27:01 | 显示全部楼层
MSElement  parcel ;
status = mdlElement_read( &parcel, MASTERFILE,*lp);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-28 16:12:56 | 显示全部楼层
多谢大家,已读出不少信息了!不过今天又遇到新的问题:关于颜色信息,没有找到什么_getcolor之类的API。MDL的颜色存储机制是怎样的,怎么才能把元素的颜色信息读出来!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-28 16:26:12 | 显示全部楼层
mdlElement_getSymbology可一次性取出元素的颜色、线型和线宽属性。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-15 17:20 , Processed in 0.257390 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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