明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: KO你

[讨论] 画门开向线

[复制链接]
发表于 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))


发表于 2022-6-7 17:41:33 | 显示全部楼层
应该不会吧,你增加这个(setvar "cmdecho" 0)
(setvar "osmode" 0)是为什么?
发表于 2022-6-7 17:48:55 | 显示全部楼层
本帖最后由 酷酷提 于 2022-6-7 17:52 编辑
小毛草 发表于 2022-6-7 17:41
应该不会吧,你增加这个(setvar "cmdecho" 0)
(setvar "osmode" 0)是为什么?

就是清空对象捕捉,但是好像和下面重复了,取消了也不行,还是不能备份和恢复
发表于 2022-6-9 08:27:46 | 显示全部楼层
适用度貌似不是太广----
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 06:51 , Processed in 0.224582 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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