cli的方式没有生成.ma文件,所以不能通过在.r文件中定义MessageList的方式来定义工具名。也就不能使用InstallNewInstall(CMDNAME-****,PROMPT_FirstPoint),这种方式定义工具提示,我指的工具提示就是 “>”符号前面的部分。api文档里面找到的这个函数mdlState_setCurrentCommandName()测试也没有效果,不知道究竟要如何实现?麻烦老师帮忙解答一下,谢谢
可以在一个NativeCode的项目里边实现你的工具,例如MyTool.dll,编译的时候会生成一个MyTool.lib文件,在你的cli项目里边引用一下这个lib文件,包含一下相应的头文件即可直接使用这个工具。
有C函数可以实现嘛?像.NET的MessageCenter.Instance.StatusCommand = "My Cmd";MessageCenter.Instance.StatusPrompt = "My Prompt";这是符老师之前回答我的。
在DgnTool类中有一个未公开的成员函数SetCmdNameAndPromptByString最适合您这种情况。变通方法是直接调用
mdlState_setCurrentCommandName来设置"My Cmd",然后调用mdlOutput_promptU设置“MyPrompt”
Answer Verified By: Zemin.Li
谢谢符老师
付老师,我尝试把如下三个地方调用mdlState_setCurrentCommandName()函数,都没有效果,不知为何呀?
static void breakline_singleTool(System::String^ unparsed) { mdlState_setCurrentCommandName(L"单折断线"); annotationPrimitiveTool::InstallNewInstance(1, 0, breakline_single); } void annotationPrimitiveTool::InstallNewInstance(int toolId, int toolPrompt, PrimitiveType primitiveType) { mdlState_setCurrentCommandName(L"单折断线"); annotationPrimitiveTool* breaklineTool = new annotationPrimitiveTool(toolId, toolPrompt, primitiveType); breaklineTool->InstallTool(); } annotationPrimitiveTool::annotationPrimitiveTool(int toolId, int toolPrompt, PrimitiveType primitiveType) :DgnPrimitiveTool(toolId, toolPrompt), m_primitiveType(primitiveType) { switch (m_primitiveType) { case breakline_single: mdlState_setCurrentCommandName(L"单折断线"); mdlOutput_promptU(pickFirstPtLocal); break; ... } }
重写DgnTool基类的_GetToolName(WStringR name)虚函数就行了: virtual void _GetToolName(WStringR name) override { name = L"XXXXXXTool"; }
自从没有使用r资源后,我一直是这么干的^_^
nice...感谢管兄
感谢管工的经验分享!充分体现了我们论坛“人人为我,我为人人”的宗旨,赞一个!
感谢管工。