乐筑天下

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

[编程交流] 合并两条多段线

[复制链接]

44

主题

139

帖子

95

银币

后起之秀

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

铜币
221
发表于 2022-7-5 18:40:02 | 显示全部楼层 |阅读模式
大家好,我不知道为什么,但我的Lisp程序!
 
我必须从点列表中创建一条多段线,但我真的不知道该怎么做。我到处都找了,但遗漏了一些东西。。
 
这就是我正在做的:
1、创建多段线->提取坐标
  1. (SETQ coordinate1 (VLAX-SAFEARRAY->LIST
  2.                     (VLAX-VARIANT-VALUE (VLAX-GET-PROPERTY obj1 'Coordinates))
  3.                   )
  4. )

2、进行偏移并提取坐标
  1. (SETQ coordinate3 (VLAX-SAFEARRAY->LIST
  2.                     (VLAX-VARIANT-VALUE (VLAX-GET-PROPERTY obj1 'Coordinates))
  3.                   )
  4. )

 
现在我想合并这些线(合并点列表并生成多段线)。
第二个方向与第一个方向相同,我需要反转它!
 
我有两个问题:
1.无法附加点列表,因为我得到了这样的结果:
(1 2 3 4 5 6 ..) 而不是((1 2)(3 4)(5 6)(…)
  1. (setq lista_punti (append lista_punti (list (nth n coordinate1) (nth (1+ n) coordinate1))))

 
2、真的不知道该怎么做。。我看到了一些关于lamda函数的东西。
 
  1. (entmakex
  2.        (append
  3.   (list
  4.     '(0 . "LWPOLYLINE")                ;nome
  5.     '(100 . "AcDbEntity")
  6.     '(100 . "AcDbPolyline")
  7.     ;'(8 . "Muri")                ;layer
  8.     ;'(62 . 5)                        ;colore
  9.     (cons 90 (length coordinate1))                        ;numero vertici
  10.     '(90 . 4)
  11.     '(70 . 1)                        ;1 chiusa, 0 aperta
  12.     )
  13. ;istructions here?
  14. )
  15. )

 
有人能给我一个建议吗?
 

                               
登录/注册后可看大图

谢谢
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 18:52:22 | 显示全部楼层
一个叫freerefill的家伙不久前把这个放在了一起。虽然不是最干净的代码,但它非常可靠。
 
  1.   (defun plverts (ent / retn listy retDum add1 add2) ;
  2.    (vl-load-com)
  3.    (if        (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE")
  4.      (progn
  5. (setq retn  nil
  6.       listy (vlax-safearray->list
  7.               (vlax-variant-value
  8.                 (vla-get-coordinates (vlax-ename->vla-object ent))
  9.               )
  10.             )
  11. )
  12. (while (and (setq var1 (car listy)) (setq var2 (cadr listy)))
  13.   (setq retn (append retn (list (list var1 var2 0))))
  14.   (setq listy (cddr listy))
  15. )
  16.      )
  17.    )
  18.    retn
  19. )                                        ; Returns a list of 3D coordinates defining the vertices of a polygon
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 19:11:53 | 显示全部楼层
所以你可以这样做:
  1. (SETQ coordinate1 (plverts ent1))
要获得两者的分数,只需附加两个列表。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 19:17:01 | 显示全部楼层
我想我不明白。
 
是否希望一条连续的pline合并两条具有穿过形状中点的顶点的现有线,并添加端盖?
 
所附jpg中显示的顶点顺序不会有任何重叠段
 
-大卫
194010gvy8kxnhnjd9ygvd.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:32:12 | 显示全部楼层
这应该有帮助(减去图案填充)。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 19:43:45 | 显示全部楼层
这是另一个示例,从点列表中创建柱线。
 
  1. ; co-ordsxy is a list of 2d points
  2. (setq x -1) ; so x starts at nth 0 at start and closing
  3. (command "PLINE" (while (= (getvar "cmdactive") 1)
  4.                    (COMMAND (repeat (length co-ordsxy)
  5.                             (nth (setq x (+ x 1)) co-ordsxy)
  6.                             )
  7.                     )
  8.                  )   
  9. )
  10. (command "C")
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 13:25 , Processed in 0.526472 second(s), 67 queries .

© 2020-2025 乐筑天下

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