rem*_*emi 2 c++ console logging opencascade
使用 OpenCascade C++ 库时,某些函数会向控制台/终端打印一些状态或响应。例如STEPCAFControl_Writer::perform()将打印出如下内容:
*******************************************************************
****** Statistics on Transfer (Write) ******
*******************************************************************
****** Transfer Mode = 0 I.E. As Is ******
****** Transferring Shape, ShapeType = 0 ******
** WorkSession : Sending all data
Step File Name : <file-name> Write Done
Run Code Online (Sandbox Code Playgroud)
到控制台。有办法防止这种情况吗?
通常 OCCT 不会将消息直接打印到控制台,而是依赖于Message_Messenger接口。默认实现注册Message_PrinterOStream打印机,该打印机将所有消息放入控制台,并根据消息重力分配颜色。
因此,您的情况有多种选择:
Message::DefaultMessenger()->RemovePrinters (STANDARD_TYPE(Message_PrinterOStream))
Run Code Online (Sandbox Code Playgroud)
Message_Info,这意味着将打印除指定用于Message_Trace详细或调试输出之外的所有消息。 Message_Gravity aGravity = Message_Alarm;
for (Message_SequenceOfPrinters::Iterator aPrinterIter (Message::DefaultMessenger()->Printers());
aPrinterIter.More(); aPrinterIter.Next())
{
aPrinterIter.Value()->SetTraceLevel (aGravity);
}
Run Code Online (Sandbox Code Playgroud)
Message_PrinterOStream并注册您自己的打印机,实现Message_Printer具有所需行为的接口。通常,GUI 应用程序不会将消息打印到控制台,而是根据用户首选项将其打印到专用 GUI 控件。 class MyPrinter : public Message_Printer
{
protected:
virtual void send (const TCollection_AsciiString& theString, const Message_Gravity theGravity) const override
{
std::cerr << "[GRAV: " << theGravity << "] " << theString << "\n";
}
};
Run Code Online (Sandbox Code Playgroud)
STEPCAFControl_Writer,应该注意的是,该类将消息打印到默认情况下Transfer_TransferProcess::Messenger()设置为全局Message::DefaultMessenger()信使的类,但如果应抑制/重定向特定算法的输出,则应用程序可以覆盖该类。这需要深入研究STEPCAFControl内部逻辑,因为它看起来不像应用程序代码可以轻松访问的 API...而且似乎Message::DefaultMessenger()无论如何都会打印一些消息。 STEPCAFControl_Writer aWriter;
Handle(Message_Messenger) aMessenger = new Message_Messenger();
aMessenger->ChangePrinters().Clear();
aMessenger->AddPrinter (new MyPrinter());
aWriter.ChangeWriter().WS()->TransferWriter()->FinderProcess()->SetMessenger (aMessenger);
...
Run Code Online (Sandbox Code Playgroud)
下面是 Draw Harness 的屏幕截图,显示具有不同颜色的不同重力的消息(Message_PrinterOStream自 OCCT 7.5.0 起的默认行为) -深红色表示错误 ( Message_Alarm/ Message_Fail),深黄色表示警告 ( Message_ConsoleColor_Yellow),深绿色表示信息 ( Message_ConsoleColor_Green),细黄色表示详细/调试消息 ( Message_ConsoleColor_Yellow)。
