明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: yjr111

【悬赏10明经币】求与线平齐小程序

    [复制链接]
发表于 2022-3-17 04:35:08 来自手机 | 显示全部楼层
Gu_xl 发表于 2011-10-21 00:04

没有必要打开线宽吧
回复

使用道具 举报

发表于 2022-3-17 11:01:54 | 显示全部楼层

感觉开了线宽,CAD运行就慢了很多。
回复

使用道具 举报

发表于 2023-5-13 17:35:39 | 显示全部楼层

是我想要的!还能90° 180°旋转调整,简直神器!
回复

使用道具 举报

发表于 2023-5-27 08:37:28 | 显示全部楼层

非常好,如果能复制(不移动),还能不自动关闭捕捉,那就是十分完美了!
回复

使用道具 举报

发表于 2023-7-13 13:10:03 | 显示全部楼层
依然小小鸟 发表于 2018-8-19 21:46
能增加框选的功能吗?  楼主 我看你最近还在上论坛 民众的呼声啊 希望你能看到  增加框选对象功能 谢谢楼 ...

里面加个变量就可以
回复

使用道具 举报

发表于 2023-7-13 13:51:54 | 显示全部楼层
loveu515 发表于 2023-7-13 13:10
里面加个变量就可以

我不会写代码
回复

使用道具 举报

发表于 2023-7-13 14:05:29 | 显示全部楼层

