明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 780|回复: 21

[提问] 如何在直线两段生成小点点

[复制链接]
发表于 2022-8-5 10:49 | 显示全部楼层 |阅读模式
15明经币
问题如图所示,求大佬告知!!!


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

最佳答案

查看完整内容

重新复制了一遍代码,顺便了解了怎么添加代码区域,哈哈
发表于 2022-8-5 10:49 | 显示全部楼层
本帖最后由 mituzhe 于 2022-8-9 14:47 编辑


重新复制了一遍代码,顺便了解了怎么添加代码区域,哈哈

  1. ;-------------------------------------------------------------------------------------------------
  2. ;直线端点标记
  3. (defun c:tt1 (/ ang line_ctrl_pts lyr pt1 pt2 ss_line)
  4.   (setq ss_line (ssget '((0 . "LWPOLYLINE,LINE"))))
  5.   (foreach ent (xyp-Ss2List ss_line)
  6.     (setq line_ctrl_pts (gd-getCtrlPt ent)
  7.           lyr           (vla-get-layer (vlax-ename->vla-object ent))
  8.     )
  9.     (if (wcmatch (cdr (assoc 0 (entget ent))) "*POLYLINE")
  10.       (progn
  11.         ; (setq line_ctrl_pts (mapcar '(lambda (pt) (append pt '(0.0)))
  12.         ;                             line_ctrl_pts
  13.         ;                     )
  14.         ; )
  15.         (setq line_ctrl_pts (mapcar 'list line_ctrl_pts (cdr line_ctrl_pts)))
  16.       )
  17.     )
  18.     (foreach pts line_ctrl_pts
  19.       (setq pt1 (nth 0 pts)
  20.             pt2 (nth 1 pts)
  21.             ang (angle pt1 pt2)
  22.       )
  23.       (entmake
  24.         (mapcar 'cons '(0 8 62 10 11) (list "LINE" lyr 2 pt1 (polar pt1 ang 1)))
  25.       )
  26.       (entmake
  27.         (mapcar 'cons
  28.                 '(0 8 62 10 11)
  29.                 (list "LINE" lyr 2 pt2 (polar pt2 (+ ang PI) 1))
  30.         )
  31.       )
  32.     )

  33.     (entdel ent)
  34.   )
  35.   (princ)
  36. )

  37. (defun xyp-Ss2List (ss / i s1 lst)
  38.   (and ss
  39.        (setq i -1)
  40.        (while (setq s1 (ssname ss (setq i (1+ i))))
  41.          (setq lst (cons s1 lst))
  42.        )
  43.   )
  44.   lst
  45. )
  46. (defun gd-getCtrlPt (ent / ctrlPt_lst)
  47.   ; (setq ctrlPt_lst nil)

  48.   (setq ctrlPt_lst (append
  49.                      (vl-remove-if-not
  50.                        '(lambda (x) (or (= 11 (car x)) (= 10 (car x))))
  51.                        (entget ent)
  52.                      )
  53.                      ctrlPt_lst
  54.                    )
  55.   )
  56.   ; (print ctrlPt_lst)

  57.   (mapcar 'cdr ctrlPt_lst)
  58. )


本帖子中包含更多资源

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

x

点评

惶恐惶恐,其实 llsheng_73 大佬的更简洁。我掌握的函数少一点,显的有些啰嗦了。  发表于 2022-8-5 17:28

评分

参与人数 1明经币 +1 收起 理由
xj6019 + 1 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2022-8-5 11:23 | 显示全部楼层
点是没有方向的,你要的小点点是不是一个长度为1mm的多段线或者块参照,起点是直线的端点,止点指向另一端?
回复

使用道具 举报

发表于 2022-8-5 13:48 | 显示全部楼层
你这个 先求端点坐标   然后 polar   求另一点  然后画直线  改为黄色   计算两次即可  
回复

使用道具 举报

 楼主| 发表于 2022-8-5 13:54 | 显示全部楼层
本帖最后由 世人皆醉 于 2022-8-5 14:01 编辑
llsheng_73 发表于 2022-8-5 11:23
点是没有方向的,你要的小点点是不是一个长度为1mm的多段线或者块参照,起点是直线的端点,止点指向另一端 ...

就是个一毫米的线,对的,就是起点是直线的端点,指点是指向另一端

回复

使用道具 举报

发表于 2022-8-5 15:05 | 显示全部楼层
你这是要弄打标线吗?两个端部不需要先往内部缩进个0.5后 再画1mm的线吗?
回复

使用道具 举报

发表于 2022-8-5 15:07 | 显示全部楼层
本帖最后由 mituzhe 于 2022-8-5 16:34 编辑

;-------------------------------------------------------------------------------------------------
;直线端点标记
(defun c:tt1 (/ ang line_ctrl_pts pt1 pt2 ss_line)
  (setq ss_line (ssget  '((0 . "*LINE"))))
  (foreach ent (xyp-Ss2List ss_line)
    (setq line_ctrl_pts (gd-getCtrlPt ent)
          pt1           (nth 0 line_ctrl_pts)
          pt2           (nth 1 line_ctrl_pts)
          ang           (angle pt1 pt2)
    )
    (entmake
      (list (cons 0 "LINE")
            (cons 62 2)
            (cons 10 pt1)
            (cons 11 (polar pt1 ang 1))
      )
    )
    (entmake
      (list (cons 0 "LINE") (cons 62 2) (cons 10 pt2) (cons 11 (polar pt2 (+ ang PI) 1)))
    )
    (entdel ent)
  )
  (princ)
)

(defun xyp-Ss2List (ss / i s1 lst)
  (and ss
       (setq i -1)
       (while (setq s1 (ssname ss (setq i (1+ i))))
         (setq lst (cons s1 lst))
       )
  )
  lst
)
(defun gd-getCtrlPt (ent / ctrlPt_lst)
  ; (setq ctrlPt_lst nil)
  
  (setq ctrlPt_lst (append
                        (vl-remove-if-not
                          '(lambda (x) (or (= 11 (car x)) (= 10 (car x))))
                          (entget ent)
                        )
                        ctrlPt_lst
                      )
  )
  ; (print ctrlPt_lst)
  
  (mapcar 'cdr ctrlPt_lst)
)
回复

使用道具 举报

 楼主| 发表于 2022-8-5 15:08 | 显示全部楼层
xj6019 发表于 2022-8-5 15:05
你这是要弄打标线吗?两个端部不需要先往内部缩进个0.5后 再画1mm的线吗?

不需要的,直接从端点尾部开始的
回复

使用道具 举报

发表于 2022-8-5 15:20 | 显示全部楼层
mituzhe 发表于 2022-8-5 15:07
;----------------------------------------------------------------------------------------------- ...

试试这个能不能满足你的要求
回复

使用道具 举报

发表于 2022-8-5 15:28 | 显示全部楼层
其实如果只是想要标记顶点位置。可以单独画 点(POINT)图元,可以标记出所有顶点。目前我这个代码,对多段线折线,只能计算第一段,但如果标记点,稍微修改能标记所有位置
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 22:50 , Processed in 0.360524 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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