如何链接属性块wi
你好我需要一个帮助来解决我的问题,我有一个例程,下面给出了它在我的图纸上给出了纬度和经度。
但是我想要一个可以帮助我解决问题的lisp。
e、 g.使用这个lisp我们得到纬度和经度。
现在,从块1开始,我想用经度替换A°B'C“N,用纬度替换E°F'G”E。
这给出了我在block2中给出的结果。
谢谢
块2.dwg
块1.dwg 对不起,我忘了提及我在区块2图纸中使用了42区和半球-N 只需将块作为lisp的一部分插入到co ord,然后它会自动要求两个属性,只需要一个简单的额外行
(command "Insert" "Dwg1" pt 1 1 0 Lat long)
Change
(princ (strcat "\n Latitude to (setq Lat (strcat "Latitude 非常感谢BIGAL
我已经根据你的建议更改了我的lisp,我的新修改lisp现在是
(defun C:1 ()
(setq lonzone (getint "\n Enter Zone:"))
(initget "N S")
(setq Hem (getkword "\n Enter the Hemisphere (S/N):"))
(setq Pnt (Getpoint "\n Specify Point:"))
(setq Xval (car Pnt))
(setq Yval (car (cdr Pnt)))
(if (= Hem "S")
(setq Y (- 10000000 Yval))
(setq Y Yval)
)
(if (and (or (= Hem "S") (= Hem "N")) (= Yval 0.0))
(progn
(setq Y Yval)
(setq Hem "Equator")
)
(progn
(setq Y Y)
(Setq Hem Hem)
)
)
(setq b 6356752.3142)
(setq a 6378137.0)
(setq X (- 500000.0 Xval))
(setq e (sqrt (- 1.0 (expt (/ b a) 2.0))))
(setq k0 0.9996)
(setq meridional-arc (/ Y k0))
(setq mu (/ meridional-arc
(* a
(- 1
(/ (expt e 2) 4)
(/ (* 3 (expt e 4)) 64)
(/ (* 5 (expt e 6)) 256)
)
)
)
)
(setq e1 (/ (- 1 (expt (- 1 (expt e 2)) 0.5))
(+ 1 (expt (- 1 (expt e 2)) 0.5))
)
)
(setq j1 (- (/ (* 3 e1) 2) (/ (* 27 (expt e1 3)) 32)))
(setq j2 (- (/ (* 21 (expt e1 2)) 16) (/ (* 55 (expt e1 4)) 32)))
(setq j3 (/ (* 151 (expt e1 3)) 96))
(setq j4 (/ (* 1097 (expt e1 4)) 512))
(setq footprint-latitude
(+ mu
(* j1 (sin (* 2.0 mu)))
(* j2 (sin (* 4.0 mu)))
(* j3 (sin (* 6.0 mu)))
(* j4 (sin (* 8.0 mu)))
)
)
(setq eprime2 (/ (* e e) (- 1.0 (* e e))))
(setq c1 (* eprime2 (expt (cos footprint-latitude) 2)))
(setq t1 (expt (/ (sin footprint-latitude) (cos footprint-latitude))
2
)
)
(setq r1 (/ (* a (- 1 (expt e 2)))
(expt (- 1
(* (expt e 2)
(expt (sin footprint-latitude) 2)
)
)
1.5
)
)
)
(setq n1 (/ a
(expt (- 1
(* e
e
(sin footprint-latitude)
(sin footprint-latitude)
)
)
0.5
)
)
)
(setq d (/ X (* n1 k0)))
(setq
q1 (/ (* n1 (/ (sin footprint-latitude) (cos footprint-latitude)))
r1
)
)
(setq q2 (/ (* d d) 2))
(setq q3 (/ (* (- (+ 5
(* 3 t1)
(* 10 c1)
)
(* 4 c1 c1)
(* 9 eprime2)
)
(expt d 4)
)
24
)
)
(setq q4 (/ (* (- (+ 61
(* 90 t1)
(* 298 c1)
(* 45 t1 t1)
)
(* 3 c1 c1)
(* 252 eprime2)
)
(expt d 6)
)
720
)
)
(setq q6 (/ (* (+ 1 (* 2 t1) c1) (expt d 3)) 6))
(setq q7 (/ (*
(+ (- (+ (- 5 (* 2 c1)) (* 28 t1)) (* 3 c1 c1))
(* 8 eprime2)
(* 24 t1 t1)
)
(expt d 5)
)
120
)
)
(setq zone-cm (- (* 6.0 lonzone) 183.0))
(setq lat (- footprint-latitude (* q1 (+ (- q2 q3) q4))))
(setq latitude (* (/ 180 pi) lat))
(if (> latitude 90.0)
(setq latitude 90.0)
(setq latitude latitude)
)
(setq latdeg (fix latitude))
(setq latmins (* (- latitude (fix latitude)) 60))
(setq latsecs (* (- latmins (fix latmins)) 60))
(setq long (/ (+ (- d q6) q7) (cos footprint-latitude)))
(setq longr (* (/ 180 pi) long))
(setq longitude (- zone-cm longr))
(if (< longitude 0.0)
(setq lonhem "W")
(setq lonhem "E")
)
(if (< longitude 0.0)
(setq longitude (* -1 longitude))
(setq longitude longitude)
)
(setq londeg (fix longitude))
(setq lonmins (* (- longitude (fix longitude)) 60))
(setq lonsecs (* (- lonmins (fix lonmins)) 60))
(setq Lat (strcat "Latitude" (itoa latdeg)
"°"
(itoa (fix latmins))
"'"
(rtos latsecs 2 2)
"''"
Hem
)
)
(setq long (strcat "Longitude" (itoa londeg)
"°"
(itoa (fix lonmins))
"'"
(rtos lonsecs 2 2)
"''"
lonhem
)
)
(command "Insert" "test" pnt 1 1 0 Lat long)
(princ)
)
但当我用我附加的属性块处理它时,它会出错。
它显示的错误是
Command: 1
Enter Zone:42
Enter the Hemisphere (S/N):N
Specify Point:Unknown command "LATITUDE20°55'23.23''N".Press F1 for help.
Unknown command "LONGITUDE71°31'26.21''E".Press F1 for help.
Lisp程序有什么错误吗
块1.dwg 似乎您在代码(测试)中使用的块不包含两个预期属性-如果您不知道如何创建它们,请查看本教程。或者将ATTREQ系统变量设置为0而不是1。 谢谢Msasu
那个教程帮助我学到了很多新东西。现在,我已经创建了新的属性块,但仍然显示与lisp相同的错误。
块1.dwg 似乎您没有修复ATTREQ系统变量的状态-在您附加的示例图形中,该值设置为0。因此,当通过AutoLISP插入块时,解释器不期望属性值。将所述变量设置为1,它应按预期工作。 我已经按照你说的去了,现在工作很顺利
非常感谢Msasu和BIGAL
但我还需要一件事,无论我在哪里放置挡块,它都应该是最近的舍入位置
i、 e.如果我把它放在762474.59432315668.1052,它将给出纬度-77°31'25.01''e和经度-20°55'22.05''N
但我想把它放在北纬77°31'25.00''E和经度20°55'22.00''N的位置
表示我将到达的最近位置。00十进制
有什么办法可以做到吗 你可以用舍入误差玩一个简单的例子,将一个数字乘以100,取整数,然后再除以100,最后2个数字。对于lats和long,需要一些实验,否则只需要在字符串答案中切掉秒,但你们会凑齐吗? 作为新手,我真的不知道如何编辑这些代码,你能给我演示一下吗
页:
[1]
2