我也不会啊

  1. ;;;;;;;物体(文字、曲线、块)与线平齐;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;;;;;;;;;;;;;;;BY yjr111 2011-10-25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  3. (defun c:yxpq(/ e1 e2 ee eee s11  p11 ang1 ang2 an lst11 JIAODU1  JIAODU2 JIAODU3 ss)
  4.   (vl-load-com)
  5.   (setvar "cmdecho" 0)
  6.   (setq e1 (car(setq ee(nentselp"\n 请选择要对齐的边:"))))
  7.   (setq s11 (entget e1))
  8.     (princ "\n请选择要对齐的全部图元:")
  9.   (setq ss (ssget))
  10.   
  11.   (if (wcmatch(cdr(assoc 0 s11))"*TEXT")
  12.     (progn
  13.       (setq p11 (cdr(assoc 10 s11)))
  14.       (setq ang1 (cdr(assoc 50 s11))))
  15.     (progn
  16.   (setq lst11(nentselp (setq p11(cadr ee))))
  17.   (qvxianjiaodu lst11 )
  18.   (setq ang1 an))
  19.     )
  20.   (SETQ JIAODU1 (* (/ ang1 PI)180))
  21.   (setq an nil)
  22.   (setq e2 (car(setq eee(nentselp"\n 请选择物体要对齐的曲线"))))
  23.   (setq lst11(nentselp (cadr eee)))
  24.   (qvxianjiaodu lst11 )
  25.   (setq ang2 an)
  26.   (SETQ JIAODU2 (* (/ ang2 PI)180))
  27.   (setq an nil)
  28. ;;;;;;;;;;;;;;旋转平移;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  29.   
  30.    
  31.     (IF (> (LENGTH ee)2) (PROGN (SETQ e1 (CAAR (REVERSE ee)))
  32.   (setq p11 (cdr(assoc 10 (ENTGET e1)))
  33.   jiaodu3 (*(/(cdr(assoc 50 (ENTGET e1)))PI)180))))
  34.   (setq jiaodu (- jiaodu2 jiaodu1))
  35.   
  36.   (cond
  37.          ((and(and e1 e2)(> (LENGTH ee)2))
  38.      (command "_.rotate" ss "" p11 (- jiaodu jiaodu3))  
  39.      (command  "_.MOVE" ss ""  p11  pause))
  40.   
  41.       (t(command "_.rotate" ss "" p11   jiaodu )  
  42.      (command  "_.MOVE" ss ""  p11  pause))
  43.   
  44.   )
  45.    
  46.   (princ)

  47. )



  48. ;;;;;;;;;;;;;引用highflybir的块切线的大部分代码,qvxianjiaodu部分有修改,在此致谢!;;;;;;;;;;;;;;;;;;;;;;;;;;


  49. (defun qvxianjiaodu (lst11 /  Bs en LST11 m pp  P1 P2 P3 P4 P5 P6 vt rt D L S)
  50.   (defun CheckIsCurve(en / dxf typ)          ;检查是否是曲线
  51.     (and
  52.       en                ;存在实体
  53.       (setq dxf (entget en))            ;DXF码
  54.       (setq typ (cdr (assoc 0 dxf)))          ;图元类型
  55.       (or (member typ '("ELLIPSE" "CIRCLE" "ARC" "RAY"))   
  56.           (wcmatch typ "*LINE")
  57.       )
  58.     )
  59.   )
  60.    
  61.   (if lst11      (progn                                                 ;;;原程序为while p0
  62.    
  63.     (setq en (car lst11))            ;光标处图元
  64.     (if (CheckIsCurve en)
  65.       (setq P12 (cadr lst11)            ;光标点
  66.       m  (caddr lst11)            ;变换矩阵
  67.       Bs (cadddr lst11)            ;块参照列表(可能有嵌套)
  68.       P1 (TransNested P12 Bs 1 2)         ;把点变换到图块坐标系
  69.       P1 (vlax-curve-getclosestpointto en P1)      ;得到最近点
  70.       pp (vlax-curve-getParamAtPoint en P1)      ;得到这点参数
  71.       vt (vlax-curve-getFirstDeriv en pp)        ;得到切线
  72.         an (angle '(0 0 0) vt)                ;切线角
  73.       
  74.       
  75.       )
  76.       (princ "\n你没点中或者此处不是曲线类物体!")
  77.     )
  78.   ))
  79.   (princ)
  80. )

  81. ;;; 矢量的点积                                                         
  82. ;;; VXV Returns the dot product of 2 vectors                           
  83. (defun vxv (v1 v2)
  84.   (apply '+ (mapcar '* v1 v2))
  85. )

  86. ;;; 矢量转置                                                            
  87. ;;; TRP Transpose a matrix -Doug Wilson-                                
  88. (defun trp (m)
  89.   (apply 'mapcar (cons 'list m))
  90. )

  91. ;;; 矢量的矩阵变换                                                      
  92. ;;; MXV Apply a transformation matrix to a vector -Vladimir Nesterovsky-
  93. (defun mxv (m v)
  94.   (mapcar (function (lambda (r) (vxv r v))) m)
  95. )

  96. ;;; 点到矩阵的变换
  97. (defun mxp (m p)
  98.   (reverse (cdr (reverse (mxv m (append p '(1.0))))))
  99. )

  100. ;;; 矩阵相乘                                                            
  101. ;;; MXM Multiply two matrices -Vladimir Nesterovsky-                    
  102. (defun mxm (m q)
  103.   (mapcar (function (lambda (r) (mxv (trp q) r))) m)
  104. )

  105. ;;;位移变换                                                            
  106. (defun translation (mat vec)
  107.   (mapcar (function
  108.       (lambda (x y)
  109.         (list (car x) (cadr x) (caddr x) (+ (cadddr x) y))
  110.       )
  111.     )
  112.     mat
  113.     vec
  114.   )
  115. )

  116. ;;;两矢量的叉积                                                         
  117. ;;; Vector Cross Product - Lee Mac         
  118. ;;; Args: u,v - vectors in R^3            
  119. (defun v^v ( u v )
  120.   (list
  121.     (- (* (cadr u) (caddr v)) (* (cadr v) (caddr u)))
  122.     (- (* (car  v) (caddr u)) (* (car  u) (caddr v)))
  123.     (- (* (car  u) (cadr  v)) (* (car  v) (cadr  u)))
  124.   )
  125. )
  126. ;; TransNested (gile)
  127. ;; Translates a point coordinates from WCS or UCS to RCS -coordinates system of a
  128. ;; reference (xref or block) whatever its nested level-
  129. ;;
  130. ;; Arguments
  131. ;; pt : the point to translate
  132. ;; rlst : the parents entities list from the deepest nested to the one inserted in
  133. ;;        current space -same as (last (nentsel)) or (last (nentselp))
  134. ;; from to : as with trans function: 0 for WCS, 1 for current UCS, 2 for RCS

  135. (defun TransNested (pt rlst from to)
  136.   (and (= 1 from) (setq pt (trans pt 1 0)))
  137.   (and (= 2 to) (setq rlst (reverse rlst)))
  138.   (and (or (= 2 from) (= 2 to))
  139.        (while rlst
  140.   (setq geom (if  (= 2 to)
  141.           (RevRefGeom (car rlst))
  142.           (RefGeom (car rlst))
  143.         )
  144.          rlst (cdr rlst)
  145.          pt   (mapcar '+ (mxv (car geom) pt) (cadr geom))
  146.   )
  147.        )
  148.   )
  149.   (if (= 1 to)
  150.     (trans pt 0 1)
  151.     pt
  152.   )
  153. )

  154. ;; RefGeom (gile)
  155. ;; Returns a list which first item is a 3x3 transformation matrix (rotation,
  156. ;; scales, normal) and second item the object insertion point in its parent
  157. ;; (xref, bloc or space)
  158. ;;
  159. ;; Argument : an ename

  160. (defun RefGeom (ename / elst ang norm mat)
  161.   (setq  elst (entget ename)
  162.   ang  (cdr (assoc 50 elst))
  163.   norm (cdr (assoc 210 elst))
  164.   )
  165.   (list
  166.     (setq mat
  167.      (mxm
  168.        (mapcar (function (lambda (v) (trans v 0 norm T)))
  169.          '((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0))
  170.        )
  171.        (mxm
  172.          (list (list (cos ang) (- (sin ang)) 0.0)
  173.          (list (sin ang) (cos ang) 0.0)
  174.          '(0.0 0.0 1.0)
  175.          )
  176.          (list (list (cdr (assoc 41 elst)) 0.0 0.0)
  177.          (list 0.0 (cdr (assoc 42 elst)) 0.0)
  178.          (list 0.0 0.0 (cdr (assoc 43 elst)))
  179.          )
  180.        )
  181.      )
  182.     )
  183.     (mapcar
  184.       '-
  185.       (trans (cdr (assoc 10 elst)) norm 0)
  186.       (mxv mat
  187.      (cdr (assoc 10 (tblsearch "BLOCK" (cdr (assoc 2 elst)))))
  188.       )
  189.     )
  190.   )
  191. )

  192. ;; RevRefGeom (gile)
  193. ;; RefGeom inverse function

  194. (defun RevRefGeom (ename / entData ang norm mat)
  195.   (setq  entData  (entget ename)
  196.   ang  (- (cdr (assoc 50 entData)))
  197.   norm  (cdr (assoc 210 entData))
  198.   )
  199.   (list
  200.     (setq mat
  201.      (mxm
  202.        (list (list (/ 1 (cdr (assoc 41 entData))) 0.0 0.0)
  203.        (list 0.0 (/ 1 (cdr (assoc 42 entData))) 0.0)
  204.        (list 0.0 0.0 (/ 1 (cdr (assoc 43 entData))))
  205.        )
  206.        (mxm
  207.          (list (list (cos ang) (- (sin ang)) 0.0)
  208.          (list (sin ang) (cos ang) 0.0)
  209.          '(0.0 0.0 1.0)
  210.          )
  211.          (mapcar (function (lambda (v) (trans v norm 0 T)))
  212.            '((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0))
  213.          )
  214.        )
  215.      )
  216.     )
  217.     (mapcar '-
  218.       (cdr (assoc 10 (tblsearch "BLOCK" (cdr (assoc 2 entData)))))
  219.       (mxv mat (trans (cdr (assoc 10 entData)) norm 0))
  220.     )
  221.   )
  222. )



回复

使用道具 举报

发表于 2024-7-12 16:39:34 | 显示全部楼层

版主,可以在这个程序增加一个复制的功能吗?
回复

使用道具 举报

发表于 2024-7-13 19:09:12 | 显示全部楼层

版主这个源码可以共享一下吗?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 14:21 , Processed in 0.174067 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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