TheSwamp
Code Red => AutoLISP (Vanilla / Visual) => Topic started by: HasanCAD on April 18, 2018, 12:02:25 PM
Title:
Why is this lisp count start point of 2 lines as one point?
Post by:
HasanCAD
on
April 18, 2018, 12:02:25 PM
attached snapshop for the result no. 1 has 2 lines
The code
Code - Auto/Visual Lisp:
[Select]
(
defun
c:RVC
(
/
*
acad arc clyr doc gp gp1 i obj objs ortmd
p1 p1x p1y p2 p2x p2y p3 p4 p5 p5x p5y ptlist
sp spc tmp ts
)
(
vl-load-com
)
(
setq
doc
(
vla-get-ActiveDocument
(
setq
*
acad
(
vlax-get-Acad-Object
)
)
)
spc
(
if
(
zerop
(
vla-get-activespace
doc
)
)
(
if
(
=
(
vla-get-mspace
doc
)
:vlax-true
)
(
vla-get-modelspace
doc
)
(
vla-get-paperspace
doc
)
)
(
vla-get-modelspace
doc
)
)
)
(
setq
arc
500
)
(
setq
gp
(
getpoint
"
\n
Pick gathering porvcint"
)
)
(
setq
gp
(
trans
gp
1
0
)
)
(
setq
ts
(
getvar
'TEXTSIZE
)
)
(
setvar
'TEXTSIZE
250
)
(
setq
sp
(
getvar
'TEXTSIZE
)
)
(
setq
i
-
1
)
(
while
T
(
if
(
and
(
setq
p1
(
getpoint
"
\n
Pick first corner"
)
)
(
setq
p1
(
trans
p1
1
0
)
)
(
setq
ortmd
(
getvar
"orthomode"
)
)
(
setvar
"orthomode"
0
)
(
setq
p2
(
getcorner
p1
"
\n
Pick second corner"
)
)
(
setq
p2
(
trans
p2
1
0
)
)
(
setvar
"orthomode"
ortmd
)
)
(
progn
(
setq
clyr
(
getvar
"clayer"
)
)
(
vl-cmdf
"_.LAYER"
"MAKE"
"Defpoints"
""
)
(
setvar
"clayer"
clyr
)
(
setq
p1X
(
min
(
nth
0
p1
)
(
nth
0
p2
)
)
p1Y
(
min
(
nth
1
p1
)
(
nth
1
p2
)
)
p2X
(
max
(
nth
0
p1
)
(
nth
0
p2
)
)
p2Y
(
max
(
nth
1
p1
)
(
nth
1
p2
)
)
)
(
setq
p1
(
list
p1X p1Y
0
)
p2
(
list
p2X p2Y
0
)
p3
(
list
p2X p1Y
0
)
p4
(
list
p1X p2Y
0
)
ptlist
(
list
p1 p3 p2 p4
)
ptlist
(
apply
'
append
ptlist
)
)
(
setq
tmp
(
vlax
-
make
-
safearray
vlax-vbDouble
(
cons
0
(
-
(
length
ptlist
)
1
)
)
)
)
(
vlax-safearray-fill
tmp ptlist
)
(
setq
obj
(
vla-addPolyline
spc tmp
)
)
(
vla-put-closed
obj
:vlax-true
)
(
vl-cmdf
"_.Revcloud"
"A"
arc arc
""
(
entlast
)
"NO"
)
(
setq
obj
(
vlax
-
ename
->
vla-object
(
entlast
)
)
)
(
setq
objs
(
vla-put-layer
obj
"Defpoints"
)
)
(
setq
objs
(
vla-put-color
obj
256
)
)
(
if
(
<
0
(
nth
0
p1
)
)
(
setq
p5x
(
nth
0
p1
)
)
(
setq
p5x
(
nth
0
p2
)
)
)
(
if
(
<
0
(
nth
1
p1
)
)
(
setq
p5y
(
nth
1
p1
)
)
(
setq
p5y
(
nth
1
p4
)
)
)
(
setq
p5
(
kjk_nearest gp
(
list
p1 p2 p3 p4
)
)
)
(
setq
gp1
(
polar
gp
(
*
1.5
pi
)
(
*
(
setq
i
(
1+
i
)
)
(
*
sp
2
)
)
)
)
(
vl-cmdf
"_.LINE"
gp1 p5
""
)
(
setq
obj
(
vlax
-
ename
->
vla-object
(
entlast
)
)
)
(
setq
objs
(
vla-put-layer
obj
"Defpoints"
)
)
(
setq
objs
(
vla-put-color
obj
256
)
)
(
setq
objs
(
vla-put-linetype
obj
"Continuous"
)
)
(
setq
obj
(
vla-addtext
spc
(
strcat
(
itoa
(
1+
i
)
)
" - "
)
(
vlax-3D-point
gp1
)
sp
)
)
(
setq
objs
(
vla-put-layer
obj
"Defpoints"
)
)
(
setq
objs
(
vla-put-color
obj
256
)
)
)
)
)
(
setvar
'TEXTSIZE ts
)
)
(
defun
kjk_nearest
(
pt1 ptlist
/
tpt nearest
)
(
foreach
tpt ptlist
(
if
tpt
(
setq
nearest tpt
)
)
)
(
foreach
tpt ptlist
(
if
tpt
(
if
(
<
(
distance
tpt pt1
)
(
distance
pt1 nearest
)
)
(
setq
nearest tpt
)
)
)
)
nearest
)
Thanks in advance
Title:
Re: Why is this lisp count start point of 2 lines as one point?
Post by:
CAB
on
April 18, 2018, 12:12:35 PM
Without trying the lisp, Turn the osnaps off.
Title:
Re: Why is this lisp count start point of 2 lines as one point?
Post by:
HasanCAD
on
April 19, 2018, 03:09:52 AM
Thanks CAB
Working perfect