明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1686|回复: 4

[讨论] 离曲线端点 指定距离d 插入块

[复制链接]
发表于 2022-12-23 15:04:10 | 显示全部楼层 |阅读模式
本帖最后由 自贡黄明儒 于 2022-12-23 15:15 编辑

千古文章多闲话,论坛多废贴,我为论坛废贴添砖加瓦
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;离曲线d 插入块
  3. ;;164.23 [功能] 多段线所击点离起点近
  4. ;;示例(HH:PickToStart (car(setq en(entsel))) (cadr en))
  5. (defun HH:PickToStart (curve p / L1 L2 PP)
  6.   (setq pp (vlax-curve-getclosestpointto curve (trans p 1 0)))
  7.   (setq  L2 (vlax-curve-getDistAtParam curve
  8.               (vlax-curve-getEndParam curve)
  9.      )
  10.   )
  11.   (setq L1 (vlax-curve-getDistAtPoint curve pp))
  12.   (> (- L2 L1) L1)
  13. )

  14. (defun _HH:MyI (e d name / ANG ANGB ECURVE P P0 PARAM PRCS)
  15.   (setq p0 (cadr e))
  16.   (if (= (length e) 4)
  17.     (progn
  18.       (setq angB (cdr (assoc 50 (entget (car (last e))))))  ;块转角
  19.       (setq prcs (MAT:TransNested p0 (last e) 1 2))      ;将点用户转换到块坐标系 By highflybird
  20.       (setq Ecurve (car e))            ;块内图元
  21.       (setq prcs (vlax-curve-getClosestPointTo Ecurve prcs))
  22.       ;;计算击点离终点近还是起点近
  23.       (if (HH:PickToStart Ecurve prcs)
  24.   (setq p (vlax-curve-getPointAtDist Ecurve d))
  25.   (setq
  26.     p (vlax-curve-getPointAtDist Ecurve
  27.                (- (vlax-curve-getDistAtParam Ecurve
  28.                      (vlax-curve-getEndParam Ecurve)
  29.             )
  30.             d
  31.                )
  32.       )
  33.   )
  34.       )
  35.       ;;Z坐标归0,不然后算出来的角度不对
  36.       (setq prcs (mapcar '+ '(0 0) p))
  37.       (setq Param (vlax-curve-getParamAtPoint Ecurve prcs))
  38.       (setq ang (angle '(0 0) (vlax-curve-getFirstDeriv Ecurve param)))
  39.       (setq ang (+ ang angB))
  40.       ;;离曲线d0的点,从块中转出来
  41.       (setq p (MAT:TransNested prcs (last e) 2 1))
  42.     )
  43.     (progn
  44.       (setq Ecurve (car e))
  45.       (setq prcs (vlax-curve-getClosestPointTo Ecurve (cadr e)))
  46.       (if (HH:PickToStart Ecurve prcs)
  47.   (setq p (vlax-curve-getPointAtDist Ecurve d))
  48.   (setq
  49.     p (vlax-curve-getPointAtDist Ecurve
  50.                (- (vlax-curve-getDistAtParam Ecurve
  51.                      (vlax-curve-getEndParam Ecurve)
  52.             )
  53.             d
  54.                )
  55.       )
  56.   )
  57.       )
  58.       (setq prcs (mapcar '+ '(0 0) p))
  59.       (setq Param (vlax-curve-getParamAtPoint Ecurve prcs))
  60.       (setq ang (angle '(0 0) (vlax-curve-getFirstDeriv Ecurve param)))
  61.     )
  62.   )

  63.   ;;1 插入块
  64.   (entmake (list '(0 . "INSERT")
  65.      (cons 2 name)
  66.      (cons 10 p)
  67.      (cons 50 Ang)
  68.      (cons 8 "0")
  69.      (cons 41 1)
  70.      (cons 42 1)
  71.      (cons 43 1)
  72.      )
  73.   )
  74.   ;;2 旋转块
  75.   ((if command-s  command-s vl-cmdf) "._rotate" (entlast) "" "non" p pause)
  76.   (princ "\n 插入块 MyI")
  77. )

  78. (defun C:MyI (/ D D0 E EN MYI NAME NAME0)
  79.   ((if command-s  command-s vl-cmdf) "_.ucs" "_w")
  80.   (if (setq MyI (GETENV "HuangMR\\MyI"));(sETENV "HuangMR\\MyI" "")
  81.     (progn
  82.       (setq MyI (read MyI))
  83.       (setq d0 (car MyI))
  84.       (setq name0 (cdr MyI))
  85.     )
  86.   )

  87.   (if d0
  88.     (setq d (getreal (strcat "\n 块插入距离<" (vl-princ-to-string d0) ">:")))
  89.     (setq d (getreal "\n 块插入距离:"))
  90.   )
  91.   (if d
  92.     (setq d0 d)
  93.     (setq d d0)
  94.   )
  95.   
  96.   (if (setq e (LM:ssget "\n 拾取块名:" '("_+.:E:S" ((0 . "INSERT")))))
  97.     (progn
  98.       (setq e (ssname e 0))
  99.       (setq en (entget e))
  100.       (setq name (cdr (assoc 2 en)))
  101.     )
  102.     (if  name0
  103.       (setq name (getstring (strcat "\n 块名<" name0 ">:")))
  104.       (setq name (getstring "\n 块名:"))
  105.     )
  106.   )
  107.   (if (/= name "")
  108.     (setq name0 name)
  109.     (setq name name0)
  110.   )
  111.   
  112.   (if (and d name (/= name ""))
  113.     (progn
  114.       (setenv "HuangMR\\MyI" (vl-prin1-to-string (cons d name)))
  115.       (if (and (tblobjname "BLOCK" name) (setq e (nentsel "\n 点取曲线:")))
  116.   (_HH:MyI e d name)
  117.       )
  118.     )
  119.   )
  120.   (princ)
  121. )
  122. ;;离曲线d 插入块
  123. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

本帖子中包含更多资源

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

x

评分

参与人数 5明经币 +5 金钱 +5 收起 理由
USER2128 + 1 赞一个!
东升铮 + 1 很给力!
guosheyang + 1 赞一个!
ptime + 1 + 5
start4444 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2022-12-24 08:33:22 | 显示全部楼层
以上实际 是我写的第二版,解决了画桁架上插入块的问题。实用上还是不方便,最后仿命令I,感觉好多了

本帖子中包含更多资源

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

x
发表于 2022-12-24 08:54:58 | 显示全部楼层
自贡黄明儒 发表于 2022-12-24 08:33
以上实际 是我写的第二版,解决了画桁架上插入块的问题。实用上还是不方便,最后仿命令I,感觉好多了

大佬,第二版也分享下呗
发表于 2023-3-23 21:53:18 | 显示全部楼层
真不错!很好
发表于 2023-3-24 08:38:48 | 显示全部楼层
自贡黄明儒 发表于 2022-12-24 08:33
以上实际 是我写的第二版,解决了画桁架上插入块的问题。实用上还是不方便,最后仿命令I,感觉好多了

黄大师太强了~
不知道有没有得分享呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 12:37 , Processed in 0.165252 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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