找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 9161|回复: 26

[寻找]:Microstation迷老兄请进?(关于MDL的讨论)

  [复制链接]
发表于 2002-6-18 14:01:39 | 显示全部楼层 |阅读模式

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

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

×
以您多年的MDL开发经验, 不知能不能在论坛上给大家讲讲课, 似乎还是有些XDJM对开发有兴趣的, 我先报个名如何?(请您也看一下我给你发的短信) 另外感兴趣的也请跟贴好吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-10-11 11:56:36 | 显示全部楼层
如果各位E文可以,我还是建议您直接读MicroStation的MDL帮助文件。因为翻译的东东难免有误。比如MDL tutorial.PDF中的“许多MicroStation的命令都可以在MDL中应用”这句话可能就翻译错了,我记得原文的意思应该是“许多MicroStation的命令都是MDL应用”。即MicroStation中的许多系统命令并不在ustation.exe或ustation.dll中实现而是直接由某个MDL应用(文件扩展名为MA)实现。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-12 22:34:41 | 显示全部楼层
呵呵, 好呀, 迷兄, 就利用这个pie兄的问题简化一下, 作一个MDL能把clip boundary变成一个shape的工具, 如何?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-14 08:08:00 | 显示全部楼层
Pie的这个问题确实很有趣,但不适合初次学习MDL之用,它可能涉及不到最基本的“资源”的概念。再等等看有否更适合的题目!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-15 16:04:28 | 显示全部楼层
看起来没有更好的题目了。那我就以斑竹指定的题目开始献丑了。
【第一步】:建立一个名字叫 ref_bord.mke 制作文件,内容如下:(你可以用任何你喜欢的文本编辑器来编程,我喜欢用UltraEdit)

#----------------------------------------------------------------------
#    Ref_Bord.MKE                 2002.10.15
#----------------------------------------------------------------------
baseDir    = ./
privateInc = $(baseDir)
objectDir = $(o)

%include mdl.mki

#----------------------------------------------------------------------
#   Define symbol for files included in our link and resource merge
#----------------------------------------------------------------------
refBordObjs = $(o)ref_bord.mo \
    $(mdlLibs)mdllib.dlo     $(mdlLibs)ditemlib.dlo

#----------------------------------------------------------------------
#   Create dir
#----------------------------------------------------------------------
#$(o)$(tstdir)                            : $(o)$(tstdir)

#---------------------------------------------
#       Compile and link MDL Application
#---------------------------------------------
$(o)ref_bord.mo:   $(baseDir)ref_bord.mc

$(mdlapps)ref_bord.ma:   $(refBordObjs)
        $(msg)
        >$(o)make.opt
        -s6000
        $(linkOpts)
        -a$@
        $(refBordObjs)
        <
        $(MLinkCmd) @$(o)make.opt
        ~time

说明:制作文件用来控制从源代码到MDL应用的生成过程。本例中只用到了一种源代码 .MC。以上的这个制作文件自动调用MicroStation/J中的相应程序由.MC生成.MO,进而生成.MA。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-16 08:33:41 | 显示全部楼层
【第二步】:建立如下源代码所示的 ref_bord.mc 文件。

/*-——————————-----------------------------------------------------------+
|  Ref_Bord.MC ---- 查找参考文件剪切边并以Shape显示之    |
|  Author: MicroStation迷              Date: 2002.10.15          |
|  Note: 该程序为演示之用,很多因素未在考虑之列,如:  |
|    ①未考虑三维中的前后面剪切;②不显示Clip Mask;    |
|    ③未考虑某视图中关闭参考的情况。                  |
+----------------------------------------------------------------------------------------------------*/
#include <mdl.h>
#include <tcb.h>
#include <refernce.h>
#include <mselemen.fdf>

