明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2496|回复: 11

[讨论] 如何用entmake画矩形或封闭多段线?

[复制链接]
发表于 2023-8-27 11:52:32 | 显示全部楼层 |阅读模式
;调用方法举例
(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 时 就是封闭的 多一个重复点并不是一个好办法
  1. ;调用方法举例
  2. (defun C:HHH ()
  3.    (setq pt1 (list 0 0))
  4.    (setq pt2 (list 100 100))
  5.    (YY004 pt1 pt2)
  6. )

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

  27.   ;(command "rectang" 004pt1 004pt2)            ;COMMAND不要用,影响效率
  28.   (YY003 004ptlist)                             ;调用内嵌函数画矩形
  29.   (princ)
  30. )
发表于 2023-8-27 15:33:48 | 显示全部楼层
(defun mkpline-X(pts cl  C / 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)) ) ) ) ))
发表于 2023-10-13 20:00:28 | 显示全部楼层
本帖最后由 sfzyr 于 2023-10-14 02:51 编辑

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

找了半天,才发现,90码,必须在70码之前,否则无法封闭,无论(70 . 1)还是(70 . 0)
结果都是(70 . 0)即无法封闭。这两个DXF码顺序必须是
  •         '(90 . 4)
  •         '(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 cl  C / a)
  (entmakex (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") ...

这里面的cl是什么意思
发表于 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 cl  C / a)
  (entmakex (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") ...

搞定了,谢谢
发表于 2023-8-27 20:55:25 | 显示全部楼层
包哥 发表于 2023-8-27 16:02
加了70组码好像也不行

打错字了 0或128  1或129
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 16:41 , Processed in 0.208245 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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