在使用OpenCascade C++库时,某些函数会打印出对控制台/终端的一些状态或响应。例如,作者:执行()将打印出如下内容:
*******************************************************************
****** 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
到控制台去。有什么办法可以防止这种情况发生吗?
发布于 2020-11-19 16:28:03
通常OCCT不直接将消息打印到控制台,而是依赖于Message_Messenger
接口。默认实现寄存器Message_PrinterOStream
打印机,它将所有消息放入控制台,并根据消息的重力分配颜色。
因此,在您的案例中有几种选择:
Message::DefaultMessenger()->RemovePrinters (STANDARD_TYPE(Message_PrinterOStream))
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);
}
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";
}
};
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);
...
下面是一个显示具有不同颜色(自OCCT7.5.0以来的Message_PrinterOStream
默认行为)的不同重力的消息的截屏截图--强红色错误 (Message_Alarm
/Message_Fail
),强黄色警告 (Message_ConsoleColor_Yellow
),强绿色<代码>E 240用于信息(Message_ConsoleColor_Green
),以及E 142
瘦黄色<代码>E 243用于详细/调试消息(Message_ConsoleColor_Yellow
)。
https://stackoverflow.com/questions/64912439
复制相似问题