Back face/material reverse
-
You need to make it [and launch it] as a Sketchup Tool.
Then you can get the mouse position on screen and find the face below the mouse if any, and then flip it [and front/back materials] if you are looking at the back of it and it has a material etc... -
@tig said:
You need to make it [and launch it] as a Sketchup Tool.
?? My code works fine 100% of the time on any models in SU7, it's screwy in SU8. Perhaps it's a bug in SU8, and nothing wrong with my code?
-
How is your code finding the mouse position without a tool to monitor the cursor ?
How is the input_point finding anything other than the near top left screen pixel point ?
Perhaps you haven't posted all of the code but as it stands it will not do what you want 'on its own'... -
Alan.. it would likely be easier for you to start with letting the user use the built-in SelectionTool to choose single or multiple faces, then react to changes in the Selection set, ie:
Sketchup.active_model.selection
You could add a call to your reverse face method in the mouse context menu... or get a bit fancier with a
SelectionObserver
P.S. : The
InputPoint
class is defined within theUI
module for a reason. It's meant to interact with the user. -
@tig said:
How is your code finding the mouse position without a tool to monitor the cursor ?
It's not using the mouse! If you read my code, I have 2 for loops to scan the screen viewport.
Later I will add mouse support, but my code now is only viewport scanning.
-
@dan rathbun said:
Alan..
I know what you mean, but I found out in another thread that raytest is FUBAR in SU8, pick is more likely using the same code as raytest.
That explain why my code works 100% in SU7 but not in SU8
from thread...
http://forums.sketchucation.com/viewtopic.php?f=180&t=31326&p=275718&hilit=FUBAR#p275718@thomthom said:
Why do you not want to use an InputPoint? You can use the
ip.face
to test if you got the point from a face and ignore the rest.But, yes, you can shoot a ray:
` ray = view.pickray(x, y)
result = model.ray_test( ray )TODO: Recast on hidden entities`
Then remember that in SU8 the
ray_test
is FUBAR. -
Your code does indeed decrement x & y by 1 [having set them to the bottom-right screen-pixel] so it should scan the whole screen ?
The model.raytest() does work OK now in the latest SUpv8M1 but your method should work OK too...
Read Dan's comments... -
def onMouseMove(flags, x, y, view) Sketchup.set_status_text(x.to_s+" ; "+y.to_s) end
Dan, the above code show the mouse coord to be 0,0 at the top-left corner of the viewport, regardless where the window is on the desktop. Any reference to screen coords are within the viewport, not the physical screen. I know about the status text, SK needs to refresh for it to show, and it gets replaces when you move the mouse.
TIG, my version is 8.0.4011 in the 'About' box.
-
1)
**Sketchup.set_status_text()**
does not work well outside a custom
Tool
instance, because there must be another tool active (either someone else's customTool
, or one of the OEM tools.)
As soon as you move the mouse 1 pixel, or Sketchup decides (per some other criteria,) to redraw the UI, ... your message will be overwritten. (It can happen so fast, that the user never has time to read your message.)2) You are not scanning the view. (Yes you are, I see now the unless loop.)
..removed...
3) And perhaps (because
UI::InputPoint
uses inferencing,)you might wish to use
Sketchup::PickHelper
instead.
EDITED AGAIN: removed confusing subject matter.
-
Yup.. sorry I got confused. Removed bogus suggestions.
and you do have MR1 of ver 8 -
@alienizer said:
def onMouseMove(flags, x, y, view) > Sketchup.set_status_text(x.to_s+" ; "+y.to_s) > end
or ...
def onMouseMove(flags, x, y, view) Sketchup.set_status_text("x; #{x} , y; #{y}") end
BTW.. on Window... you can use a Coordinate Tool that displays in model units:
Sketchup.send_action( 21324 )
thetool_name
is"CoordinateTool"
but there doesn't seem to be a send_action string for it. -
@dan rathbun said:
or ...
def onMouseMove(flags, x, y, view) > Sketchup.set_status_text("x; #{x} , y; #{y}") > end
or...
def onMouseMove(flags, x, y, view) Sketchup.set_status_text("x=%d, y=%d"%[x,y]) end
@unknownuser said:
BTW.. on Window... you can use a Coordinate Tool that displays in model units:
Sketchup.send_action( 21324 )
thetool_name
is"CoordinateTool"
but there doesn't seem to be a send_action string for it.How did you come up with 21324?
-
@alienizer said:
@unknownuser said:
BTW.. on Window... you can use a Coordinate Tool that displays in model units:
Sketchup.send_action( 21324 )
thetool_name
is"CoordinateTool"
but there doesn't seem to be a send_action string for it.How did you come up with 21324?
I cheat!
Really I make a copy of all the SU binary executables, and put them in a
%(#804000)[Dev/_EXE]
folder, renaming them thus:
SketchUp.exe
toSketchUp.8.0.4811.exe
so they have ver and build in the name.
Then I open these copies in MS Visual Studio, to check resources (like String Tables, Menu Definitions, etc.)Many of the ids are already listed in the API doc:
Sketchup.send_action()
-
-
Problem solved.
After doing more testing, displaying the dot(face.normal, ray) returned <0 and when viewed cam rotated 45deg it was >0
So after applying a transformation_at the dot() returned the correct cosine. So now my code works perfectly
-
pls help me, back color face issue,
if we make a simple rectangle or a plane, i think the default is that the "face" facing you turns into a front color automatically, right!?
But now im having a problem with that, when i try to make a plane , the face that's facing me always turns into a back color,
I don't know if there's something i clicked or changed somewhere in settings but i dont know what that is
i got so irritated on right clicking the face and selecting "reverse face", it takes me a lot of time,
HOW DO I GET THAT DEFAULT SETTINGS BACK?
A big thanks f u could help me..
-
@jan_pamplona said:
if we make a simple rectangle or a plane, i think the default is that the "face" facing you turns into a front color automatically, right!?
NO... it does not have anything to do with "facing YOU".
When you draw a face, it's normal (The direction the front surface is facing,) is always toward the negative axis.
But the PushPull tool will reverse the face if it needs to do so.
-
Dan beat me (with some slightly different explanation but similar results):
The normal behaviour of SU is that if you draw a 2D shape on the red/green plane ("ground plane"), it will always show a back face top. The reason is that SU supposes that it will be the bottom of a 3D shape and in that case, the front face should be directed "outside", at the bottom of that 3D shape.
Even the PushPull tool is programmed to take this into consideration and when you start to PP such a face, it will reverse it (and when starting to PP, for a moment, you can even see the Z-fighting between the original face and a newly created, reversed face).
-
@dan rathbun said:
@jan_pamplona said:
if we make a simple rectangle or a plane, i think the default is that the "face" facing you turns into a front color automatically, right!?
NO... it does not have anything to do with "facing YOU".
When you draw a face, it's normal (The direction the front surface is facing,) is always toward the negative axis.
But the PushPull tool will reverse the face if it needs to do so.
Thank you very much sir,,
yeah, i remember now, im so dumb :,) it's just that i forgot those things because im drawing 2D plans and not noticing about the Push/Pull,thanks
Advertisement