乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 100|回复: 7

[编程交流] Array Block - Aligned Distance

[复制链接]

6

主题

25

帖子

19

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 02:55:20 | 显示全部楼层 |阅读模式
Hi All,
 
Im trying to achieve a path array so that the chord distance (aligned distance) is constant.
 
Similar to the lisp that Lee Mac has created here but for aligned distance between points or better still a block.
 
http://www.cadtutor.net/forum/showthread.php?82224-Measure-or-Divide-object-without-use-aligned-distance...
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 03:11:15 | 显示全部楼层
Try this, based on Lee's code...
 
This is from half of distance from start point of curve...
 
  1. ([color=BLUE]defun[/color] c:mymeasure-bl ( [color=BLUE]/[/color] [color=BLUE]*error*[/color] bd bn ci cm di en il im in io ob p1 p2 sp )   ;(setq bn "x") ;; Name of block to insert   ([color=BLUE]setq[/color] bn ([color=BLUE]getstring[/color] [color=BLUE]t[/color] [color=BROWN]"\nEnter block Name: "[/color]))      ([color=BLUE]defun[/color] [color=BLUE]*error*[/color] ( msg )       ([color=BLUE]vla-endundomark[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color])))       ([color=BLUE]if[/color] ([color=BLUE]and[/color] ([color=BLUE]=[/color] 'vla-object ([color=BLUE]type[/color] ci)) ([color=BLUE]not[/color] ([color=BLUE]vlax-erased-p[/color] ci)))           ([color=BLUE]vl-catch-all-apply[/color] '[color=BLUE]vla-delete[/color] ([color=BLUE]list[/color] ci))       )       ([color=BLUE]if[/color] ([color=BLUE]=[/color] 'int ([color=BLUE]type[/color] cm))           ([color=BLUE]setvar[/color] 'cmdecho cm)       )       ([color=BLUE]if[/color] msg           ([color=BLUE]princ[/color] ([color=BLUE]strcat[/color] [color=BROWN]"\nError: "[/color] msg))       )       ([color=BLUE]princ[/color])   )   ([color=BLUE]vla-startundomark[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color])))   ([color=BLUE]cond[/color]       (   ([color=BLUE]=[/color] 4 ([color=BLUE]logand[/color] 4 ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 70 ([color=BLUE]tblsearch[/color] [color=BROWN]"layer"[/color] ([color=BLUE]getvar[/color] 'clayer))))))           ([color=BLUE]princ[/color] [color=BROWN]"\nCurrent layer locked."[/color])       )       (   ([color=BLUE]not[/color]               ([color=BLUE]or[/color] ([color=BLUE]tblsearch[/color] [color=BROWN]"block"[/color] bn)                   ([color=BLUE]and[/color] ([color=BLUE]setq[/color] bd ([color=BLUE]findfile[/color] ([color=BLUE]strcat[/color] bn [color=BROWN]".dwg"[/color])))                       ([color=BLUE]progn[/color]                           ([color=BLUE]setq[/color] cm ([color=BLUE]getvar[/color] 'cmdecho))                           ([color=BLUE]setvar[/color] 'cmdecho 0)                           ([color=BLUE]command[/color] [color=BROWN]"_.-insert"[/color] bd [color=BLUE]nil[/color])                           ([color=BLUE]setvar[/color] 'cmdecho cm)                           ([color=BLUE]tblsearch[/color] [color=BROWN]"block"[/color] bn)                       )                   )               )           )           ([color=BLUE]princ[/color] ([color=BLUE]strcat[/color] [color=BROWN]"\nBlock ""[/color] bn [color=BROWN]"" not found."[/color]))       )       (   ([color=BLUE]progn[/color]               ([color=BLUE]while[/color]                   ([color=BLUE]progn[/color]                       ([color=BLUE]setvar[/color] 'errno 0) ([color=BLUE]setq[/color] en ([color=BLUE]car[/color] ([color=BLUE]entsel[/color] [color=BROWN]"\nSelect object to measure: "[/color])))                       ([color=BLUE]cond[/color]                           (   ([color=BLUE]=[/color] 7 ([color=BLUE]getvar[/color] 'errno))                               ([color=BLUE]princ[/color] [color=BROWN]"\nMissed, try again."[/color])                           )                           (   ([color=BLUE]=[/color] 'ename ([color=BLUE]type[/color] en))                               ([color=BLUE]if[/color] ([color=BLUE]vl-catch-all-error-p[/color] ([color=BLUE]vl-catch-all-apply[/color] '[color=BLUE]vlax-curve-getendparam[/color] ([color=BLUE]list[/color] en)))                                   ([color=BLUE]princ[/color] [color=BROWN]"\nInvalid object selected."[/color])                               )                           )                       )                   )               )               ([color=BLUE]/=[/color] 'ename ([color=BLUE]type[/color] en))           )       )       (   ([color=BLUE]progn[/color]               ([color=BLUE]initget[/color] 7)               ([color=BLUE]setq[/color] di ([color=BLUE]getdist[/color] [color=BROWN]"\nSpecify length of segment: "[/color]))           )           ([color=BLUE]setq[/color] p1 ([color=BLUE]vlax-curve-getstartpoint[/color] en)                 p2 ([color=BLUE]vlax-curve-getendpoint[/color]   en)                 ob ([color=BLUE]vlax-ename->vla-object[/color] en)                 sp ([color=BLUE]vlax-get-property[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color]))                        ([color=BLUE]if[/color] ([color=BLUE]=[/color] 1 ([color=BLUE]getvar[/color] 'cvport))                            'paperspace                            'modelspace                        )                    )                 ci ([color=BLUE]vlax-invoke[/color] sp 'addcircle p1 ([color=BLUE]/[/color] di 2.0))           )           ([color=BLUE]if[/color] ([color=BLUE]setq[/color] il ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color]) '(0.0 0.0 0.0)))               ([color=BLUE]vlax-invoke[/color] sp 'insertblock il bn 1.0 1.0 1.0 ([color=BLUE]angle[/color] '(0.0 0.0 0.0) ([color=BLUE]vlax-curve-getfirstderiv[/color] ob ([color=BLUE]vlax-curve-getparamatpoint[/color] ob il))))           )           ([color=BLUE]vla-delete[/color] ci)           ([color=BLUE]setq[/color] ci ([color=BLUE]vlax-invoke[/color] sp 'addcircle il di))           ([color=BLUE]if[/color] ([color=BLUE]setq[/color] im ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color]) '(0.0 0.0 0.0)))               ([color=BLUE]vlax-invoke[/color] sp 'insertblock im bn 1.0 1.0 1.0 ([color=BLUE]angle[/color] '(0.0 0.0 0.0) ([color=BLUE]vlax-curve-getfirstderiv[/color] ob ([color=BLUE]vlax-curve-getparamatpoint[/color] ob im))))           )           ([color=BLUE]vla-delete[/color] ci)           ([color=BLUE]setq[/color] ci ([color=BLUE]vlax-invoke[/color] sp 'addcircle im di))           ([color=BLUE]setq[/color] io [color=BLUE]T[/color])           ([color=BLUE]while[/color] io               ([color=BLUE]if[/color] ([color=BLUE]setq[/color] in ([color=BLUE]list[/color] ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color]) '(0.0 0.0 0.0)) ([color=BLUE]if[/color] ([color=BLUE]=[/color] ([color=BLUE]length[/color] ([color=BLUE]cdddr[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color]))) 3) ([color=BLUE]cdddr[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color])))))                   ([color=BLUE]progn[/color]                       ([color=BLUE]setq[/color] io ([color=BLUE]apply[/color] '[color=BLUE]append[/color] ([color=BLUE]vl-remove-if[/color] '([color=BLUE]lambda[/color] ( x ) ([color=BLUE]equal[/color] x il 1e-6)) in)))                       ([color=BLUE]if[/color] io                           ([color=BLUE]vlax-invoke[/color] sp 'insertblock io bn 1.0 1.0 1.0 ([color=BLUE]angle[/color] '(0.0 0.0 0.0) ([color=BLUE]vlax-curve-getfirstderiv[/color] ob ([color=BLUE]vlax-curve-getparamatpoint[/color] ob io))))                       )                   )               )               ([color=BLUE]vla-delete[/color] ci)               ([color=BLUE]if[/color] io ([color=BLUE]setq[/color] ci ([color=BLUE]vlax-invoke[/color] sp 'addcircle io di)))               ([color=BLUE]setq[/color] il im im io)           )       )   )   ([color=BLUE]*error*[/color] [color=BLUE]nil[/color])   ([color=BLUE]princ[/color]))([color=BLUE]vl-load-com[/color]) ([color=BLUE]princ[/color])
M.R.
 
P.S. Of course it will work in situations if curve path isn't self-crossing or curving too much and if path isn't 3d curve...
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 03:18:47 | 显示全部楼层
This one is from start point of curve...
 
  1. ([color=BLUE]defun[/color] c:mymeasure-bl ( [color=BLUE]/[/color] [color=BLUE]*error*[/color] bd bn ci cm di en il im in io ob p1 p2 sp )   ;(setq bn "x") ;; Name of block to insert   ([color=BLUE]setq[/color] bn ([color=BLUE]getstring[/color] [color=BLUE]t[/color] [color=BROWN]"\nEnter block Name: "[/color]))      ([color=BLUE]defun[/color] [color=BLUE]*error*[/color] ( msg )       ([color=BLUE]vla-endundomark[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color])))       ([color=BLUE]if[/color] ([color=BLUE]and[/color] ([color=BLUE]=[/color] 'vla-object ([color=BLUE]type[/color] ci)) ([color=BLUE]not[/color] ([color=BLUE]vlax-erased-p[/color] ci)))           ([color=BLUE]vl-catch-all-apply[/color] '[color=BLUE]vla-delete[/color] ([color=BLUE]list[/color] ci))       )       ([color=BLUE]if[/color] ([color=BLUE]=[/color] 'int ([color=BLUE]type[/color] cm))           ([color=BLUE]setvar[/color] 'cmdecho cm)       )       ([color=BLUE]if[/color] msg           ([color=BLUE]princ[/color] ([color=BLUE]strcat[/color] [color=BROWN]"\nError: "[/color] msg))       )       ([color=BLUE]princ[/color])   )   ([color=BLUE]vla-startundomark[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color])))   ([color=BLUE]cond[/color]       (   ([color=BLUE]=[/color] 4 ([color=BLUE]logand[/color] 4 ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 70 ([color=BLUE]tblsearch[/color] [color=BROWN]"layer"[/color] ([color=BLUE]getvar[/color] 'clayer))))))           ([color=BLUE]princ[/color] [color=BROWN]"\nCurrent layer locked."[/color])       )       (   ([color=BLUE]not[/color]               ([color=BLUE]or[/color] ([color=BLUE]tblsearch[/color] [color=BROWN]"block"[/color] bn)                   ([color=BLUE]and[/color] ([color=BLUE]setq[/color] bd ([color=BLUE]findfile[/color] ([color=BLUE]strcat[/color] bn [color=BROWN]".dwg"[/color])))                       ([color=BLUE]progn[/color]                           ([color=BLUE]setq[/color] cm ([color=BLUE]getvar[/color] 'cmdecho))                           ([color=BLUE]setvar[/color] 'cmdecho 0)                           ([color=BLUE]command[/color] [color=BROWN]"_.-insert"[/color] bd [color=BLUE]nil[/color])                           ([color=BLUE]setvar[/color] 'cmdecho cm)                           ([color=BLUE]tblsearch[/color] [color=BROWN]"block"[/color] bn)                       )                   )               )           )           ([color=BLUE]princ[/color] ([color=BLUE]strcat[/color] [color=BROWN]"\nBlock ""[/color] bn [color=BROWN]"" not found."[/color]))       )       (   ([color=BLUE]progn[/color]               ([color=BLUE]while[/color]                   ([color=BLUE]progn[/color]                       ([color=BLUE]setvar[/color] 'errno 0) ([color=BLUE]setq[/color] en ([color=BLUE]car[/color] ([color=BLUE]entsel[/color] [color=BROWN]"\nSelect object to measure: "[/color])))                       ([color=BLUE]cond[/color]                           (   ([color=BLUE]=[/color] 7 ([color=BLUE]getvar[/color] 'errno))                               ([color=BLUE]princ[/color] [color=BROWN]"\nMissed, try again."[/color])                           )                           (   ([color=BLUE]=[/color] 'ename ([color=BLUE]type[/color] en))                               ([color=BLUE]if[/color] ([color=BLUE]vl-catch-all-error-p[/color] ([color=BLUE]vl-catch-all-apply[/color] '[color=BLUE]vlax-curve-getendparam[/color] ([color=BLUE]list[/color] en)))                                   ([color=BLUE]princ[/color] [color=BROWN]"\nInvalid object selected."[/color])                               )                           )                       )                   )               )               ([color=BLUE]/=[/color] 'ename ([color=BLUE]type[/color] en))           )       )       (   ([color=BLUE]progn[/color]               ([color=BLUE]initget[/color] 7)               ([color=BLUE]setq[/color] di ([color=BLUE]getdist[/color] [color=BROWN]"\nSpecify length of segment: "[/color]))           )           ([color=BLUE]setq[/color] p1 ([color=BLUE]vlax-curve-getstartpoint[/color] en)                 p2 ([color=BLUE]vlax-curve-getendpoint[/color]   en)                 ob ([color=BLUE]vlax-ename->vla-object[/color] en)                 sp ([color=BLUE]vlax-get-property[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color]))                        ([color=BLUE]if[/color] ([color=BLUE]=[/color] 1 ([color=BLUE]getvar[/color] 'cvport))                            'paperspace                            'modelspace                        )                    )           )           ([color=BLUE]if[/color] ([color=BLUE]setq[/color] il p1)               ([color=BLUE]vlax-invoke[/color] sp 'insertblock il bn 1.0 1.0 1.0 ([color=BLUE]angle[/color] '(0.0 0.0 0.0) ([color=BLUE]vlax-curve-getfirstderiv[/color] ob ([color=BLUE]vlax-curve-getparamatpoint[/color] ob il))))           )           ([color=BLUE]setq[/color] ci ([color=BLUE]vlax-invoke[/color] sp 'addcircle il di))           ([color=BLUE]if[/color] ([color=BLUE]setq[/color] im ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color]) '(0.0 0.0 0.0)))               ([color=BLUE]vlax-invoke[/color] sp 'insertblock im bn 1.0 1.0 1.0 ([color=BLUE]angle[/color] '(0.0 0.0 0.0) ([color=BLUE]vlax-curve-getfirstderiv[/color] ob ([color=BLUE]vlax-curve-getparamatpoint[/color] ob im))))           )           ([color=BLUE]vla-delete[/color] ci)           ([color=BLUE]setq[/color] ci ([color=BLUE]vlax-invoke[/color] sp 'addcircle im di))           ([color=BLUE]setq[/color] io [color=BLUE]T[/color])           ([color=BLUE]while[/color] io               ([color=BLUE]if[/color] ([color=BLUE]setq[/color] in ([color=BLUE]list[/color] ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color]) '(0.0 0.0 0.0)) ([color=BLUE]if[/color] ([color=BLUE]=[/color] ([color=BLUE]length[/color] ([color=BLUE]cdddr[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color]))) 3) ([color=BLUE]cdddr[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color])))))                   ([color=BLUE]progn[/color]                       ([color=BLUE]setq[/color] io ([color=BLUE]apply[/color] '[color=BLUE]append[/color] ([color=BLUE]vl-remove-if[/color] '([color=BLUE]lambda[/color] ( x ) ([color=BLUE]equal[/color] x il 1e-6)) in)))                       ([color=BLUE]if[/color] io                           ([color=BLUE]vlax-invoke[/color] sp 'insertblock io bn 1.0 1.0 1.0 ([color=BLUE]angle[/color] '(0.0 0.0 0.0) ([color=BLUE]vlax-curve-getfirstderiv[/color] ob ([color=BLUE]vlax-curve-getparamatpoint[/color] ob io))))                       )                   )               )               ([color=BLUE]vla-delete[/color] ci)               ([color=BLUE]if[/color] io ([color=BLUE]setq[/color] ci ([color=BLUE]vlax-invoke[/color] sp 'addcircle io di)))               ([color=BLUE]setq[/color] il im im io)           )       )   )   ([color=BLUE]*error*[/color] [color=BLUE]nil[/color])   ([color=BLUE]princ[/color]))([color=BLUE]vl-load-com[/color]) ([color=BLUE]princ[/color])
 
M.R.
回复

使用道具 举报

6

主题

25

帖子

19

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 03:25:58 | 显示全部楼层
Thanks so much Marko, this works great.
 
Any chance of changing the blocks rotation angle from tangent with the curve to just 0 degrees for all.
 
Or even better that the rotation of a block, is the same angle as a line drawn from the blocks insertion point to the next blocks insertion point.
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 03:33:35 | 显示全部楼层
Maybe this, but note that last inserted block doesn't have next reference block from witch it would get alignment, so rotation of last and one block before last one is the same...
 
This is from half of distance from start point of curve...
 
  1. ([color=BLUE]defun[/color] c:mymeasure-bl ( [color=BLUE]/[/color] [color=BLUE]*error*[/color] bd bn ci cm di el en il im in io ob p1 p2 sp )   ;(setq bn "x") ;; Name of block to insert   ([color=BLUE]setq[/color] bn ([color=BLUE]getstring[/color] [color=BLUE]t[/color] [color=BROWN]"\nEnter block Name: "[/color]))      ([color=BLUE]defun[/color] [color=BLUE]*error*[/color] ( msg )       ([color=BLUE]vla-endundomark[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color])))       ([color=BLUE]if[/color] ([color=BLUE]and[/color] ([color=BLUE]=[/color] 'vla-object ([color=BLUE]type[/color] ci)) ([color=BLUE]not[/color] ([color=BLUE]vlax-erased-p[/color] ci)))           ([color=BLUE]vl-catch-all-apply[/color] '[color=BLUE]vla-delete[/color] ([color=BLUE]list[/color] ci))       )       ([color=BLUE]if[/color] ([color=BLUE]=[/color] 'int ([color=BLUE]type[/color] cm))           ([color=BLUE]setvar[/color] 'cmdecho cm)       )       ([color=BLUE]if[/color] msg           ([color=BLUE]princ[/color] ([color=BLUE]strcat[/color] [color=BROWN]"\nError: "[/color] msg))       )       ([color=BLUE]princ[/color])   )   ([color=BLUE]vla-startundomark[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color])))   ([color=BLUE]cond[/color]       (   ([color=BLUE]=[/color] 4 ([color=BLUE]logand[/color] 4 ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 70 ([color=BLUE]tblsearch[/color] [color=BROWN]"layer"[/color] ([color=BLUE]getvar[/color] 'clayer))))))           ([color=BLUE]princ[/color] [color=BROWN]"\nCurrent layer locked."[/color])       )       (   ([color=BLUE]not[/color]               ([color=BLUE]or[/color] ([color=BLUE]tblsearch[/color] [color=BROWN]"block"[/color] bn)                   ([color=BLUE]and[/color] ([color=BLUE]setq[/color] bd ([color=BLUE]findfile[/color] ([color=BLUE]strcat[/color] bn [color=BROWN]".dwg"[/color])))                       ([color=BLUE]progn[/color]                           ([color=BLUE]setq[/color] cm ([color=BLUE]getvar[/color] 'cmdecho))                           ([color=BLUE]setvar[/color] 'cmdecho 0)                           ([color=BLUE]command[/color] [color=BROWN]"_.-insert"[/color] bd [color=BLUE]nil[/color])                           ([color=BLUE]setvar[/color] 'cmdecho cm)                           ([color=BLUE]tblsearch[/color] [color=BROWN]"block"[/color] bn)                       )                   )               )           )           ([color=BLUE]princ[/color] ([color=BLUE]strcat[/color] [color=BROWN]"\nBlock ""[/color] bn [color=BROWN]"" not found."[/color]))       )       (   ([color=BLUE]progn[/color]               ([color=BLUE]while[/color]                   ([color=BLUE]progn[/color]                       ([color=BLUE]setvar[/color] 'errno 0) ([color=BLUE]setq[/color] en ([color=BLUE]car[/color] ([color=BLUE]entsel[/color] [color=BROWN]"\nSelect object to measure: "[/color])))                       ([color=BLUE]cond[/color]                           (   ([color=BLUE]=[/color] 7 ([color=BLUE]getvar[/color] 'errno))                               ([color=BLUE]princ[/color] [color=BROWN]"\nMissed, try again."[/color])                           )                           (   ([color=BLUE]=[/color] 'ename ([color=BLUE]type[/color] en))                               ([color=BLUE]if[/color] ([color=BLUE]vl-catch-all-error-p[/color] ([color=BLUE]vl-catch-all-apply[/color] '[color=BLUE]vlax-curve-getendparam[/color] ([color=BLUE]list[/color] en)))                                   ([color=BLUE]princ[/color] [color=BROWN]"\nInvalid object selected."[/color])                               )                           )                       )                   )               )               ([color=BLUE]/=[/color] 'ename ([color=BLUE]type[/color] en))           )       )       (   ([color=BLUE]progn[/color]               ([color=BLUE]initget[/color] 7)               ([color=BLUE]setq[/color] di ([color=BLUE]getdist[/color] [color=BROWN]"\nSpecify length of segment: "[/color]))           )           ([color=BLUE]setq[/color] p1 ([color=BLUE]vlax-curve-getstartpoint[/color] en)                 p2 ([color=BLUE]vlax-curve-getendpoint[/color]   en)                 ob ([color=BLUE]vlax-ename->vla-object[/color] en)                 sp ([color=BLUE]vlax-get-property[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color]))                        ([color=BLUE]if[/color] ([color=BLUE]=[/color] 1 ([color=BLUE]getvar[/color] 'cvport))                            'paperspace                            'modelspace                        )                    )                 ci ([color=BLUE]vlax-invoke[/color] sp 'addcircle p1 ([color=BLUE]/[/color] di 2.0))           )           ([color=BLUE]if[/color] ([color=BLUE]setq[/color] il ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color]) '(0.0 0.0 0.0)))               ([color=BLUE]vlax-invoke[/color] sp 'insertblock il bn 1.0 1.0 1.0 0.0)           )           ([color=BLUE]setq[/color] el ([color=BLUE]entlast[/color]))           ([color=BLUE]vla-delete[/color] ci)           ([color=BLUE]setq[/color] ci ([color=BLUE]vlax-invoke[/color] sp 'addcircle il di))           ([color=BLUE]if[/color] ([color=BLUE]setq[/color] im ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color]) '(0.0 0.0 0.0)))               ([color=BLUE]vlax-invoke[/color] sp 'insertblock im bn 1.0 1.0 1.0 0.0)           )           ([color=BLUE]vla-put-rotation[/color] ([color=BLUE]vlax-ename->vla-object[/color] el) ([color=BLUE]angle[/color] il im))           ([color=BLUE]setq[/color] el ([color=BLUE]entlast[/color]))           ([color=BLUE]vla-delete[/color] ci)           ([color=BLUE]setq[/color] ci ([color=BLUE]vlax-invoke[/color] sp 'addcircle im di))           ([color=BLUE]setq[/color] io [color=BLUE]T[/color])           ([color=BLUE]while[/color] io               ([color=BLUE]if[/color] ([color=BLUE]setq[/color] in ([color=BLUE]list[/color] ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color]) '(0.0 0.0 0.0)) ([color=BLUE]if[/color] ([color=BLUE]=[/color] ([color=BLUE]length[/color] ([color=BLUE]cdddr[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color]))) 3) ([color=BLUE]cdddr[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color])))))                   ([color=BLUE]progn[/color]                       ([color=BLUE]setq[/color] io ([color=BLUE]apply[/color] '[color=BLUE]append[/color] ([color=BLUE]vl-remove-if[/color] '([color=BLUE]lambda[/color] ( x ) ([color=BLUE]equal[/color] x il 1e-6)) in)))                       ([color=BLUE]if[/color] io                           ([color=BLUE]progn[/color]                               ([color=BLUE]vla-put-rotation[/color] ([color=BLUE]vlax-ename->vla-object[/color] el) ([color=BLUE]angle[/color] im io))                               ([color=BLUE]vlax-invoke[/color] sp 'insertblock io bn 1.0 1.0 1.0 ([color=BLUE]angle[/color] im io))                               ([color=BLUE]setq[/color] el ([color=BLUE]entlast[/color]))                           )                       )                   )               )               ([color=BLUE]vla-delete[/color] ci)               ([color=BLUE]if[/color] io ([color=BLUE]setq[/color] ci ([color=BLUE]vlax-invoke[/color] sp 'addcircle io di)))               ([color=BLUE]setq[/color] il im im io)           )       )   )   ([color=BLUE]*error*[/color] [color=BLUE]nil[/color])   ([color=BLUE]princ[/color]))([color=BLUE]vl-load-com[/color]) ([color=BLUE]princ[/color])
 
