明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2545|回复: 15

[经验] 折断线lisp,加载有些情况生成不了。高手帮解决一下呗

[复制链接]
发表于 2018-9-28 14:46:00 | 显示全部楼层 |阅读模式
(defun c:zdx(/ ang p0 p1 p2 p3 p4 p5 p6 sc)
        (setq sc (getint "\n请输入出图比例<100>:"))
        (if (not sc) (setq sc 100))
        (setq p0 (getpoint "1"))
        (setq p1 (getpoint p0 "2"))
        (setq ang (angle p0 p1))
        (setq p2 (polar p0 ang (/ (distance p0 p1) 2)))
        (setq p3 (polar p2 (+ ang (* pi 0.56)) (* 2.25 sc)))
        (setq p4 (polar p2 (+ ang (* pi 1.56)) (* 2.25 sc)))
        (setq p5 (polar p2 (+ ang pi) (* 1.25 sc)))
        (setq p6 (polar p2 ang (* 1.25 sc)))
        (if (< (distance p0 p1) (* 7.0 sc))
                (progn
                        (setq p0 (polar p5 (+ ang pi) (* 2.25 sc)))
                        (setq p1 (polar p6 ang (* 2.25 sc)))
                )
                (progn
                        (setq p0 (polar p0 (+ ang pi) (* 2.25 sc)))
                        (setq p1 (polar p1 ang (* 2.25 sc)))
                )
        )
        (点表多段线 (list p0 p5 p3 p4 p6 p1) 0 3)
        (princ)
)

;;点表生成多段线
(defun 点表多段线(点表 线宽 颜色)
  (entmake (append (list '(0 . "LWPOLYLINE")
                         '(100 . "AcDbEntity")
                         '(100 . "AcDbPolyline")
                         (cons 90 (length 点表))
                         (cons 43 线宽)
                         (cons 62 颜色)
                        )
                        (mapcar '(lambda (pt)
                                        (cons 10 pt)
                                )
                                点表
                        )
                )
        )
)

