明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 944|回复: 8

[提问] 除了COMMAND命令有没有更快批量生成直线的命令

[复制链接]
发表于 2024-3-11 11:09:08 | 显示全部楼层 |阅读模式
15明经币
大家好!
   我的日常工作中用到的生成直线(非多段线)命令较多,之前一直用command创建直线,后面了解到entmake创建直线,但只有起点和终点,我有个疑问,就是有没有什么好方法比command创建直线速度更快,或者entmake能不能一下创建多条直线,或者有其他的办法优化创建直线的命令
  • (command "line" pt1 p1 p2 p3 p4 p5 p6 p7 p8 p9 "c")

最佳答案

查看完整内容

;; [函数名称]:MK-line ;; [功 能]:列表数据绘制直线 ;; [参 数]: 点列表 ;; [示 意]: (MK-line LST) (defun MK-line (S / m-line) (defun M-line (p1 p2) (entmakex (list '(0 . "line") (cons 10 p1) (cons 11 p2))) ) (mapcar (function (lambda(p1 p2) (M-line p1 p2) ) ) S (cdr s) ) (M-line (car s) (last s)) ) ;测试例子1 (defun C:NM (/ lst) (setq ...
发表于 2024-3-11 11:09:09 | 显示全部楼层
本帖最后由 xj6019 于 2024-3-11 11:29 编辑


;; [函数名称]:MK-line
;; [功    能]:列表数据绘制直线
;; [参    数]: 点列表
;; [示    意]: (MK-line LST)
(defun MK-line (S / m-line)
        (defun M-line (p1 p2)
                (entmakex (list '(0 . "line") (cons 10 p1) (cons 11 p2)))       
        )
        (mapcar
                (function
                        (lambda(p1 p2)
                                (M-line p1 p2)                       
                        )
                )
                S (cdr s)       
        )
        (M-line (car s) (last s))
)

;测试例子1
(defun C:NM (/ lst)
        (setq lst nil)
        (repeat 5
                (setq lst(cons(getpoint)lst)) ;组建点列表
        )
        (MK-line lst);列表绘制直线
        (princ)
)
;测试例子2
;(MK-line (list pt1 p1 p2 p3 p4 p5 p6 p7 p8 p9))
回复

使用道具 举报

发表于 2024-3-11 11:48:40 | 显示全部楼层
  1. ;;;lst 点表ucs
  2. ;;; oi闭合否
  3. (defun tt  (lst oi)
  4.     (if        oi
  5.         (setq lst (reverse (cons (car lst) (reverse lst)))))
  6.     (mapcar
  7.         '(lambda (x y)
  8.              (entmakex (list (cons 0 "line")
  9.                              (cons 10 (trans x 1 0))
  10.                              (cons 11 (trans y 1 0)))))
  11.         lst
  12.         (cdr lst)))
  13. ;;;test
  14. (defun c:test (/ lst1 lst2 pt1)
  15.     (setvar "pdmode" 35)
  16.     (setq pt1 (getpoint "\nget point:"))
  17.     (setq lst1 (list (entmakex (list (cons 0 "point")
  18.                                      (cons 10 (trans pt1 1 0)))))
  19.           lst2 (cons pt1 lst2))
  20.     (while (setq pt1 (getpoint pt1 "\nget next point:"))
  21.         (setq lst1
  22.                    (cons
  23.                        (entmakex (list (cons 0 "point")
  24.                                        (cons 10 (trans pt1 1 0))))
  25.                        lst1)
  26.               lst2 (cons pt1 lst2)))
  27.     (tt (reverse lst2) nil)
  28.     (foreach n lst1 (entdel n))
  29.     (setvar "pdmode" 0))
回复

使用道具 举报

发表于 2024-3-11 11:51:28 | 显示全部楼层
command可以这样:
(command "line")(mapcar (function (lambda (x) (command x))) (list pt1 p1 p2 p3 p4 p5 p6 p7 p8 p9))(command "c")
回复

使用道具 举报

发表于 2024-3-11 14:52:02 | 显示全部楼层
(setq a1 (car lst)) ;;;取出第一个点
(while (and (car lst)(cadr lst))
  (entmake (list '(0. "line") (cons 10 (car lst))(cons 11 (cadr lst)))
  (setq lst (cdr lst))
)
;;;;
(if c (entmake (list '(0. "line") (cons 10 (car lst))(cons 11 a1))) ;;;假如需要闭合
回复

使用道具 举报

发表于 2024-3-11 20:33:35 | 显示全部楼层
(defun c:tt (/ pt0 pt1 pt2 tst n)
  (setvar "cmdecho" 0)
  (setq tst t
    pt1 (getpoint "\n指定第一个点:")
    pt0 pt1
    n 0
  )
  (while (and
       pt1
       tst
     )
    (initget "C")
    (if (> n 1)
      (setq pt2 (getpoint pt1 "\n指定下一点或 [闭合(C)/放弃(U)]:"))
      (setq pt2 (getpoint pt1 "\n指定下一点或 [放弃(U)]:"))
    )
    (cond
      ((or
     (= pt2 "C")
     (= pt2 "c")
       )
    (if (> n 1)
      (entmake (list '(0 . "LINE") (cons 10 (trans pt1 1 0)) (cons 11 (trans pt0 1 0))))
    )
    (setq pt2 nil)
      )
    )
    (if pt2
      (progn
    (entmake (list '(0 . "LINE") (cons 10 (trans pt1 1 0)) (cons 11 (trans pt2 1 0))))
    (setq pt1 pt2)
      )
      (setq tst nil)
    )
    (setq n (1+ n))
  )
  (setvar "cmdecho" 1)
  (princ)
)


回复

使用道具 举报

发表于 2024-3-11 21:38:09 | 显示全部楼层
搞一大堆,还不如command
回复

使用道具 举报

发表于 2024-3-12 00:01:38 | 显示全部楼层
(defun MK-line (ptn / m-line)
  (defun M-line (a b) (entmakex (list '(0 . "line") (cons 10 a) (cons 11 b))))
  (mapcar 'M-line (cons (last ptn) ptn) ptn)
)

点评

好评  发表于 2024-3-17 17:00
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 22:43 , Processed in 0.246457 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表