yxh1202 发表于 2018-3-22 17:01:06

在选定的直线中点上插入指定的块出错了,请老师指点

我需要在图中选定一条直线,查看了前辈的资料,勉强编写了如下代码:
其中TYC 是网上找的。XDK是我做的,问题是出错,不知道原因,请指点迷津
(defun c:tyc ()
(setvar "cmdecho" 0)
(command "line" pause pause "")        ;你要的线可见
(setq newe (entlast))
(setq en (entget newe))
(setq p1 (cdr (assoc 10 en)))                ;起点位置
(setq p2 (cdr (assoc 11 en)))                ;端点位置
(setq a (angle p1 p2))                ;旋转
(setq a1 (* a (/ 180 pi)))
(command "-insert" "管网标记" p2 "" "" a1) ;块插入起点位置
(command "-insert" "管网标记" p1 "" "" a1) ;块插入端点位置
(princ)
)


(defun c:xdk ()
(setvar "cmdecho" 0)
;;;(setq os (getvar "osmode"))
;;;(setvar "osmode" 0)
(setq ent (car (entsel "\n选取线: ")))
(setq en (entget ent))
(setq pt10 (cdr (assoc 10 en)))
(setq pt11 (cdr (assoc 11 en)))
(setq midpt (mapcar '* '(0.5 0.5 0.5) (mapcar '+ p10 p11)))
(setq a (angle pt10 pt11))                ;旋转
(setq al (* a (/ 180 pi)))
(command "-insert" "管网标记" midpt "" "" al) ;块插入起点位置
;;;(command "-insert" "管网标记" p1 "" "" al) ;块插入端点位置
(princ)
)

;;164.13 [功能] 曲线中点
;;示例 (HH:GetMidpointCurve (car (entsel)))
(defun HH:GetMidpointCurve (curve / d)
(setq        d (/ (vlax-curve-getDistAtParam
             curve
             (vlax-curve-getEndParam curve)
             )
             2
          )
)
(vlax-curve-getPointAtDist curve d)
)


;;;返回直线段的中点
;;;用法: (ptmid 直线段图元)
(defun ptmid (Xent)
(setq        dxf (entget Xent)
        p10 (cdr (assco 10 dxf))
        p11 (cdr (assoc 11 dxf))
        mid (mapcar '* '(0.5 0.5 0.5) (mapcar '+ p10 p11))
)
)



yxh1202 发表于 2018-3-23 08:11:40

昨天忘了上传块文件,现在补上。请高手指点

管网标记可以实现在中点插入并随直线方向旋转,但是管线标记就只能在中点插入,无法实现随直线方向旋转。

bssurvey 发表于 2018-3-23 09:01:40

(setq midpt (mapcar '* '(0.5 0.5 0.5) (mapcar '+ p10 p11)))
改成(setq midpt (mapcar '* '(0.5 0.5 0.5) (mapcar '+ pt10 pt11)))

yxh1202 发表于 2018-3-23 11:19:27

bssurvey 发表于 2018-3-23 09:01
(setq midpt (mapcar '* '(0.5 0.5 0.5) (mapcar '+ p10 p11)))
改成(setq midpt (mapcar '* '(0.5 0.5 0 ...

呵呵,我太粗心大意了
页: [1]
查看完整版本: 在选定的直线中点上插入指定的块出错了,请老师指点