MickD 发表于 2006-2-22 01:09:39

关闭当前视图中的修剪平面

我正在尝试关闭当前视图的剪裁平面。如果我将我的视图设置为我在打开剪裁时创建的命名视图,然后选择一个标准视图,它仍然显示“打开”剪裁平面。如果我在“视图”对话框->视图设置中查看,我可以看到即使在我运行了这段代码之后,裁剪平面仍然是打开的。
我是否需要其他方法来获取当前视图,或者我是否需要其他方法来关闭剪辑?蒂亚,米克。
       
static void DCSDCSARX3dunclip(void)
        {
                // function to turn the clip planes off after being
                // in a clipped view. Use current view to change settings
                AcDbViewTable* pVt;
                acdbHostApplicationServices()->workingDatabase()
                        ->getSymbolTable(pVt, AcDb::kForWrite);
                if (!pVt->has("Current"))
                {
                        AcDbViewTableRecord* pVtrec = new AcDbViewTableRecord;
                        pVt->getAt("Current", *&pVtrec,AcDb::kForWrite,false);
                        pVtrec->setFrontClipEnabled(false);
                        pVtrec->setBackClipEnabled(false);
                        pVtrec->close();
                        pVt->close();
                        acutPrintf("\nDone:");
                }
                else
                {
                        pVt->close();
                        acutPrintf("\nFailed to turn off clipping, try again:");
                }
        }

**** Hidden Message *****

MickD 发表于 2006-2-22 07:43:16

您是在图层模型1中显示视图,还是在图层模型0的视口中显示视图?

MickD 发表于 2006-2-22 09:32:16

我使用了上面的一些代码来获得tilemode等,然后设置剪切平面为假,没有去。然后我用acedSetCurrentView()做了同样的尝试,但是它完全改变了视图,尽管它关闭了裁剪平面??
也许我必须为标准视图设置自己的工具栏?

MickD 发表于 2006-2-22 15:44:16

我忙不起来...这里。。。在我所做的工作类型中,从未使用过或需要实现过这样的东西......
[工作类型:清洁街道上的车窗..... ]
一个dwg我对我的帮助超过1000字....

MickD 发表于 2006-2-22 16:13:54

好的,这里有一个dwg,附有一个带有剪裁平面的命名视图。将视图设置为当前视图,然后选择一个iso视图将其恢复,您将看到裁剪平面裁剪出一些细节。
将下面的代码复制并粘贴到一个新的arx命令中,尝试取消对acedSetCurrentView的注释,看看会发生什么。
谢谢。
                // function to turn the clip planes off after being
                // in a clipped view. Use current view to change settings
                AcDbViewTable* pVt;
                acdbHostApplicationServices()->workingDatabase()
                        ->getSymbolTable(pVt, AcDb::kForWrite);
                if (!pVt->has("CURRENT"))
                {
                        AcDbViewTableRecord* pVtrec = new AcDbViewTableRecord;
                        pVt->getAt("CURRENT", *&pVtrec,AcDb::kForWrite,false);
                        struct resbuf rb;
                        acedGetVar("TILEMODE", &rb);
                        int tilemode = rb.resval.rint;
                        acedGetVar("CVPORT", &rb);
                        int cvport = rb.resval.rint;
                        // Paperspace flag
                        bool paperspace = ((tilemode == 0) && (cvport == 1)) ? Adesk::kTrue : Adesk::kFalse;
                        pVtrec->setIsPaperspaceView(paperspace);
                        if (Adesk::kFalse == paperspace)
                        {
                                pVtrec->setFrontClipEnabled(false);
                                pVtrec->setBackClipEnabled(false);
                                acutPrintf("\nDone:");
                        }
                        else
                        {
                                acutPrintf("\nCan't turn off clipping planes in paperspace!");
                        }
                        //acedSetCurrentView(pVtrec,NULL);//close();
                        pVt->close();
                       
                }
                else
                {
                        pVt->close();
                        acutPrintf("\nFailed to turn off clipping, try again:");
                }

MickD 发表于 2006-2-22 16:18:35

不...它总是去计划视图...奇怪。

Kerry 发表于 2006-2-22 16:36:56


我在想,也许AcDbViewport对象的属性优先于AcDbViewTableRecord的属性。
我会仔细看看,看看能不能弄明白。

MickD 发表于 2006-2-22 17:42:15

在我使用的另一个应用程序中,你可以设置一个带有裁剪平面的视图,如果你使用std isoviews返回并查看整个drg,它会做同样的事情,唯一恢复正常的方法是使用他们预定义的视图工具,然后如果你想使用std工具。也许我也需要这样做,但只需创建模型范围的标准平面图?
我真的很惊讶,您有一个全局函数来“设置”当前视图,而不是“获取”当前视图。

MickD 发表于 2006-2-22 17:46:00

米克;
我使用不同的视图名称进行了测试,但没有转到平面视图...

MickD 发表于 2006-2-22 17:57:04


不工作....假警报...
页: [1] 2
查看完整版本: 关闭当前视图中的修剪平面