明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3469|回复: 14

[讨论] 画门开向线

[复制链接]
发表于 2019-7-12 19:11:59 | 显示全部楼层 |阅读模式
快捷键  rm  画门开向线
(defun c:rm()
(setq v1 (getvar "cmdecho"))
(setq v2 (getvar "blipmode"))
(setq cly (getvar "clayer"))
(setq v4 (getvar "osmode"))
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq p1 (getpoint "\n输入矩形门的一个角点:"))
(setq p3 (getpoint p1 "\n输入矩形门的另一个角点:"))
(setq x1 (car p1))
(setq y1 (cadr p1))
(setq x3 (car p3))
(setq y3 (cadr p3))
(setq p2 (list x3 y1))
(setq p4 (list x1 y3))
(setq x5 (+ x1 (* 0 (- x3 x1))))
(setq y5 (+ y1 (* 0.5 (- y3 y1))))
(setq p5 (list x5 y5))
(setvar "osmode" 0)
(command "pline" p1 p5 p3 "")
(setvar "cmdecho" v1)
(setvar "blipmode" v2)
(setvar "clayer" cly)
(setvar "osmode" v4))


还差一步不知道怎么调整,请教高手帮忙看看


本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-11-25 08:39:25 | 显示全部楼层
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;窗开启方向;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:CBB (/ *error* ang l1 ltype mpt1 os out pt1 pt2 pt3 ptlst)
        (defun *error* ( msg )
                (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
                        (setvar "OSMODE" os)
                )
                (princ)
  )
