乐筑天下

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

[编程交流] Vla中与f相交的问题

[复制链接]
gS7

35

主题

244

帖子

212

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
180
发表于 2022-7-6 02:15:11 | 显示全部楼层 |阅读模式
嘿,大哥,
我试图得到3dpolyline的交点,但每次都失败了
如果我选择lwpolylines或Line作为其返回的交点,问题是为什么3dpolylines的交点显示为零
 
示例代码:
  1. (defun c:Test ()
  2. (vl-load-com)
  3. (setq ent1 (vlax-ename->vla-object (car (entsel "First entity: ")))
  4. ent2 (vlax-ename->vla-object (car (entsel "Second entity: ")))
  5. )
  6. (vlax-safearray->list
  7.    (vlax-variant-value
  8.      (vla-IntersectWith ent1 ent2 acExtendnone)
  9.    )
  10. )
  11. )

 
附件
3D多边形。图纸
回复

使用道具 举报

GP_

8

主题

248

帖子

245

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-6 02:20:20 | 显示全部楼层
多段线的高度不同,不相交
回复

使用道具 举报

gS7

35

主题

244

帖子

212

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
180
发表于 2022-7-6 02:23:44 | 显示全部楼层
总成_
你是说Z值?
回复

使用道具 举报

gS7

35

主题

244

帖子

212

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
180
发表于 2022-7-6 02:29:23 | 显示全部楼层
好的,我知道了,我必须选择Z值等于两条多段线相交的同一条多段线,
 
谢谢你提供的信息
回复

使用道具 举报

gS7

35

主题

244

帖子

212

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
180
发表于 2022-7-6 02:32:56 | 显示全部楼层
有什么方法可以得到3dpolyline和Lwpolyline之间的交点吗?
请帮忙
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 02:37:03 | 显示全部楼层
使用inters函数设置Z值
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 02:39:54 | 显示全部楼层
 
我同意;下面是一个快速示例程序:
  1. ([color=BLUE]defun[/color] c:test ( [color=BLUE]/[/color] e i j s1 s2 )
  2.    ([color=BLUE]if[/color]
  3.        ([color=BLUE]and[/color]
  4.            ([color=BLUE]princ[/color] [color=MAROON]"\nSelect LWPolylines..."[/color])
  5.            ([color=BLUE]setq[/color] s1 ([color=BLUE]ssget[/color] '((0 . [color=MAROON]"LWPOLYLINE"[/color]))))
  6.            ([color=BLUE]princ[/color] [color=MAROON]"\nSelect 3D Polylines..."[/color])
  7.            ([color=BLUE]setq[/color] s2 ([color=BLUE]ssget[/color] '((0 . [color=MAROON]"POLYLINE"[/color]) (-4 . [color=MAROON]"&="[/color]) (70 . )))
  8.        )
  9.        ([color=BLUE]repeat[/color] ([color=BLUE]setq[/color] i ([color=BLUE]sslength[/color] s1))
  10.            ([color=BLUE]setq[/color] e ([color=BLUE]ssname[/color] s1 ([color=BLUE]setq[/color] i ([color=BLUE]1-[/color] i))))
  11.            ([color=BLUE]repeat[/color] ([color=BLUE]setq[/color] j ([color=BLUE]sslength[/color] s2))
  12.                ([color=BLUE]foreach[/color] x (2D-poly-inters e ([color=BLUE]ssname[/color] s2 ([color=BLUE]setq[/color] j ([color=BLUE]1-[/color] j))))
  13.                    ([color=BLUE]entmake[/color] ([color=BLUE]list[/color] '(0 . [color=MAROON]"CIRCLE"[/color]) '(40 . 1.0) ([color=BLUE]cons[/color] 10 x)))
  14.                )
  15.            )
  16.        )
  17.    )
  18.    ([color=BLUE]princ[/color])
  19. )
  20. ([color=BLUE]defun[/color] 2D-poly-inters ( lwp 3dp [color=BLUE]/[/color] enx ls1 ls2 vtx )
  21.    ([color=BLUE]setq[/color] ls1 ([color=BLUE]mapcar[/color] '[color=BLUE]cdr[/color] ([color=BLUE]vl-remove-if-not[/color] '([color=BLUE]lambda[/color] ( x ) ([color=BLUE]=[/color] 10 ([color=BLUE]car[/color] x))) ([color=BLUE]entget[/color] lwp)))
  22.          3dp ([color=BLUE]entnext[/color] 3dp)
  23.          enx ([color=BLUE]entget[/color]  3dp)
  24.    )
  25.    ([color=BLUE]while[/color] ([color=BLUE]=[/color] [color=MAROON]"VERTEX"[/color] ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 0 enx)))
  26.        ([color=BLUE]setq[/color] vtx ([color=BLUE]assoc[/color] 10 enx)
  27.              ls2 ([color=BLUE]cons[/color] ([color=BLUE]list[/color] ([color=BLUE]cadr[/color] vtx) ([color=BLUE]caddr[/color] vtx)) ls2)
  28.              3dp ([color=BLUE]entnext[/color] 3dp)
  29.              enx ([color=BLUE]entget[/color]  3dp)
  30.        )
  31.    )
  32.    ([color=BLUE]if[/color] ([color=BLUE]=[/color] 1 ([color=BLUE]logand[/color] 1 ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 70 ([color=BLUE]entget[/color] ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 330 enx)))))))
  33.        ([color=BLUE]setq[/color] ls2 ([color=BLUE]cons[/color] ([color=BLUE]last[/color] ls2) ls2))
  34.    )
  35.    ([color=BLUE]if[/color] ([color=BLUE]=[/color] 1 ([color=BLUE]logand[/color] 1 ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 70 ([color=BLUE]entget[/color] lwp)))))
  36.        ([color=BLUE]setq[/color] ls1 ([color=BLUE]cons[/color] ([color=BLUE]last[/color] ls1) ls1))
  37.    )
  38.    ([color=BLUE]apply[/color] '[color=BLUE]append[/color]
  39.        ([color=BLUE]mapcar[/color]
  40.            ([color=BLUE]function[/color]
  41.                ([color=BLUE]lambda[/color] ( a b )
  42.                    ([color=BLUE]vl-remove[/color] [color=BLUE]nil[/color]
  43.                        ([color=BLUE]mapcar[/color]
  44.                            ([color=BLUE]function[/color]
  45.                                ([color=BLUE]lambda[/color] ( c d )
  46.                                    ([color=BLUE]inters[/color] a b c d)
  47.                                )
  48.                            )
  49.                            ls1 ([color=BLUE]cdr[/color] ls1)
  50.                        )
  51.                    )
  52.                )
  53.            )
  54.            ls2 ([color=BLUE]cdr[/color] ls2)
  55.        )
  56.    )
  57. )
