各位老师好:我现在有个问题想请教大家
问题场景:我想实现在PS里创建的墙梁板柱等基础构件可以通过选择实体、然后选择面的操作
起初我在ABD CE里使用的是LocateSubEntityTool方法,可以拾取CE里的墙 柱等,但是程序放到PS里就不可以了,但是在PS里创建的拉伸体可以实现操作,
请问这块有什么办法可以解决吗,或者有什么例子可供参考吗?提前先谢谢各位老师了,新手,还望不吝赐教~
请提供一个测试DGN供分析。Bentley各专业软件生成的虽然都是DGN,但都做了一些自己的定制,需要分析后才能答复您的问题。
psTest.dgn符老师,你好!附件是我上传的dgn,请查收,里面的墙和柱子都不能拾取,使用Ribbon自带的提取工具也不可以,提示是Element not valid for tool 与使用LocateSubEntityTool时提示的一样,谢谢符老师!
您提供的模型,墙和柱子用MS看都是106类型,这样是没办法识别该元素是solid的,就相当于您这个模型是在专业软件(类似OBD、OPM等)创建的,如果用别的专业软件打开就是106类型 是没办法识别的。
那是不是说这类的就没办法处理了呢?
您可以试试用Drop Element工具,仅勾选Application Elements选项对106元素打散一下即可。
那张老师 代码这块要实现的话有什么方法吗
试试使用DraftingElementSchema::ToDroppedElement进行Drop。
好的 谢谢张老师,非常感谢,还有一个问题,就是我使用LocateSubEntityTool时,我可以得到选择某一个面的点吗,我看SDK里有一个_GetAnchorPoint但是通过这个得到的点再去求出面上的最近点时SolidUtil::ClosestPointToFace总是失败,后来我看这个锚点好像是第一次选择solid时的点,如果我想得到最近点击的面上的点的话 这块我该怎么处理?
能否在_DoLocateSubEntity里面获得?
张老师 我试了使用_DoLocateSubEntity后 不管return true 还是false都不在触发_OnElementModify了,怎么办呢
您是打算做什么操作,_DoLocateSubEntity就是获取子元素的函数,您在里面可以获取您点击子元素的点。LocateSubEntityTool是从ElementGraphicsTool派生下来的,如果是用到ElementGraphicsTool封装的功能,从而重写了其虚函数的话,最好是在这个虚函数里边执行完自己的操作之后通过_super调用一下父类被重写的虚函数,关于LocateSubEntityTool很多您可以搜搜,也可以看看SDK的例子自己调试一下。
好的 张老师 多谢