包哥 发表于 2023-8-27 11:52:32

如何用entmake画矩形或封闭多段线?

;调用方法举例
(defun C:HHH ()
   (setq pt1 (list 0 0))
   (setq pt2 (list 100 100))
   (YY004 pt1 pt2)
)

;004函数功能:已知两对角点(方位无所谓,只要是对角点就行)画矩形
(defun YY004 (004pt1 004pt2 / 004ptlist 004zxjd 004zsjd 004ysjd 004yxjd)   
(setvar "osmode" 0)   
;-------以下为内嵌函数--------
;003函数功能:通过点表画多段线
;参数:点表
(defun YY003 (003ptlst)
    (entmake
      (append   
      (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length 003ptlst)))
      (mapcar '(lambda (pt) (cons 10 pt)) 003ptlst)
      )
    )
)
;-------以下为内嵌函数--------
(setq 004zxjd (list (min (car 004pt1) (car 004pt2)) (min (cadr 004pt1) (cadr 004pt2))))    ;左下角点
(setq 004zsjd (list (min (car 004pt1) (car 004pt2)) (max (cadr 004pt1) (cadr 004pt2))))    ;左上角点
(setq 004ysjd (list (max (car 004pt1) (car 004pt2)) (max (cadr 004pt1) (cadr 004pt2))))    ;右上角点
(setq 004yxjd (list (max (car 004pt1) (car 004pt2)) (min (cadr 004pt1) (cadr 004pt2))))    ;右下角点
(setq 004ptlist (LIST 004zxjd 004zsjd 004ysjd 004yxjd 004zxjd))    ;必须放五个点才能封闭,四个点不行

;(command "rectang" 004pt1 004pt2)            ;COMMAND不要用,影响效率
(YY003 004ptlist)                           ;调用内嵌函数画矩形(为了让其看似封闭但实际并不封闭,该矩形共有5个节点)
(princ)
)


包哥 发表于 2023-8-27 16:01:17

飞雪神光 发表于 2023-8-27 13:37
组码 70 当为 1或128 时 就是封闭的 多一个重复点并不是一个好办法

;调用方法举例
(defun C:HHH ()
   (setq pt1 (list 0 0))
   (setq pt2 (list 100 100))
   (YY004 pt1 pt2)
)

;004函数功能:已知两对角点(方位无所谓,只要是对角点就行)画矩形
(defun YY004 (004pt1 004pt2 / 004ptlist 004zxjd 004zsjd 004ysjd 004yxjd)   
(setvar "osmode" 0)   
;-------以下为内嵌函数--------
;003函数功能:通过点表画多段线
;参数:点表
(defun YY003 (003ptlst)
    (entmake
      (append   
      (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline")(cons 70 128)(cons 90 (length 003ptlst)))
      (mapcar '(lambda (pt) (cons 10 pt)) 003ptlst)
      )
    )
)
;-------以下为内嵌函数--------
(setq 004zxjd (list (min (car 004pt1) (car 004pt2)) (min (cadr 004pt1) (cadr 004pt2))))    ;左下角点
(setq 004zsjd (list (min (car 004pt1) (car 004pt2)) (max (cadr 004pt1) (cadr 004pt2))))    ;左上角点
(setq 004ysjd (list (max (car 004pt1) (car 004pt2)) (max (cadr 004pt1) (cadr 004pt2))))    ;右上角点
(setq 004yxjd (list (max (car 004pt1) (car 004pt2)) (min (cadr 004pt1) (cadr 004pt2))))    ;右下角点
(setq 004ptlist (LIST 004zxjd 004zsjd 004ysjd 004yxjd))    ;一定按照顺时针或逆时针方向存放,四个点即可,因为(cons 70 128)表示绘制封闭多段线

;(command "rectang" 004pt1 004pt2)            ;COMMAND不要用,影响效率
(YY003 004ptlist)                           ;调用内嵌函数画矩形
(princ)
)

薰衣草-花语 发表于 2023-8-27 15:33:48

(defun mkpline-X(pts clC / a)
(entmakex (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline")
                          (cons 8 "辅助2")(cons 90 (length pts)) (cons 62 10)
                          (if(= cl 1)(cons 70 129) (cons 70 128) ))
                  (mapcar '(lambda (a) (cons 10 a)) pts)
                  (LIST(list -3 (list "SOUTH"(cons 1000 C)) ) ) ) ))

sfzyr 发表于 2023-10-13 20:00:28

本帖最后由 sfzyr 于 2023-10-14 02:51 编辑

我的怎么都是三条边,加128 ,129 都不行

找了半天,才发现,90码,必须在70码之前,否则无法封闭,无论(70 . 1)还是(70 . 0)
结果都是(70 . 0)即无法封闭。这两个DXF码顺序必须是

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif      '(90 . 4)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif      '(70 . 1)

飞雪神光 发表于 2023-8-27 13:37:40

组码 70 当为 1或128 时 就是封闭的 多一个重复点并不是一个好办法

包哥 发表于 2023-8-27 16:02:35

飞雪神光 发表于 2023-8-27 13:37
组码 70 当为 1或128 时 就是封闭的 多一个重复点并不是一个好办法

加了70组码好像也不行

包哥 发表于 2023-8-27 16:04:29

薰衣草-花语 发表于 2023-8-27 15:33
(defun mkpline-X(pts clC / a)
(entmakex (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") ...

这里面的cl是什么意思

xyp1964 发表于 2023-8-27 16:33:37

rectang命令多简单

包哥 发表于 2023-8-27 16:51:44

飞雪神光 发表于 2023-8-27 13:37
组码 70 当为 1或128 时 就是封闭的 多一个重复点并不是一个好办法

搞定了,谢谢

包哥 发表于 2023-8-27 16:52:54

薰衣草-花语 发表于 2023-8-27 15:33
(defun mkpline-X(pts clC / a)
(entmakex (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") ...

搞定了,谢谢

飞雪神光 发表于 2023-8-27 20:55:25

包哥 发表于 2023-8-27 16:02
加了70组码好像也不行

打错字了 0或1281或129
页: [1] 2
查看完整版本: 如何用entmake画矩形或封闭多段线?