You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am currently working on a project with pythonocc==7.5.1 where I am modeling a 2D object which can be written as multiple lines. I need to be able to do two things at the same time:
Find out which of the lines was selected by the user on the viewer
Change the width of the lines
I tried two different methods, but neither satisfy both of the previous requirements:
Creating the lines as wires: I get the information on which wire was selected, but I can't seem to change its aspect
Creating the lines as AIS_lines: I can change the width, but can't get any information on which line was selected
Could you please give me any suggestions to be able to solve this issue? I thank you in advance for any insight you might provide!
Here is a simple example to demonstrate the issue I am having.
import numpy as np
from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeEdge, BRepBuilderAPI_MakeWire
from OCC.Core.gp import gp_Pnt
from OCC.Core.TopoDS import TopoDS_Wire
from OCC.Core.Quantity import Quantity_Color, Quantity_TOC_RGB
from OCC.Core.Geom import Geom_CartesianPoint
from OCC.Core.AIS import AIS_Line
from OCC.Core.Prs3d import Prs3d_LineAspect
def on_click(shapes, *kwargs):
if len(shapes) == 0:
# AIS LINE ARE NOT CAUGHT! Shape is an empty list
print("On click ===> Empty shape list!")
for shape in shapes:
if isinstance(shape, TopoDS_Wire):
# WIRES ARE CAUGHT HERE
print("On click ===> TopoDS_Wire!")
def display_lines_as_wires(lines):
for [x1,y1],[x2,y2] in lines:
wire = BRepBuilderAPI_MakeWire()
edge = BRepBuilderAPI_MakeEdge(gp_Pnt(x1, y1, 0), gp_Pnt(x2, y2, 0)).Edge()
wire.Add(edge)
display.DisplayShape(wire.Shape(), update=False, color="RED")
def display_ais_lines(lines):
width = 5.
color = Quantity_Color(13/255, 13/255, 203/255, Quantity_TOC_RGB)
for [x1,y1],[x2,y2] in lines:
ais_line = AIS_Line(
Geom_CartesianPoint(x1,y1,0),Geom_CartesianPoint(x2,y2,0)
)
drawer = ais_line.Attributes()
aspect = Prs3d_LineAspect(color, 0, width)
drawer.SetLineAspect(aspect)
ais_line.SetAttributes(drawer)
display.Context.Display(ais_line, False)
if __name__ == "__main__":
points = np.random.normal(size=(5,2))
lines = np.array([[points[i], points[i+1]] for i in range(len(points)-1)])
offset_lines = lines + 4
from OCC.Display.SimpleGui import init_display
display, start_display, add_menu, add_function_to_menu = init_display()
display_ais_lines(lines)
display_lines_as_wires(offset_lines)
display.register_select_callback(on_click)
display.FitAll()
start_display()
The text was updated successfully, but these errors were encountered:
Hello Sir.
I am currently working on a project with pythonocc==7.5.1 where I am modeling a 2D object which can be written as multiple lines. I need to be able to do two things at the same time:
I tried two different methods, but neither satisfy both of the previous requirements:
Could you please give me any suggestions to be able to solve this issue? I thank you in advance for any insight you might provide!
Here is a simple example to demonstrate the issue I am having.
The text was updated successfully, but these errors were encountered: