Welcome,
Guest
. Please
login
or
register
.
1 Hour
1 Day
1 Week
1 Month
Forever
Login with username, password and session length
News:
Home
Help
Login
Register
TheSwamp
»
Code Red
»
AutoLISP (Vanilla / Visual)
»
Topic:
help: Add Vertices to selected overlaping polylines at intersecting point
« previous
next »
Print
Pages: [
1
] |
Go Down
Author
Topic: help: Add Vertices to selected overlaping polylines at intersecting point (Read 1067 times)
0 Members and 1 Guest are viewing this topic.
PM
Guest
help: Add Vertices to selected overlaping polylines at intersecting point
«
on:
October 12, 2022, 09:06:59 AM »
hi. I use this code to add vertex on intersection of polylines, but this code works only for one polyline a time. Is it possible to select multyle polylines and insert to all the extra vertex?
Code - Auto/Visual Lisp:
[Select]
;;; pvx - adds vertices at intersection of pline and selection set of curves ;;;
(
defun
c:pvx
(
/
intersobj1obj2 LM:Unique AT:GetVertices member
-
fuzz add_vtx
s1 ss ent n entx intpts intptsall plpts par f
)
(
vl-load-com
)
(
defun
intersobj1obj2
(
obj1 obj2
/
coords pt ptlst
)
(
if
(
eq
(
type
obj1
)
'ENAME
)
(
setq
obj1
(
vlax
-
ename
->
vla-object
obj1
)
)
)
(
if
(
eq
(
type
obj2
)
'ENAME
)
(
setq
obj2
(
vlax
-
ename
->
vla-object
obj2
)
)
)
(
setq
coords
(
vl
-
catch
-
all
-
apply
'vlax
-
safearray
->
list
(
list
(
vl
-
catch
-
all
-
apply
'vlax
-
variant-value
(
list
(
vla-intersectwith
obj1 obj2 AcExtendNone
)
)
)
)
)
)
(
if
(
vl-catch-all-error-p
coords
)
(
setq
ptlst
nil
)
(
repeat
(
/
(
length
coords
)
3
)
(
setq
pt
(
list
(
car
coords
)
(
cadr
coords
)
(
caddr
coords
)
)
)
(
setq
ptlst
(
cons
pt ptlst
)
)
(
setq
coords
(
cdddr
coords
)
)
)
)
ptlst
)
(
defun
LM:Unique
(
lst
)
(
if
lst
(
cons
(
car
lst
)
(
LM:Unique
(
vl-remove
(
car
lst
)
(
cdr
lst
)
)
)
)
)
)
(
defun
AT:GetVertices
(
e
/
p l
)
(
LM:Unique
(
if
e
(
if
(
eq
(
setq
p
(
vlax-curve-getEndParam
e
)
)
(
fix
p
)
)
(
repeat
(
setq
p
(
1+
(
fix
p
)
)
)
(
setq
l
(
cons
(
vlax-curve-getPointAtParam
e
(
setq
p
(
1-
p
)
)
)
l
)
)
)
(
list
(
vlax-curve-getStartPoint
e
)
(
vlax-curve-getEndPoint
e
)
)
)
)
)
)
(
defun
member
-
fuzz
(
expr lst fuzz
)
(
while
(
and
lst
(
not
(
equal
(
car
lst
)
expr fuzz
)
)
)
(
setq
lst
(
cdr
lst
)
)
)
lst
)
(
defun
add_vtx
(
obj add_pt ent_name
/
bulg sw ew
)
(
vla-GetWidth
obj
(
fix
add_pt
)
'sw 'ew
)
(
vla-addVertex
obj
(
1+
(
fix
add_pt
)
)
(
vlax
-
make
-
variant
(
vlax-safearray-fill
(
vlax
-
make
-
safearray
vlax-vbdouble
(
cons
0
1
)
)
(
list
(
car
(
trans
(
vlax-curve-getpointatparam
obj add_pt
)
0
ent_name
)
)
(
cadr
(
trans
(
vlax-curve-getpointatparam
obj add_pt
)
0
ent_name
)
)
)
)
)
)
(
setq
bulg
(
vla-GetBulge
obj
(
fix
add_pt
)
)
)
(
vla-SetBulge
obj
(
fix
add_pt
)
(
/
(
sin
(
/
(
*
4
(
atan
bulg
)
(
-
add_pt
(
fix
add_pt
)
)
)
4
)
)
(
cos
(
/
(
*
4
(
atan
bulg
)
(
-
add_pt
(
fix
add_pt
)
)
)
4
)
)
)
)
(
vla-SetBulge
obj
(
1+
(
fix
add_pt
)
)
(
/
(
sin
(
/
(
*
4
(
atan
bulg
)
(
-
(
1+
(
fix
add_pt
)
)
add_pt
)
)
4
)
)
(
cos
(
/
(
*
4
(
atan
bulg
)
(
-
(
1+
(
fix
add_pt
)
)
add_pt
)
)
4
)
)
)
)
(
vla-SetWidth
obj
(
fix
add_pt
)
sw
(
+
sw
(
*
(
-
ew sw
)
(
-
add_pt
(
fix
add_pt
)
)
)
)
)
(
vla-SetWidth
obj
(
1+
(
fix
add_pt
)
)
(
+
sw
(
*
(
-
ew sw
)
(
-
add_pt
(
fix
add_pt
)
)
)
)
ew
)
(
vla-update
obj
)
)
(
prompt
"
\n
Pick source POLYLINE..."
)
(
setq
s1
(
ssget
"_+.:E:S:L"
(
list
'
(
0
.
"*POLYLINE"
)
'
(
-
4
.
"<or"
)
'
(
70
.
0
)
'
(
70
.
1
)
'
(
70
.
128
)
'
(
70
.
129
)
'
(
-
4
.
"or>"
)
(
cons
410
(
if
(
=
1
(
getvar
'cvport
)
)
(
getvar
'ctab
)
"Model"
)
)
)
)
)
(
while
(
not
s1
)
(
prompt
"
\n
Missed... Try picking source POLYLINE on unlocked layer again..."
)
(
setq
s1
(
ssget
"_+.:E:S:L"
(
list
'
(
0
.
"*POLYLINE"
)
'
(
-
4
.
"<or"
)
'
(
70
.
0
)
'
(
70
.
1
)
'
(
70
.
128
)
'
(
70
.
129
)
'
(
-
4
.
"or>"
)
(
cons
410
(
if
(
=
1
(
getvar
'cvport
)
)
(
getvar
'ctab
)
"Model"
)
)
)
)
)
)
(
prompt
"
\n
Now select intersecting curves..."
)
(
setq
ss
(
ssget
(
list
'
(
0
.
"*POLYLINE,SPLINE,LINE,ARC,CIRCLE,ELLIPSE,HELIX,RAY,XRAY"
)
(
cons
410
(
if
(
=
1
(
getvar
'cvport
)
)
(
getvar
'ctab
)
"Model"
)
)
)
)
)
(
while
(
not
ss
)
(
prompt
"
\n
Empty sel.set... Please reselect intersecting curves again..."
)
(
setq
ss
(
ssget
(
list
'
(
0
.
"*POLYLINE,SPLINE,LINE,ARC,CIRCLE,ELLIPSE,HELIX,RAY,XRAY"
)
(
cons
410
(
if
(
=
1
(
getvar
'cvport
)
)
(
getvar
'ctab
)
"Model"
)
)
)
)
)
)
(
setq
ent
(
ssname
s1
0
)
)
(
if
(
=
(
cdr
(
assoc
0
(
entget
ent
)
)
)
"POLYLINE"
)
(
progn
(
command
"_.CONVERTPOLY"
"_L"
ent
""
)
(
entupd
(
setq
ent
(
entlast
)
)
)
(
vla-update
(
vlax
-
ename
->
vla-object
ent
)
)
(
setq
f t
)
)
)
(
repeat
(
setq
n
(
sslength
ss
)
)
(
setq
entx
(
ssname
ss
(
setq
n
(
1-
n
)
)
)
)
(
setq
intpts
(
intersobj1obj2 ent entx
)
)
(
setq
intptsall
(
append
intpts intptsall
)
)
)
(
foreach
intpt intptsall
(
setq
plpts
(
AT:GetVertices ent
)
)
(
if
(
and
(
not
(
member
-
fuzz intpt plpts 1e
-
6
)
)
(
setq
par
(
vlax-curve-getparamatpoint
ent
(
vlax-curve-getclosestpointto
ent intpt
)
)
)
)
(
add_vtx
(
vlax
-
ename
->
vla-object
ent
)
par ent
)
)
)
(
if
f
(
progn
(
command
"_.CONVERTPOLY"
"_H"
ent
""
)
(
entupd
(
setq
ent
(
entlast
)
)
)
(
vla-update
(
vlax
-
ename
->
vla-object
ent
)
)
)
)
(
princ
)
)
Thanks
Logged
ribarm
Gator
Posts: 3274
Marko Ribar, architect
WWW
Re: help: Add Vertices to selected overlaping polylines at intersecting point
«
Reply #1 on:
October 12, 2022, 10:25:12 AM »
Here are my plintav*.lsp routines from my PLINETOOLS archive...
You should be able to achieve what you asked with some of them...
M.R.
Logged
Marko Ribar, d.i.a.
(graduated engineer of architecture)
M.R. on Youtube
PM
Guest
Re: help: Add Vertices to selected overlaping polylines at intersecting point
«
Reply #2 on:
October 15, 2022, 02:19:14 PM »
Thanks. What the differense between this 4 files. The plintav-new.lsp is the last version?
Logged
Print
Pages: [
1
] |
Go Up
« previous
next »
TheSwamp
»
Code Red
»
AutoLISP (Vanilla / Visual)
»
Topic:
help: Add Vertices to selected overlaping polylines at intersecting point