乐筑天下

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

[编程交流] Fas-连接水平和ve

[复制链接]

13

主题

39

帖子

26

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 06:54:21 | 显示全部楼层 |阅读模式
各位专家,需要lisp快速连接几乎水平或垂直对齐的点。它将要求1)选择第一个点2)向北、向南、向东或向西3)方向左侧或右侧的模糊/公差距离。随附插图。非常感谢。
 
勘误:在标题中,“Fas”应该是“Fast”。谢谢
连接线路。图纸
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 07:53:24 | 显示全部楼层
你有重复的点,所以我做了过度杀戮,而且你的点远离WCS基点(0.0 0.0 0.0),所以我移动了所有实体以适用于我的代码。。。对于模糊因子:1e-2,它对我有效。。。我将附上我的DWG版本。。。
 
  1. (defun c:fpgl nil (c:fillpointgridwithlines))
  2. (defun c:fillpointgridwithlines ( / osm ape *error* fuzz ss k entpt pt ptlst ptcllst ptcl1 ptcl2 ptcl3 ptcl4 )
  3. (setq osm (getvar 'osmode))
  4. (setq ape (getvar 'aperture))
  5. (setvar 'osmode 0)
  6. (setvar 'aperture 1)
  7. (defun *error* ( msg )
  8.    (if osm (setvar 'osmode osm))
  9.    (if ape (setvar 'aperture ape))
  10. )
  11. (prompt "\nSelect points for grid connection with lines")
  12. (while (not (setq ss (ssget '((0 . "POINT"))))))
  13. (initget 7)
  14. (setq fuzz (getreal "\nEnter fuzz factor (1e-1...1e-10) : "))
  15. (setq k -1)
  16. (while (and (setq entpt (ssname ss (setq k (1+ k)))) (< k (sslength ss)))
  17.    (setq pt (cdr (assoc 10 (entget entpt))))
  18.    (setq ptlst (cons pt ptlst))
  19. )
  20. (foreach pt ptlst
  21.    (setq ptcl1 (nth 1 (setq ptcllst (vl-sort ptlst '(lambda ( a b ) (< (distance pt a) (distance pt b)))))))
  22.    (setq ptcl2 (nth 2 ptcllst))
  23.    (setq ptcl3 (nth 3 ptcllst))
  24.    (setq ptcl4 (nth 4 ptcllst))
  25.    (if (or (equal (angle pt ptcl1) 0.0 fuzz) (equal (angle pt ptcl1) (* 0.5 pi) fuzz) (equal (angle pt ptcl1) pi fuzz) (equal (angle pt ptcl1) (* 1.5 pi) fuzz) (equal (angle pt ptcl1) (* 2.0 pi) fuzz))
  26.      (if (not (ssget (mapcar '/ (mapcar '+ pt ptcl1) '(2.0 2.0 2.0)) '((0 . "LINE"))))
  27.        (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") '(100 . "AcDbLine") (cons 10 pt) (cons 11 ptcl1)))
  28.      )
  29.    )
  30.    (if (or (equal (angle pt ptcl2) 0.0 fuzz) (equal (angle pt ptcl2) (* 0.5 pi) fuzz) (equal (angle pt ptcl2) pi fuzz) (equal (angle pt ptcl2) (* 1.5 pi) fuzz) (equal (angle pt ptcl2) (* 2.0 pi) fuzz))
  31.      (if (not (ssget (mapcar '/ (mapcar '+ pt ptcl2) '(2.0 2.0 2.0)) '((0 . "LINE"))))
  32.        (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") '(100 . "AcDbLine") (cons 10 pt) (cons 11 ptcl2)))
  33.      )
  34.    )
  35.    (if (or (equal (angle pt ptcl3) 0.0 fuzz) (equal (angle pt ptcl3) (* 0.5 pi) fuzz) (equal (angle pt ptcl3) pi fuzz) (equal (angle pt ptcl3) (* 1.5 pi) fuzz) (equal (angle pt ptcl3) (* 2.0 pi) fuzz))
  36.      (if (not (ssget (mapcar '/ (mapcar '+ pt ptcl3) '(2.0 2.0 2.0)) '((0 . "LINE"))))
  37.        (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") '(100 . "AcDbLine") (cons 10 pt) (cons 11 ptcl3)))
  38.      )
  39.    )
  40.    (if (or (equal (angle pt ptcl4) 0.0 fuzz) (equal (angle pt ptcl4) (* 0.5 pi) fuzz) (equal (angle pt ptcl4) pi fuzz) (equal (angle pt ptcl4) (* 1.5 pi) fuzz) (equal (angle pt ptcl4) (* 2.0 pi) fuzz))
  41.      (if (not (ssget (mapcar '/ (mapcar '+ pt ptcl4) '(2.0 2.0 2.0)) '((0 . "LINE"))))
  42.        (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") '(100 . "AcDbLine") (cons 10 pt) (cons 11 ptcl4)))
  43.      )
  44.    )
  45. )
  46. (*error* nil)
  47. (princ)
  48. )
  49. (prompt "\nInvoke c:fillpointgridwithlines with shortcut c:fpgl ; "Type only" Command: fpgl")
  50. (princ)
M.R。
连接线-MR.dwg
回复

使用道具 举报

13

主题

39

帖子

26

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 08:14:47 | 显示全部楼层
问候语。Marko即使没有移动实体,它也能在我随附的文件中工作,并减轻了我建议的提示。太棒了
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 11:16 , Processed in 0.464610 second(s), 69 queries .

© 2020-2025 乐筑天下

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