发表于 2018-9-28 15:06:19 | 显示全部楼层
第一次看到有这么多中文变量的程序,来试一下我的吧,一次画2条

  1. (defun c:qx  (/ qxscale pts pte dis ang sc ptl  ptu ptc  ptr ptd  ptlist
  2.          ptlist2)
  3.   (if (= (getenv "qxscale") nil)(setenv "qxscale" "50"))
  4.   (mapcar 'princ (list "当前比例: " (getenv "qxscale")))
  5.   (initget "s")
  6.   (setq pts (getpoint "\n起点[比例设置(S)]:"))
  7.   (while (= pts "s")
  8.     (setq qxscale (getreal "\n切断线比例:"))
  9.     (setenv "qxscale" (rtos qxscale 2 2))
  10.     (setq pts (getpoint "\n起点:"))
  11.     )
  12.   (setq pts (trans pts 1 0))
  13.   (setq pte (getpoint pts "\n终点:"))
  14.   (setq pte (trans pte 1 0))
  15.   (setq dis (distance pts pte))
  16.   (setq ang (angle ptS ptE))
  17.   (setq sc (atof (getenv "qxscale")))
  18.   (setq ctp (mapcar '/ (mapcar '+ pts pte) '(2 2 2)))
  19.   (setq ptl (polar ctp (+ pi ang) (* 4 sc)))
  20. ;;;;左点
  21.   (setq ptu (polar ctp (+ ang (angtof "108")) (* 4 sc)))
  22. ;;;;上点
  23.   (setq ptd (polar ctp (+ ang (angtof "288")) (* 4 sc)))
  24. ;;;;下点
  25.   (setq ptr (polar ctp (+ 0 ang) (* 4 sc)))
  26. ;;;;右点
  27.   (setq ptlist (list pts ptl ptu ctp ptd ptr pte))
  28. ;;; (undobe)
  29.   (entmake
  30.     (append (list '(0 . "LWPOLYLINE")
  31.       '(100 . "AcDbEntity")
  32.       '(100 . "AcDbPolyline")
  33.       (cons 90 (length ptlist)))
  34.       (mapcar '(lambda (pt) (cons 10 pt)) ptlist)))
  35.   (setq  ptlist2
  36.    (mapcar
  37.      '(lambda (x) (polar x (+ ang (angtof "262")) (* 3 sc)))
  38.      ptlist))
  39.   (entmake
  40.     (append (list '(0 . "LWPOLYLINE")
  41.       '(100 . "AcDbEntity")
  42.       '(100 . "AcDbPolyline")
  43.       (cons 90 (length ptlist2)))
  44.       (mapcar '(lambda (pt) (cons 10 pt)) ptlist2)))
  45. ;;; (undoe)
  46.   (prin1)
  47.   )

回复 支持 2 反对 0

使用道具 举报

发表于 2018-9-28 18:04:37 | 显示全部楼层
(defun c:zdx(/ ang p0 p1 p2 p3 p4 p5 p6 sc)
        (setq sc (getint "\n请输入出图比例<100>:"))
        (if (not sc) (setq sc 100))
        (setq p0 (getpoint "\n请选择第一点:"))
        (setq p1 (getpoint p0 "\n请选择第二点:"))
        (setq ang (angle p0 p1))
        (setq p2 (polar p0 ang (/ (distance p0 p1) 2)))
        (setq p3 (polar p2 (+ ang (* pi 0.56)) (* 2.25 sc)))
        (setq p4 (polar p2 (+ ang (* pi 1.56)) (* 2.25 sc)))
        (setq p5 (polar p2 (+ ang pi) (* 1.25 sc)))
        (setq p6 (polar p2 ang (* 1.25 sc)))
        (if (< (distance p0 p1) (* 7.0 sc))
                (progn
                        (setq p0 (polar p5 (+ ang pi) (* 2.25 sc)))
                        (setq p1 (polar p6 ang (* 2.25 sc)))
                )
                (progn
                        (setq p0 (polar p0 (+ ang pi) (* 2.25 sc)))
                        (setq p1 (polar p1 ang (* 2.25 sc)))
                )
        )
        (setq os (getvar "osmode"))
  (setvar "osmode" 0)
        (command "PLINE" p0 p5 p3 p4 p6 p1"")
        (setvar "osmode" os)
  (princ)
)


是不是自定义函数搞错了,直接改成command吧
回复 支持 1 反对 0

使用道具 举报

发表于 2024-5-2 16:44:46 | 显示全部楼层
  1. (defun c:zdx(/ ang p0 p1 p2 p3 p4 p5 p6 sc)
  2.         ;(setq sc (getint "\n请输入出图比例<100>:"))
  3.         ;(if (not sc) (setq sc 100))
  4.         (setq p0 (getpoint "\n请选择第一点:"))
  5.         (setq p1 (getpoint p0 "\n请选择第二点:"))
  6.         (setq sc (/ (distance p0 p1) 27))
  7.         (setq ang (angle p0 p1))
  8.         (setq p2 (polar p0 ang (/ (distance p0 p1) 2)))
  9.         (setq p3 (polar p2 (+ ang (* pi 0.56)) (* 2.25 sc)))
  10.         (setq p4 (polar p2 (+ ang (* pi 1.56)) (* 2.25 sc)))
  11.         (setq p5 (polar p2 (+ ang pi) (* 1.25 sc)))
  12.         (setq p6 (polar p2 ang (* 1.25 sc)))
  13.         (if (< (distance p0 p1) (* 7.0 sc))
  14.                 (progn
  15.                         (setq p0 (polar p5 (+ ang pi) (* 2.25 sc)))
  16.                         (setq p1 (polar p6 ang (* 2.25 sc)))
  17.                 )
  18.                 (progn
  19.                         (setq p0 (polar p0 (+ ang pi) (* 2.25 sc)))
  20.                         (setq p1 (polar p1 ang (* 2.25 sc)))
  21.                 )
  22.         )
  23.         (setq os (getvar "osmode"))
  24.   (setvar "osmode" 0)
  25.         (command "PLINE" p0 p5 p3 p4 p6 p1"")
  26.         (setvar "osmode" os)
  27.   (princ)
  28. )

按照选择两点的距离除一个系数得出折断线的比例,适合自己用,再次感谢楼主的分享
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-9-28 15:07:57 | 显示全部楼层
拾取了交点,但是发现剖断线在其他位置生成了,没有在我拾取得两个交点之间生成。这是为什么?
 楼主| 发表于 2018-9-28 15:12:17 | 显示全部楼层
菜卷鱼 发表于 2018-9-28 15:06
第一次看到有这么多中文变量的程序,来试一下我的吧,一次画2条

谢谢,我试试去。
发表于 2018-9-28 15:15:00 | 显示全部楼层

(setq pts (trans pts 1 0))  
也许是你差这一句
 楼主| 发表于 2018-9-28 15:16:22 | 显示全部楼层
菜卷鱼 发表于 2018-9-28 15:06
第一次看到有这么多中文变量的程序,来试一下我的吧,一次画2条

有没有,单线的,我一条的折断线用的较多
 楼主| 发表于 2018-9-28 15:20:12 | 显示全部楼层
菜卷鱼 发表于 2018-9-28 15:06
第一次看到有这么多中文变量的程序,来试一下我的吧,一次画2条

还有一个问题,生成的双线条折断线两边为啥是光秃秃的,没有伸出来一点
发表于 2018-9-28 15:23:09 | 显示全部楼层
zb1374498780 发表于 2018-9-28 15:20
还有一个问题,生成的双线条折断线两边为啥是光秃秃的,没有伸出来一点

删掉 ptlist2 的就可以啦
发表于 2018-9-28 15:28:22 | 显示全部楼层
zb1374498780 发表于 2018-9-28 15:20
还有一个问题,生成的双线条折断线两边为啥是光秃秃的,没有伸出来一点

设置比例试一试??
发表于 2018-9-28 16:58:22 | 显示全部楼层
谢谢! 两位分享学习!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 17:27 , Processed in 0.193973 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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