;;;;;;----------------------------------------------------
        (setq os (getvar "OSMODE"))
        (setvar "OSMODE" 443)
        (initget "X")
        (setq pt1 (getpoint "\n第一点[实线< X >]:"))
        (cond
                ((or (equal pt1 "x") (equal pt1 "X"))
                        (while (setq pt1 (getpoint "\n第一点:"))
                                (setq pt2 (getpoint pt1 "\n第二点[相邻点]:")
                                        pt3 (getcorner pt1 "\n第三点[对角点]:")
                                        L1 (distance pt1 pt2)
                                        ang (angle pt2 pt1)
                                        mpt1 (polar pt3 ang (* 0.5 L1))
                                        ptlst (list pt1 mpt1 pt2)                                       
                                )
                                (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length ptlst))) (mapcar '(lambda (x) (cons 10 x)) ptlst)))
                               
                        )
                )
                (T
                        (while pt1
                                (setq pt2 (getpoint pt1 "\n第二点[相邻点]:")
                                        pt3 (getcorner pt1 "\n第三点[对角点]:")
                                        L1 (distance pt1 pt2)
                                        ang (angle pt2 pt1)
                                        mpt1 (polar pt3 ang (* 0.5 L1))
                                        ptlst (list pt1 mpt1 pt2)
                                        Ltype (vlax-for each (vla-get-Linetypes (vla-get-activedocument (vlax-get-acad-object))) (setq out (cons (vla-get-Name each) out)))
                                )
                                (if (member "DASH" ltype)
                                        (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 6 "DASH") (cons 90 (length ptlst))) (mapcar '(lambda (x) (cons 10 x)) ptlst)))
                                        (progn
                                                (vla-Load (vla-get-Linetypes (vla-get-ActiveDocument (vlax-get-acad-object))) "DASH" (findfile "acad.lin"))
                                                (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 6 "DASH") (cons 90 (length ptlst))) (mapcar '(lambda (x) (cons 10 x)) ptlst)))
                                        )
                                )
                                (setq pt1 (getpoint "\n第一点:"))
                        )
                )
        )
  (setvar "OSMODE" os)
        (princ)
)
发表于 2022-6-7 17:07:04 | 显示全部楼层
本帖最后由 酷酷提 于 2022-6-7 17:08 编辑
小毛草 发表于 2021-11-25 08:39
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;窗开启方向;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:CBB (/ *error* ...

老师,请教一下,这个代码会把对象捕捉全部清空,我在代码上面增加了几个备份的命令,怎么还是会清空呢,而且不能备份
  1. (defun c:CBB()
  2. ;; 下一条指令为 备份对象捕捉设置
  3. (setq old (getvar "OSMODE"))
  4. ;; 下一条指令为 取消和清空对象捕捉
  5.   (setvar "osmode" 0)
  6. (vl-load-com)
  7. (setq cmd (getvar "cmdecho"))
  8. (setq osm (getvar "osmode"))
  9. (setvar "cmdecho" 0)
  10. (setvar "osmode" 0)
  11. (command "_undo" "be")
  12. (while (setq ssa (ssget ":S" '((0 . "LWPOLYLINE"))))
  13. (setq entx (car (ssnamex ssa)))
  14. (setq obj  (vlax-ename->vla-object (cadr entx)))
  15. (setq pae  (vlax-curve-getendparam obj))
  16. (if (or (and (= pae 4.0) (= (vlax-curve-isClosed obj) t))
  17. (and (= pae 4.0) (equal (vlax-curve-getstartpoint obj) (vlax-curve- getendpoint obj))))
  18. (progn
  19. (setq pt   (cadr (last entx)))
  20. (setq pt0  (vlax-curve-getclosestpointto obj pt))
  21. (setq par  (vlax-curve-getparamatpoint obj pt0))
  22. (setq pai  (fix par))
  23. (setq pai-1 (- pai 1.0))
  24. (if (< pai-1 0.0) (setq pai-1 (+ pai-1 pae)))
  25. (setq pai+1 (+ pai 2.0))
  26. (if (> pai+1 pae) (setq pai+1 (- pai+1 pae)))
  27. (setq pmid  (vlax-curve-getpointatparam obj (+ pai 0.5)))
  28. (setq pt1   (vlax-curve-getpointatparam obj pai-1))
  29. (setq pt2   (vlax-curve-getpointatparam obj pai+1))
  30. (command "_pline" pt1 pmid pt2 ""))
  31. (alert "你所选取的不由4点组成的闭合矩形!")))
  32. (command "_undo" "e")
  33. (setvar "osmode" osm)
  34. (setvar "cmdecho" cmd)
  35. ;; 下一条指令为 恢复对象捕捉设置
  36. (setvar "OSMODE" old)
  37. (princ))


 楼主| 发表于 2021-11-24 21:15:41 | 显示全部楼层
Shing 发表于 2021-11-24 21:11
可以,很不错,用了

可以试用这版,有不同体验哦
快捷键  rm  画门开向线
(defun c:rm()
(vl-load-com)
(setq cmd (getvar "cmdecho"))
(setq osm (getvar "osmode"))
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(command "_undo" "be")
(while (setq ssa (ssget ":S" '((0 . "LWPOLYLINE"))))
(setq entx (car (ssnamex ssa)))
(setq obj  (vlax-ename->vla-object (cadr entx)))
(setq pae  (vlax-curve-getendparam obj))
(if (or (and (= pae 4.0) (= (vlax-curve-isClosed obj) t))
(and (= pae 4.0) (equal (vlax-curve-getstartpoint obj) (vlax-curve- getendpoint obj))))
(progn
(setq pt   (cadr (last entx)))
(setq pt0  (vlax-curve-getclosestpointto obj pt))
(setq par  (vlax-curve-getparamatpoint obj pt0))
(setq pai  (fix par))
(setq pai-1 (- pai 1.0))
(if (< pai-1 0.0) (setq pai-1 (+ pai-1 pae)))
(setq pai+1 (+ pai 2.0))
(if (> pai+1 pae) (setq pai+1 (- pai+1 pae)))
(setq pmid  (vlax-curve-getpointatparam obj (+ pai 0.5)))
(setq pt1   (vlax-curve-getpointatparam obj pai-1))
(setq pt2   (vlax-curve-getpointatparam obj pai+1))
(command "_pline" pt1 pmid pt2 ""))
(alert "你所选取的不由4点组成的闭合矩形!")))
(command "_undo" "e")
(setvar "osmode" osm)
(setvar "cmdecho" cmd)
(princ))
发表于 2019-7-12 20:09:56 | 显示全部楼层
(command "pline" p2 p5 p3 "")
是不是这样?
 楼主| 发表于 2019-7-12 20:42:38 | 显示全部楼层
迷失2004 发表于 2019-7-12 20:09
(command "pline" p2 p5 p3 "")
是不是这样?

是的,感谢。
 楼主| 发表于 2019-7-12 20:44:16 | 显示全部楼层
试用OK
快捷键  rm  画门开向线
(defun c:rm()
(setq v1 (getvar "cmdecho"))
(setq v2 (getvar "blipmode"))
(setq cly (getvar "clayer"))
(setq v4 (getvar "osmode"))
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq p1 (getpoint "\n输入矩形门的一个角点:"))
(setq p3 (getpoint p1 "\n输入矩形门的另一个角点:"))
(setq x1 (car p1))
(setq y1 (cadr p1))
(setq x3 (car p3))
(setq y3 (cadr p3))
(setq p2 (list x3 y1))
(setq p4 (list x1 y3))
(setq x5 (+ x1 (* 0 (- x3 x1))))
(setq y5 (+ y1 (* 0.5 (- y3 y1))))
(setq p5 (list x5 y5))
(setvar "osmode" 0)
(command "pline" p2 p5 p3 "")
(setvar "cmdecho" v1)
(setvar "blipmode" v2)
(setvar "clayer" cly)
(setvar "osmode" v4))
发表于 2019-7-16 18:40:02 | 显示全部楼层
动态块,搞这个比较方便,也直观,修改也方便
 楼主| 发表于 2019-7-17 16:18:55 | 显示全部楼层
alexmai 发表于 2019-7-16 18:40
动态块,搞这个比较方便,也直观,修改也方便

好建议,但有时收到别人的图纸,要修改,其实这个也快捷不了多少
发表于 2020-3-23 16:05:39 | 显示全部楼层
KO你 发表于 2019-7-12 20:44
试用OK
快捷键  rm  画门开向线
(defun c:rm()

如果能加个,鼠标控制开启方向,指定图层和线型就更完美了
发表于 2020-3-23 16:06:40 | 显示全部楼层
KO你 发表于 2019-7-12 20:44
试用OK
快捷键  rm  画门开向线
(defun c:rm()

顶顶顶
发表于 2021-11-24 21:11:48 | 显示全部楼层
可以,很不错,用了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-2 13:21 , Processed in 0.208091 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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