如何用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 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)
) (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-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)
组码 70 当为 1或128 时 就是封闭的 多一个重复点并不是一个好办法 飞雪神光 发表于 2023-8-27 13:37
组码 70 当为 1或128 时 就是封闭的 多一个重复点并不是一个好办法
加了70组码好像也不行 薰衣草-花语 发表于 2023-8-27 15:33
(defun mkpline-X(pts clC / a)
(entmakex (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") ...
这里面的cl是什么意思 rectang命令多简单 飞雪神光 发表于 2023-8-27 13:37
组码 70 当为 1或128 时 就是封闭的 多一个重复点并不是一个好办法
搞定了,谢谢 薰衣草-花语 发表于 2023-8-27 15:33
(defun mkpline-X(pts clC / a)
(entmakex (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") ...
搞定了,谢谢 包哥 发表于 2023-8-27 16:02
加了70组码好像也不行
打错字了 0或1281或129
页:
[1]
2