Reply

Show Cut Portion on front in Drawing View

Hello All,

 

I need to create draft for Part files through vb.net.

 

But the view type is not fixed.

When doing it manually, I select the Custom View and see if cut portion is in the front.

But how to this programatically?

 

Right now I am trying using the below code:

 

For iCnt As Integer = 1 To 30
      objDrawingViews = objSheet.DrawingViews
      objDrawingView = objDrawingViews.AddPartView(objModelLink, iCnt, 0.25, 0.28, 0.18, 0)


      If objDrawingView.IsCut = False Then
           objDrawingView.Delete()

           Continue for

      End If

Next

 

But I am getting COM Exception

"Object is not connected to server (Exception from HRESULT: 0x800401FD (CO_E_OBJNOTCONNECTED))".

 

Is this the right way? if not what is the right method.

 

Please suggest.

 

Thanks,

Shruthi M.

11 REPLIES

Re: Show Cut Portion on front in Drawing View

objModelLink is the culprit - giving the COM exception.

Bring it inside the loop - the error will go.

 

Re: Show Cut Portion on front in Drawing View

[ Edited ]

Also consider sending

objDrawingViews = objSheet.DrawingViews

outside the loop - before the loop starts - this should speed up the execution a little bit.

The dot between objSheet and DrawingViews has to resolve the property, so more dots means slower execution and a dot inside a loop means even slower execution overall.

Re: Show Cut Portion on front in Drawing View

[ Edited ]

Hello Shruthi,

 

  Your comment "When doing it manually, I select the Custom View and see if cut portion is in the front."

 

  Can you kindly clarify on "cut portion is in front" - I want to understand how the part looks like and what is meant by cut, where and how it is taken and using which command.

  An image of a part with a cut or a simple Solid Edge part attached to this post would be useful.

 

Thanks in advance.

~Tushar Suradkar

http://surfandcode.blogspot.in/

Re: Show Cut Portion on front in Drawing View

Hello Tushar,

 

Thanks for the sugestion.

I am not getting the exception now. But it is not checking for the Cut Part.

 

As requested by you I am attaching images of Cut Part Behind and Cut Part Front and also what I mean about Cut Part.

 

Please let me know if there are any APIs which checks for Cut Parts.

 

Thank you,

Shruthi

Re: Show Cut Portion on front in Drawing View

You can try looping through the DVLines collection of the view after creation and check the EdgeType against GraphicMemberEdgeTypeConstants if one of them helps to determine if the view has hidden lines.

Re: Show Cut Portion on front in Drawing View

Hello Tushar,

 

Looping through the DVLines collection doesn't work.

 

I just have to check out of top,right,left,front,bottom,back views which view shows cut portion at the front.

 

Please help.

 

Thank you

Re: Show Cut Portion on front in Drawing View

Hello,

 

I don't think a general solution would be possible.

Try always create the part in a specific orientation such that the cut portion is in front, then always create a front view.

 

Regards,

 

Re: Show Cut Portion on front in Drawing View

[ Edited ]

Hi, Shruthi.

 

The problem lies in the Delete() method of the drawingView object. Since you've called Delete() once, you cannot use the same variable to place another view and call Delete() again. It triggers the error.

 

My workaround was to create some auxilary drawingView variables, place the view, check and store some values that I needed and finally delete it. To place the definite view, I used a "default" variable.

 

In my case it was possible because I have a small number of views(3 or 4), so I only needed 3 or 4 auxiliary variables. In your case, you could reduce your loop to a small number for testing purposes. To deal with the 30 views you would need a array or collection of 30 drawingView objects to always assign the next one.

 

Please check my code and try to get the idea

SolidEdgeDraft.DrawingView drawingView = null;
SolidEdgeDraft.DrawingView auxDrawingView1 = null;

auxDrawingView1 = drawingViews.AddAssemblyView(From: modelLink,           
                                                           Orientation: SolidEdgeDraft.ViewOrientationConstants.igLeftView,
                                                           Scale: 0.142,
                                                           x: 0.100,
                                                           y: 0.23,
                                                           ViewType: SolidEdgeDraft.AssemblyDrawingViewTypeConstants.seAssemblyDesignedView);

            VerificarComprimentoAltura(auxDrawingView1, out comprDv1, out altDv1); //Computes smth I need to store
auxDrawingView1.Delete(); // Deletes auxiliary view drawingView = drawingViews.AddAssemblyView(From: modelLink, Orientation: comprDv1 == altDv1 ? SolidEdgeDraft.ViewOrientationConstants.igLeftView : SolidEdgeDraft.ViewOrientationConstants.igFrontView, // Use stored values to place definite view Scale: escala, x: 0.100, y: 0.23, ViewType: SolidEdgeDraft.AssemblyDrawingViewTypeConstants.seAssemblyDesignedView);

 

Remember: You cannot call Delete() on the same drawinView variable twice(I don't know why). 

 

Please try to adapt this technique to your problem using my tips. If you find a better workaround/solution, please share!

 

Best wishes!

 

 

 

 

 

 

Re: Show Cut Portion on front in Drawing View

Hi Marcio,

 

  You have a great insight into how the API works and a different approach to tackle problems than many others. I appreciate this.

  When I first tried out code posted by Shruthi, I found the ModelLink variable was being set to Nothing after the first run in the loop. So I suggested shifting the ModelLink var inside the For loop which worked.

  Can you kindly comment on the approrpiateness of this solution. The Pros and Cons that you see.

 

  Further it would be interesting to know from you if at all it is possible to determine how to place a view on a Draft sheet such that the cut portion of the part appears in front. See the images attached somewhere down in the message. I am also interested in this solution. Thanks.

 

Tushar Suradkar

http://surfandcode.blogspot.in/