M.R.
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 03:44:32 | 显示全部楼层
This one is from start point of curve...
 
  1. ([color=BLUE]defun[/color] c:mymeasure-bl ( [color=BLUE]/[/color] [color=BLUE]*error*[/color] bd bn ci cm di el en il im in io ob p1 p2 sp )   ;(setq bn "x") ;; Name of block to insert   ([color=BLUE]setq[/color] bn ([color=BLUE]getstring[/color] [color=BLUE]t[/color] [color=BROWN]"\nEnter block Name: "[/color]))      ([color=BLUE]defun[/color] [color=BLUE]*error*[/color] ( msg )       ([color=BLUE]vla-endundomark[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color])))       ([color=BLUE]if[/color] ([color=BLUE]and[/color] ([color=BLUE]=[/color] 'vla-object ([color=BLUE]type[/color] ci)) ([color=BLUE]not[/color] ([color=BLUE]vlax-erased-p[/color] ci)))           ([color=BLUE]vl-catch-all-apply[/color] '[color=BLUE]vla-delete[/color] ([color=BLUE]list[/color] ci))       )       ([color=BLUE]if[/color] ([color=BLUE]=[/color] 'int ([color=BLUE]type[/color] cm))           ([color=BLUE]setvar[/color] 'cmdecho cm)       )       ([color=BLUE]if[/color] msg           ([color=BLUE]princ[/color] ([color=BLUE]strcat[/color] [color=BROWN]"\nError: "[/color] msg))       )       ([color=BLUE]princ[/color])   )   ([color=BLUE]vla-startundomark[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color])))   ([color=BLUE]cond[/color]       (   ([color=BLUE]=[/color] 4 ([color=BLUE]logand[/color] 4 ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 70 ([color=BLUE]tblsearch[/color] [color=BROWN]"layer"[/color] ([color=BLUE]getvar[/color] 'clayer))))))           ([color=BLUE]princ[/color] [color=BROWN]"\nCurrent layer locked."[/color])       )       (   ([color=BLUE]not[/color]               ([color=BLUE]or[/color] ([color=BLUE]tblsearch[/color] [color=BROWN]"block"[/color] bn)                   ([color=BLUE]and[/color] ([color=BLUE]setq[/color] bd ([color=BLUE]findfile[/color] ([color=BLUE]strcat[/color] bn [color=BROWN]".dwg"[/color])))                       ([color=BLUE]progn[/color]                           ([color=BLUE]setq[/color] cm ([color=BLUE]getvar[/color] 'cmdecho))                           ([color=BLUE]setvar[/color] 'cmdecho 0)                           ([color=BLUE]command[/color] [color=BROWN]"_.-insert"[/color] bd [color=BLUE]nil[/color])                           ([color=BLUE]setvar[/color] 'cmdecho cm)                           ([color=BLUE]tblsearch[/color] [color=BROWN]"block"[/color] bn)                       )                   )               )           )           ([color=BLUE]princ[/color] ([color=BLUE]strcat[/color] [color=BROWN]"\nBlock ""[/color] bn [color=BROWN]"" not found."[/color]))       )       (   ([color=BLUE]progn[/color]               ([color=BLUE]while[/color]                   ([color=BLUE]progn[/color]                       ([color=BLUE]setvar[/color] 'errno 0) ([color=BLUE]setq[/color] en ([color=BLUE]car[/color] ([color=BLUE]entsel[/color] [color=BROWN]"\nSelect object to measure: "[/color])))                       ([color=BLUE]cond[/color]                           (   ([color=BLUE]=[/color] 7 ([color=BLUE]getvar[/color] 'errno))                               ([color=BLUE]princ[/color] [color=BROWN]"\nMissed, try again."[/color])                           )                           (   ([color=BLUE]=[/color] 'ename ([color=BLUE]type[/color] en))                               ([color=BLUE]if[/color] ([color=BLUE]vl-catch-all-error-p[/color] ([color=BLUE]vl-catch-all-apply[/color] '[color=BLUE]vlax-curve-getendparam[/color] ([color=BLUE]list[/color] en)))                                   ([color=BLUE]princ[/color] [color=BROWN]"\nInvalid object selected."[/color])                               )                           )                       )                   )               )               ([color=BLUE]/=[/color] 'ename ([color=BLUE]type[/color] en))           )       )       (   ([color=BLUE]progn[/color]               ([color=BLUE]initget[/color] 7)               ([color=BLUE]setq[/color] di ([color=BLUE]getdist[/color] [color=BROWN]"\nSpecify length of segment: "[/color]))           )           ([color=BLUE]setq[/color] p1 ([color=BLUE]vlax-curve-getstartpoint[/color] en)                 p2 ([color=BLUE]vlax-curve-getendpoint[/color]   en)                 ob ([color=BLUE]vlax-ename->vla-object[/color] en)                 sp ([color=BLUE]vlax-get-property[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color]))                        ([color=BLUE]if[/color] ([color=BLUE]=[/color] 1 ([color=BLUE]getvar[/color] 'cvport))                            'paperspace                            'modelspace                        )                    )           )           ([color=BLUE]if[/color] ([color=BLUE]setq[/color] il p1)               ([color=BLUE]vlax-invoke[/color] sp 'insertblock il bn 1.0 1.0 1.0 0.0)           )           ([color=BLUE]setq[/color] el ([color=BLUE]entlast[/color]))           ([color=BLUE]setq[/color] ci ([color=BLUE]vlax-invoke[/color] sp 'addcircle il di))           ([color=BLUE]if[/color] ([color=BLUE]setq[/color] im ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color]) '(0.0 0.0 0.0)))               ([color=BLUE]vlax-invoke[/color] sp 'insertblock im bn 1.0 1.0 1.0 0.0)           )           ([color=BLUE]vla-put-rotation[/color] ([color=BLUE]vlax-ename->vla-object[/color] el) ([color=BLUE]angle[/color] il im))            ([color=BLUE]setq[/color] el ([color=BLUE]entlast[/color]))           ([color=BLUE]vla-delete[/color] ci)           ([color=BLUE]setq[/color] ci ([color=BLUE]vlax-invoke[/color] sp 'addcircle im di))           ([color=BLUE]setq[/color] io [color=BLUE]T[/color])           ([color=BLUE]while[/color] io               ([color=BLUE]if[/color] ([color=BLUE]setq[/color] in ([color=BLUE]list[/color] ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color]) '(0.0 0.0 0.0)) ([color=BLUE]if[/color] ([color=BLUE]=[/color] ([color=BLUE]length[/color] ([color=BLUE]cdddr[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color]))) 3) ([color=BLUE]cdddr[/color] ([color=BLUE]vlax-invoke[/color] ob 'intersectwith ci [color=BLUE]acextendnone[/color])))))                   ([color=BLUE]progn[/color]                       ([color=BLUE]setq[/color] io ([color=BLUE]apply[/color] '[color=BLUE]append[/color] ([color=BLUE]vl-remove-if[/color] '([color=BLUE]lambda[/color] ( x ) ([color=BLUE]equal[/color] x il 1e-6)) in)))                       ([color=BLUE]if[/color] io                           ([color=BLUE]progn[/color]                               ([color=BLUE]vla-put-rotation[/color] ([color=BLUE]vlax-ename->vla-object[/color] el) ([color=BLUE]angle[/color] im io))                               ([color=BLUE]vlax-invoke[/color] sp 'insertblock io bn 1.0 1.0 1.0 ([color=BLUE]angle[/color] im io))                               ([color=BLUE]setq[/color] el ([color=BLUE]entlast[/color]))                           )                       )                   )               )               ([color=BLUE]vla-delete[/color] ci)               ([color=BLUE]if[/color] io ([color=BLUE]setq[/color] ci ([color=BLUE]vlax-invoke[/color] sp 'addcircle io di)))               ([color=BLUE]setq[/color] il im im io)           )       )   )   ([color=BLUE]*error*[/color] [color=BLUE]nil[/color])   ([color=BLUE]princ[/color]))([color=BLUE]vl-load-com[/color]) ([color=BLUE]princ[/color])
M.R.
回复

使用道具 举报

6

主题

25

帖子

19

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 03:51:14 | 显示全部楼层
Thanks heaps Marko, u have saved me loads of time doing this manually, as I have a few hundred blocks arrayed end to end. The rotation angle is exactly right! :thumbup:
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 03:59:03 | 显示全部楼层
I am glad I could help, but most of all thank to Mr. Lee Mac for posting main body of the code...
 
You're very welcome...
 
M.R.
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 22:42 , Processed in 0.525398 second(s), 79 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表