明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1332|回复: 13

[提问] 求快速画开启线

[复制链接]
发表于 2021-3-16 11:46 | 显示全部楼层 |阅读模式
20明经币
点取封闭区域,一般都是矩形,快速画开启线到指定图层,2个选项,上悬窗和下悬窗,并有记忆功能,比如上次选的是上悬窗,之后命令就默认为上悬;如图:
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

漏了子函数 (defun c:tt5 (/ ent key ptlst px) (setq key (getstring "开口方向?[上开(S)/下开(X)]:")) ( while (setq px (getpoint "\n选点:")) (command "BOUNDARY" px "") (setq ent (entlast) ptlst (Dptlst ent) ) (entdel ent) (if (= key "s") (command "PLINE" "non" (car ptlst) "non" (mid_pt (caddr ptlst) (cadddr ptlst)) "non" (cadr ptlst) "" "change" "l" "" "p" "la" "开启" "") ( ...
发表于 2021-3-16 11:46 | 显示全部楼层
漏了子函数

(defun c:tt5 (/ ent key ptlst px)
        (setq key (getstring  "开口方向?[上开(S)/下开(X)]:"))       
        ( while        (setq px (getpoint "\n选点:"))
                (command "BOUNDARY" px "")
                (setq ent (entlast) ptlst (Dptlst ent) )
                (entdel ent)       
                (if (= key "s") (command "PLINE" "non" (car ptlst) "non" (mid_pt (caddr ptlst) (cadddr ptlst)) "non" (cadr ptlst) "" "change" "l" "" "p" "la" "开启" "")
                        (command "PLINE" "non" (caddr ptlst) "non" (mid_pt (car ptlst) (cadr ptlst)) "non" (cadddr ptlst) "" "change" "l" "" "p" "la" "开启" "")
                )       
        )
        (princ)       
)

(defun mid_pt (p1 p2)
(mapcar'*(mapcar'+ p1 p2)'(0.5 0.5 0.5))
)
(defun Dptlst (enn / ent lst)
        (setq ent (entget enn))
        (setq lst (list))
        (foreach x ent (if (= (car x) 10) (setq lst (cons (cdr x) lst))))
        lst
)
回复

使用道具 举报

发表于 2021-3-16 13:00 | 显示全部楼层
(defun c:tt5 (/ ent key ptlst px)
        (setq key (getstring  "开口方向?[上开(S)/下开(X)]:"))       
        ( while        (setq px (getpoint "\n选点:"))
                (command "BOUNDARY" px "")
                (setq ent (entlast) ptlst (Dptlst ent) )
                (entdel ent)       
                (if (= key "s") (command "PLINE" "non" (car ptlst) "non" (mid_pt (caddr ptlst) (cadddr ptlst)) "non" (cadr ptlst) "" "change" "l" "" "p" "la" "开启" "")
                        (command "PLINE" "non" (caddr ptlst) "non" (mid_pt (car ptlst) (cadr ptlst)) "non" (cadddr ptlst) "" "change" "l" "" "p" "la" "开启" "")
                )       
        )
        (princ)       
)
回复

使用道具 举报

 楼主| 发表于 2021-3-16 13:07 | 显示全部楼层
start4444 发表于 2021-3-16 13:00
(defun c:tt5 (/ ent key ptlst px)
        (setq key (getstring  "开口方向?[上开(S)/下开(X)]:"))       
        ( whil ...

多谢大师,但是用不了,出现以下提示:
错误: *error* 函数中出错参数类型错误: lentityp nil
回复

使用道具 举报

 楼主| 发表于 2021-3-16 14:28 | 显示全部楼层
start4444 发表于 2021-3-16 14:07
漏了子函数

(defun c:tt5 (/ ent key ptlst px)

这次加载了,没任何反应
麻烦再帮我看下!

点评

我这里没问题,图层要有"开启"这个图层  发表于 2021-3-16 14:33
回复

使用道具 举报

 楼主| 发表于 2021-3-16 18:20 | 显示全部楼层
start4444 发表于 2021-3-16 14:07
漏了子函数

(defun c:tt5 (/ ent key ptlst px)

恩,可以拉,谢谢!
首次命令默认是下开的,能否调成默认是上开!

点评

(if (= key "s") 改为 (if (= key "x")  发表于 2021-3-16 23:06
回复

使用道具 举报

发表于 2021-3-17 08:38 | 显示全部楼层
start4444 发表于 2021-3-16 14:07
漏了子函数

(defun c:tt5 (/ ent key ptlst px)

厉害了!
如果所选区域不闭合,能否提示呢?
另外,如果作图不规范,像下图这样怎么处理?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

论坛找一个简化多段线顶点的码处理一下  发表于 2021-3-17 09:40
回复

使用道具 举报

发表于 2021-3-17 10:37 | 显示全部楼层
本帖最后由 gaics 于 2021-3-17 10:40 编辑
gaics 发表于 2021-3-17 08:38
厉害了!
如果所选区域不闭合,能否提示呢?
另外,如果作图不规范,像下图这样怎么处理?

正如楼主所说,开启窗一般都是矩形,所以我用vla-getboundingbox函数解决了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 2021-3-17 11:50 | 显示全部楼层
cjjh8301 发表于 2021-3-16 18:20
恩,可以拉,谢谢!
首次命令默认是下开的,能否调成默认是上开!

回复

使用道具 举报

发表于 2021-10-24 14:55 | 显示全部楼层

(defun c:tt ()
        (setq orth (getvar "orthomode"))
        (setq pta (getpoint "\n门洞位置"))
        (COMMAND "-BOUNDARY" pta "")
        (setvar "orthomode" 1)
        (setq ent (entlast))       
        (setq ss (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget ent))))
        (if (= (length ss) 4)
                (progn
                        (vl-load-com)       
                        (vla-getboundingbox (vlax-ename->vla-object ent) 'minpoint 'maxpoint)
                        (setq pmax (vlax-safearray->list maxpoint)
                                pmin (vlax-safearray->list minpoint))
                        (setq pt2 (list (car pmax) (cadr pmin)))
                        (setq pt4 (list (car pmin) (cadr pmax)))                               
                )
               
        )
        (COMMAND "_.erase"  ENT "")
        (setq ptb (getpoint pta "\n开启方向"))
        (setq fx (angle pta ptb))
        (if (= fx 0)
        (progn
        (setq ptc (Mc:Md pmin pt4))
        (entmake (list
                                         '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 2)'(70 . 0) (cons 10 pmax) (cons 10 ptc) (cons 10 pt2)))       
        )
                        (progn
        (setq ptc         (Mc:Md pmax pt2))
        (entmake (list
                                         '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 2)'(70 . 0) (cons 10 pmin) (cons 10 ptc) (cons 10 pt4)))                               
        )       
        )
       
        (xjtc);检查图层名称
        (c:jzxx);检查线形名称
        (command "CHPROP" (last_ent ent) "" "la"  "W-虚线" "lt" "DASH" "C" "136"  "s" "1" "")
        (setvar "orthomode" orth)
        (princ)       
       
       
)

(defun Mc:Md (pt1 pt2 / ptn)
(setq jl (distance pt1 pt2))
        (setq fx (angle pt1 pt2))
        (setq ptn (polar pt1 fx (/ jl 2)))
)
这个看下   其他的地方帮来的  也是明经上
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 00:14 , Processed in 0.215177 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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