extern ReferenceFile *refFileP;
/*-------------------------------------------------------------------+
|  main                                                              |
+-------------------------------------------------------------------*/
Private void main (void)
{
   int          refNo, numVertices;
   DPoint3d    pts[MAX_VERTICES], delta;
   MSElement el;
       
   for (refNo = 0; refNo < tcb->maxRefs; refNo++){
      if (refFileP[refNo].file_id.cache_slot == 0)      // 当前refNo无效
      continue;
      if (refFileP[refNo].clip.clipP->x == REF_LMINI4 &&
          refFileP[refNo].clip.clipP->y == REF_LMINI4)  // 当前参考文件无剪切边界
      continue;
      for (numVertices = 0; numVertices < refFileP[refNo].clip.clip_vertices; numVertices++) {
         if (refFileP[refNo].clip.clipP[numVertices].x == DISCONNECT)
            break;
         pts[numVertices].x = refFileP[refNo].clip.clipP[numVertices].x
                                       + refFileP[refNo].display.mast_org.x;
         pts[numVertices].y = refFileP[refNo].clip.clipP[numVertices].y
                                       + refFileP[refNo].display.mast_org.y;
         pts[numVertices].z = fc_zero;
      }
      mdlShape_create (&el, NULL, pts, numVertices, 0);
      mdlElement_display (&el, NORMALDRAW);
      mdlElement_add (&el);
   }
   mdlSystem_exit (0, 1);
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-16 10:46:01 | 显示全部楼层
【第三步】:启动MicroStation/J开发环境并生成MDL应用ref_bord.ma。
具体操作为:①选“开始→程序→MicroStation V7.1→MicroStation Development Shell”出现一DOS窗口;
②进入你源程序存放的文件夹,如你把ref_bord.mke和ref_bord.mc放在了C:\MDL\ref_bord目录下,则应键入
  C:
    cd \mdl\ref_bord
③发出建立MDL应用的命令:
   bmake ref_bord

通过以上步骤就能生成一个ref_bord.ma的文件,该文件位于X:\Bentley\Program\MicroStation\mdlapps目录下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-16 10:55:08 | 显示全部楼层
【第四步】:在MicroStation图形环境中使用。
①启动MicroStation/J,打开一DGN文件;
②参考几个DGN;
③对任意一个或多个参考文件定义Clip Boundary
   (具体操作是:在参考文件范围内放置一Fence,然后选Reference对话框中的Tools→Clip Boundary);
④装载并运行我们刚生成的MDL应用,能看到在参考文件的Clip Boundary位置以当前线符绘制出多边形。
  (可通过多种方法装载MDL应用,如 [方法1] 选菜单Utilities→MDL Applications,选择REF_BORD并点击Load按钮;[方法2] 在命令键入域直接键入MDL  L  REF_BORD。)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-16 11:00:20 | 显示全部楼层
【补充说明】:在【第二步】ref_bord.mc文件中的#include 后的内容都没有显示出来,可能是因为本论坛对箭头符号的处理有误造成的。现在我用中文的箭头符号代替英文的箭头符号,不过您复制到源文件后一定要再把中文箭头改成英文箭头,否则将会出现大量的编译错误。

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

使用道具 举报

发表于 2002-10-16 12:10:18 | 显示全部楼层
不錯!!!
終於有人提供,source code
對於 mdl 有心認識的人,為一大福音
加油!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-18 10:40:01 | 显示全部楼层
错误提示:
G:\Bentley\V7\Program\MICROS~1\mdl\bin>bmake g:\ref\ref_bord
Bentley Systems Make Utility. Version 8.03, Mar 29 2001
Thu Oct 17 20:29:33 2002
BMAKE: *** Error: not rule or dependency
BMAKE: call trace
    line:   14, g:\ref\ref_bord.mke
Thu Oct 17 20:29:33 2002, elapsed time: 0:00

我是完成两个文件编辑后, 然后将文件放至一个目录, 因为我找不到那个给系统加路径的bat文件了, 所以我就把所有的mki文件也全拷到这个目录下, 但提示有错, 没能通过....

后来, 我自己给系统中增加一个
mdlLibs=G:\Bentley\V7\Program\MicroStation\mdl\library
好象仍然不行....
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-18 10:51:59 | 显示全部楼层
如果没有哪个bat文件来建立一些编译目径, 还要自己设置哪几个系统变量?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-18 11:22:13 | 显示全部楼层
我写的这个源程序是运行在MSJ7.X版上的,不能在MSV8下编译!
建立MicroStation编译环境的批处理程序是X:\Bentley\Program\MicroStation\jmdl\bin\mstndevvars.bat,该文件中必须设置MS、BMAKE、PATH、MLINK_STDLIB四个环境变量,其它的非MDL必须(如CLASSPATH为JMDL所需)
【注意】:以上的目录中是jmdl而不是mdl
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-18 11:26:29 | 显示全部楼层
上载我已编译好的MDL应用 ref_bord.ma。
【注意】:它运行在MSJ。

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

使用道具 举报

发表于 2002-10-18 11:41:41 | 显示全部楼层
mstndevvars.bat中对四个环境变量的设置如下:
set MS=C:\Bentley71\Program\MicroStation
set BMAKE_OPT=-I%MS%\mdl\include -I%MS%\jmdl\include
set PATH=%PATH%;%MS%;%MS%\mdl\bin;%MS%\jmdl\bin
set MLINK_STDLIB=%MS%\mdl\library\builtin.dlo

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 11:57 , Processed in 0.504335 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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