Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleX
提交
aa9fe148
P
PaddleX
项目概览
PaddlePaddle
/
PaddleX
通知
138
Star
4
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
43
列表
看板
标记
里程碑
合并请求
5
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleX
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
43
Issue
43
列表
看板
标记
里程碑
合并请求
5
合并请求
5
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
aa9fe148
编写于
3月 28, 2020
作者:
L
LaraStuStu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Create qt.py
上级
a3e839d7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
88 addition
and
0 deletion
+88
-0
DataAnnotation/labelme/labelme/utils/qt.py
DataAnnotation/labelme/labelme/utils/qt.py
+88
-0
未找到文件。
DataAnnotation/labelme/labelme/utils/qt.py
0 → 100644
浏览文件 @
aa9fe148
from
math
import
sqrt
import
os.path
as
osp
import
numpy
as
np
from
qtpy
import
QtCore
from
qtpy
import
QtGui
from
qtpy
import
QtWidgets
here
=
osp
.
dirname
(
osp
.
abspath
(
__file__
))
def
newIcon
(
icon
):
icons_dir
=
osp
.
join
(
here
,
'../icons'
)
return
QtGui
.
QIcon
(
osp
.
join
(
':/'
,
icons_dir
,
'%s.png'
%
icon
))
def
newButton
(
text
,
icon
=
None
,
slot
=
None
):
b
=
QtWidgets
.
QPushButton
(
text
)
if
icon
is
not
None
:
b
.
setIcon
(
newIcon
(
icon
))
if
slot
is
not
None
:
b
.
clicked
.
connect
(
slot
)
return
b
def
newAction
(
parent
,
text
,
slot
=
None
,
shortcut
=
None
,
icon
=
None
,
tip
=
None
,
checkable
=
False
,
enabled
=
True
):
"""Create a new action and assign callbacks, shortcuts, etc."""
a
=
QtWidgets
.
QAction
(
text
,
parent
)
if
icon
is
not
None
:
a
.
setIconText
(
text
.
replace
(
' '
,
'
\n
'
))
a
.
setIcon
(
newIcon
(
icon
))
if
shortcut
is
not
None
:
if
isinstance
(
shortcut
,
(
list
,
tuple
)):
a
.
setShortcuts
(
shortcut
)
else
:
a
.
setShortcut
(
shortcut
)
if
tip
is
not
None
:
a
.
setToolTip
(
tip
)
a
.
setStatusTip
(
tip
)
if
slot
is
not
None
:
a
.
triggered
.
connect
(
slot
)
if
checkable
:
a
.
setCheckable
(
True
)
a
.
setEnabled
(
enabled
)
return
a
def
addActions
(
widget
,
actions
):
for
action
in
actions
:
if
action
is
None
:
widget
.
addSeparator
()
elif
isinstance
(
action
,
QtWidgets
.
QMenu
):
widget
.
addMenu
(
action
)
else
:
widget
.
addAction
(
action
)
def
labelValidator
():
return
QtGui
.
QRegExpValidator
(
QtCore
.
QRegExp
(
r
'^[^ \t].+'
),
None
)
class
struct
(
object
):
def
__init__
(
self
,
**
kwargs
):
self
.
__dict__
.
update
(
kwargs
)
def
distance
(
p
):
return
sqrt
(
p
.
x
()
*
p
.
x
()
+
p
.
y
()
*
p
.
y
())
def
distancetoline
(
point
,
line
):
p1
,
p2
=
line
p1
=
np
.
array
([
p1
.
x
(),
p1
.
y
()])
p2
=
np
.
array
([
p2
.
x
(),
p2
.
y
()])
p3
=
np
.
array
([
point
.
x
(),
point
.
y
()])
if
np
.
dot
((
p3
-
p1
),
(
p2
-
p1
))
<
0
:
return
np
.
linalg
.
norm
(
p3
-
p1
)
if
np
.
dot
((
p3
-
p2
),
(
p1
-
p2
))
<
0
:
return
np
.
linalg
.
norm
(
p3
-
p2
)
return
np
.
linalg
.
norm
(
np
.
cross
(
p2
-
p1
,
p1
-
p3
))
/
np
.
linalg
.
norm
(
p2
-
p1
)
def
fmtShortcut
(
text
):
mod
,
key
=
text
.
split
(
'+'
,
1
)
return
'<b>%s</b>+<b>%s</b>'
%
(
mod
,
key
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录