回复

使用道具 举报

GP_

8

主题

248

帖子

245

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-6 02:46:23 | 显示全部楼层
第一条选定多段线上三维交点的版本。
 
  1. (defun c:TesT ( / s1 s2 PP)
  2.    (if
  3.        (and
  4.            (princ "\nSelect First 2D/3D Polyline")
  5.            (setq s1 (ssget  "_+.:S" '((0 . "*POLYLINE"))))
  6.            (princ "\nSelect Second 2D/3D Polyline ")
  7.            (setq s2 (ssget  "_+.:S" '((0 . "*POLYLINE"))))
  8.        )
  9.        (progn
  10.            (setq s1 (ssname s1 0))
  11.            (setq s2 (ssname s2 0))
  12.            (if (setq PP (3D_poly_inters s1 s2))
  13.                (foreach x PP
  14.                    (entmake (list '(0 . "CIRCLE") '(40 . 1.0) (cons 10 x)))
  15.                )
  16.            )            
  17.        )
  18.    )
  19. )
  20. (defun 3D_poly_inters (PL1 PL2 / vPL1 vPL2 zmin zmax p- p+ p_int)
  21.    (setq vPL1 (pl_coord PL1))
  22.    (setq vPL2 (pl_coord PL2))
  23.    (mapcar
  24.       '(lambda (x)
  25.             (or zmin (setq zmin (last x)))
  26.             (or zmax (setq zmax (+ zmin 0.01)))                     
  27.             (if (< (last x) zmin) (setq zmin (last x)))
  28.             (if (> (last x) zmax) (setq zmax (last x)))
  29.        )
  30.        vPL1
  31.    )            
  32.    (if (= 1 (logand 1 (cdr (assoc 70 (entget PL1)))))
  33.        (setq vPL1 (cons (last vPL1) vPL1))
  34.    )
  35.    (if (= 1 (logand 1 (cdr (assoc 70 (entget PL2)))))
  36.        (setq vPL2 (cons (last vPL2) vPL2))
  37.    )
  38.    (mapcar
  39.        '(lambda ( a b )
  40.             (mapcar
  41.                 '(lambda ( c d )
  42.                      (if
  43.                          (setq p
  44.                               (inters
  45.                                   (list (car a) (cadr a))
  46.                                   (list (car b) (cadr b))
  47.                                   (list (car c) (cadr c))
  48.                                   (list (car d) (cadr d))
  49.                               )
  50.                          )
  51.                          (progn
  52.                              (setq p- (list (car p) (cadr p) zmin))
  53.                              (setq p+ (list (car p) (cadr p) zmax))
  54.                              (setq p (inters a b p- p+))
  55.                              (setq p_int (cons p p_int))
  56.                          )
  57.                      )
  58.                  )
  59.                 vPL2 (cdr vPL2)                  
  60.            )
  61.        )
  62.        vPL1 (cdr vPL1)
  63.    )
  64.    p_int
  65. )
  66. (defun pl_coord (# / p m)
  67.    (setq p (if (vlax-curve-IsClosed #)
  68.                (fix (vlax-curve-getEndParam #))
  69.                (1+ (fix (vlax-curve-getEndParam #)))
  70.            )
  71.    )
  72.    (while (/= 0 p)
  73.        (setq m (cons (vlax-curve-getPointAtParam # (setq p (1- p))) m))
  74.    )
  75. )
  76. (vl-load-com)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 02:48:50 | 显示全部楼层
@总成,尖端:
  1. (reverse (cdr (reverse vPL2)))

不需要,因为:
  1. _$ (mapcar '+ '(1 2 3 4 5) '(2 3 4 5))
  2. (3 5 7 9)
回复

使用道具 举报

GP_

8

主题

248

帖子

245

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-6 02:54:54 | 显示全部楼层
李,谢谢你的提示。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 22:31 , Processed in 0.605597 second(s), 72 queries .

© 2020-2025 乐筑天下

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